200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 圆通快递电子面单接口开发坑

圆通快递电子面单接口开发坑

时间:2022-09-11 13:44:39

相关推荐

圆通快递电子面单接口开发坑

用了3天左右对接落实圆通快递电子面单,这过程遇到觉得坑的就是签名,用了将近一个下午。

接口地址:.cn/OpenPlatform/doc

电子面单创建标准接口:

签名流程:

1.1.3 数据处理

主要是每次自己签名跟上面的老是对上不,他又不给md5 16位的结果出来,郁闷。。。

假设xml内容为: <order></order>, partnerId(商家密钥)为123456。 则要签名的内容为<order></order>123456,然后对<order></order>123456先进行MD5加密,然后转换为base64字符串。 即经过md5(16位)和base64后的内容就为 LghTkEmsD2tbQ3fsIBRcBg==。

这个是重点,每次都是不一样的结果base64 md5换了几种方式都一样

下午快疯的时候,还是得吹下冷风

最后还是逆着来将 LghTkEmsD2tbQ3fsIBRcBg== base64网上解密是乱码,程序解也是,只能分析下解密后的byte数组,发现存在着负数的,而我们一般md5转出来的string,是默认加上256的,然后 然后就可以了

原来是 md5 16位byte数组 再base64,怎么就不写清楚点呢

另注意下 编码的问题

import java.security.MessageDigest;

import .apache.xml.internal.security.utils.Base64;

/**

* 签名

* 参数xml+partnerId md5加密 为16位byte

* 再base64位

* @param sourceStr

* @param key

* @return

*/

private String MD5(String sourceStr, String key) {

String result = "";

try {

MessageDigest md5 = MessageDigest.getInstance("MD5");

byte[] bytes = md5.digest((sourceStr + key).getBytes(Charset.forName("utf-8")));

result = Base64.encode(bytes);

} catch (NoSuchAlgorithmException e) {

System.out.println(e);

LOG.info("圆通生成签名出错:{}", e.getMessage());

}

return result;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。