金蝶给的例子如下:不知道如何用狐表生成signeddata
协议内容解析(演示例子中的参数协议,具体实际应用可以自定义,但基本参数不能缺少):
参数格式:ud=|dbid|username|appid|signeddata|timestamp[|lcid],其中ud为参数名;协议格式:|dbid|username|appid|signeddata|timestamp[|lcid]
dbid:数据中心的ID;username:用户名称;
appid:应用程序ID,通过Administrator登录数据中心后,在【系统管理】分类的【第三方系统登录授权】功能里面进行新增维护;
signeddata:数据签名串,通过公钥和用户数据进行运算得到,在后面有详细说明;
// signeddata公钥字符串,来自administrator管理中【第三方系统登陆授权】功能分配的加密钥匙
// 参数中secret为【第三方系统登陆授权】中自动分配的【应用密钥】
var signedData = Kingdee.BOS.Util.SHA1Util.GetSignature(
new string[] {
dbId, userName, appId, secret, timeStamp.ToString()
});
timestamp:登录时间戳(Unix时间戳,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数);
lcid(可选):语言ID,中文2052(默认),英文1033,繁体3076
.
ps: 如果使用的是其他语言,比如java等,可以参照下面算法生成数据签名串[signedData]:
以下内容为程序代码:///
/// SHA1签名
/////////public static string GetSignature(string[] arr){//1. 将数组进行排序//2. 将数组拼接成一个字符串进行sha1加密arr = arr.OrderBy(z => z).ToArray();var arrString = string.Join("", arr);var sha1 = SHA1.Create();var sha1Arr = sha1.ComputeHash(Encoding.UTF8.GetBytes(arrString));StringBuilder enText = new StringBuilder();foreach (var b in sha1Arr){enText.AppendFormat("{0:x2}", b);}
return enText.ToString();
}