移动平台第三方系统集成方案V2.0

最近收到很多客户和伙伴的反馈,希望能够在第三方系统中,集成金蝶云星空的业务审批,例如查看业务审批列表,接受待办消息推送,点击待办消息进行审批等。尤其是在钉钉环境中,对业务审批的集成更为迫切(由于钉钉出入口ip的限制,金蝶公有云环境无法直接接入钉钉)。基于这个考虑,我们推出了移动平台第三方系统集成方案,详细介绍如下:
接入流程与使用场景,如图所示:

a、 开发者在金蝶云星空后台进行相关配置,并实现相关的接口;
b、 客户提交工作流后,待办消息会由金蝶云星空系统,自动推送到指定的接口;
c 、开发者获得推送的消息后,对消息的处理(如推送到钉钉等);
d、 客户接收到推送的消息,点击进入开发者设计的中转页面,并通过单点登录的方式进入金蝶云系统进行;
e、如果不需要接受消息推送,那么只需要实现单点登录即可;
f、适用版本:8.0 及以上补丁
g、对应的单据,需要再Administrator登录==》移动平台单据启用设置===》启用移动审批;
h、Administrator登录==》参数设置==》基础管理===》移动平台==》发送第三方消息==开启
2. 单点登录实现:
2.1参数设置:
登录金蝶云星空后台,打开表单-第三方系统登录授权,点击新增,如下图:

点击获取应用ID,按步骤操作,操作完成后,如下图所示,其中 应用名称和密钥可修改;集成用户不需要选择,然后点击保存:

2.2 代码实现:
开发者需要根据上述应用id,密钥,以及当前登录用户名,来生成单点登录的链接,并在中转页面中进行跳转,c#代码示例如下:
private void GotoCloud()
{
string url = GetUrl();
this.Response.Redirect(url);
}
private string GetUrl()
{
//数据中心Id
string acctId = "5d1af48d463f54";
//用户名
string username = "db";
//第三方系统登录授权的应用Id;
string appId = "204740_5ecB67CG1oCZW9/JSYQOybwFTMw62omL";
//第三方系统登录授权的应用密钥;
string appSecret = "090de81733b5466cb90bdb2cc6e76b19";
int lcId = 2052; //语言标识 中文:2052,繁体:3067,英文:1033
long timestamp = CurrentTimeMillis() / 1000; //时间戳
string[] arr = new string[] { acctId, username, appId, appSecret, timestamp.ToString() };
//签名
string sign = GetSignature(arr);
//base64编码
string sign64 = GetBase64String(appId,username,appSecret,sign,timestamp);
//金蝶云星空后台设置的系统公网地址
string serverUrl = "http://172.17.1.121/k3cloud";
//登录成功后打开的表单Id,业务审批列表:Mob_XWfListEdit; 业务审批详情:Mob_DistributionWfBill;
string formId = "MOB_CoreConsole";
//移动单据列表则用formtype = "mobilelist"
string formType = "mobile";
//单据详情主键,如果打开的是业务审批详情,需要传入的是待办任务id
string pkId = "";
string url = GetUrl(serverUrl, acctId, lcId, sign64, formId, formType, pkId);
return url;
}
private string GetUrl(string serverUrl, string acctId, int lcId, string sign64, string formId, string formType, string pkId)
{
string url = string.Format(@"{0}/xmobile/cloud.html?entryrole=oo&acctid={1}&lcid={2}&sign={3}&formid={4}&formtype={5}&pkid={6}", serverUrl, acctId, lcId, sign64, formId, formType, pkId);
return url;
}
private string GetBase64String(string appId, string username, string appSecret, string sign, long timestamp)
{
//下面json中的参数严格区分大小写,请保持一致
string signInfo = "{'appId':'" + appId + "','username':'" + System.Web.HttpUtility.UrlEncode(username) + "','sign':'" + sign + "','timestamp':" + timestamp + "}";
byte[] bytes = Encoding.UTF8.GetBytes(signInfo);
return Convert.ToBase64String(bytes);
}
private string GetSignature(string[] arr)
{
//1. 将数组进行排序
//2. 将数组拼接成一个字符串进行sha加密
Array.Sort(arr, StringComparer.Ordinal);
var arrString = string.Join("", arr);
var sha = System.Security.Cryptography.SHA256.Create();
var shaArr = sha.ComputeHash(Encoding.UTF8.Ge
移动平台第三方系统集成方案V2.0
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



