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

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

接口地址:http://open.yto.net.cn/OpenPlatform/doc


电子面单创建标准接口:

签名流程:

1.1.3 数据处理
序号 步骤
1 在POST时用“logistics_interface”字段表示要发送的XML报文内容。
2 在POST时用“data_digest”字段进行签名验证。
3 假设xml内容为: <order></order>, partnerId(商家密钥)为123456。 则要签名的内容为<order></order>123456,然后对<order></order>123456先进行MD5加密,然后转换为base64字符串。 即经过md5(16位)和base64后的内容就为 LghTkEmsD2tbQ3fsIBRcBg==。
4 同样需要对签名的字符串进行URL编码,LghTkEmsD2tbQ3fsIBRcBg==的内容为:LghTkEmsD2tbQ3fsIBRcBg%3D%3D。
5 最终要发送的数据为logistics_interface=%3Corder%3E%3C%2Forder%3E &data_digest= LghTkEmsD2tbQ3fsIBRcBg%3D%3D &type=offline&clientId=K21000119


主要是每次自己签名跟上面的老是对上不,他又不给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 com.sun.org.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;  
    }  




评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值