开发文档
安全及数据完整性:
1、 支持的消息接收方式只支持 HTTP POST;所有 XML/JSON 格式的字符串,以 HTTP POST
方式发送,请求方法的编码格式:“application/x-www-form-urlencoded; charset=UTF-8”;
2、 在 POST 时用“logistics_interface”字段表示要发送的 XML/JSON 内容;
3、 在 POST 时用“data_digest”字段进行签名验证。签名使用 MD5 方式, logistics_interface对
的内容进行签名。原理为:通知内容(xml/json)+密钥,然后进行 MD5,转换为 Base64
字符串。详细解释如下:
?假设 xml 内容为:< logisticsEventsRequest ></ logisticsEventsRequest >,密钥为
123456;
?那么要签名的内容为<logisticsEventsRequest></logisticsEventsRequest >123456(默认 UTF-8 编码) 经过 md5 和 base64 后的内容就为 LghTkEmsD2tbQ3fsIBRcBg==;
??最终要发送的数据为logistics_interface=<logisticsEventsRequest></logisticsEventsRequest>&data_digest=Lg
hTkEmsD2tbQ3fsIBRcBg==& msg_type =tmall.logistics.event.tms.declare&msg_id=2132323;
4、要求 CP 收到消息后,一定要验证数据是否完整及正确;
数据发送和接收处理流程:
数据发送流程:压缩(可选)-> BASE64 编码(可选,默认使用)-> 数字签名-> 发送;
数据接收流程:接收-> 数字签名校验-> BASE64 解码(可选,默认使用)-> 解压(可选)->
处理;
问题是:
要签名的内容为<logisticsEventsRequest></logisticsEventsRequest >123456(默认 UTF-8 编码) 经过 md5 和 base64 后的内容就为 LghTkEmsD2tbQ3fsIBRcBg==;
我用C#自带的md5和base64加密方式都无法转为 LghTkEmsD2tbQ3fsIBRcBg==,
<logisticsEventsRequest></logisticsEventsRequest >123456经过MD5加密后:2D37B7E39A8FB2407FCE96172B991573再经过base64加密后:MkQzN0I3RTM5QThGQjI0MDdGQ0U5NjE3MkI5OTE1NzM=
文档里的LghTkEmsD2tbQ3fsIBRcBg==是怎么来的,求解答,谢谢。
有相关API开发经验的高手不吝赐教啊!
------解决思路----------------------
从长度上看,应该是2D37B7E39A8FB2407FCE96172B991573直接放在byte[]中做base64编码。
------解决思路----------------------
他给的文档一定是从别的地方抄的,改了数据却没改md5的结果,下面的代码才能生成输出LghTkEmsD2tbQ3fsIBRcBg==
var str = "<order></order>123456";
using(var md5 = new MD5CryptoServiceProvider())
{
var b = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
Console.WriteLine(Convert.ToBase64String(b));
}
------解决思路----------------------
我的计算 结果应该是:“LTe345qPskB/zpYXK5kVcw==”
不知道对不对。
不过楼主的计算结果肯定有问题,因为最后编码太长了,应该是多了”把MD5编码结果进行16进制编码“这一步。
数组”经MD5加密“的结果应该是byte[]类型,而不应该是string类型。