签名算法
目前支持国密 SM3 签名 和md5签名
SM3 签名
SM3 是一种摘要生成算法, 通过在签名原始串后加上商户通信密钥的内容, 进行 sm3或者MD5 运算, 形成的摘要字符串即为签名结果。 为了方便比较, 签名结果统一转换为大写字符。
注意: 签名时将字符串转化成字节流时指定的编码字符集应与参数 charset 一致。
MD5 签名计算公式:
sign = Md5(原字符串&key=商户密钥). toUpperCase
如:
假设以下为 XML 传入参数:
<xml><body><![CDATA[测试支付]]></body>
<mch_create_ip><![CDATA[127.0.0.1]]></mch_create_ip>
<mch_id><![CDATA[001075552110006]]></mch_id>
<nonce_str><![CDATA[1409196838]]></nonce_str>
<notify_url><![CDATA[http://227.0.0.1:9001/javak/sds?123&23=3]]></notify_url>
<out_trade_no><![CDATA[141903606228]]></out_trade_no>
<service><![CDATA[unified.trade.micropay]]></service>
<sign><![CDATA[83684D9546F261997EFF2ECFAC372583]]></sign>
<total_fee><![CDATA[1]]></total_fee>
</xml>
假设商户密钥为: e1cf0ddcf6b47b59c351565d8ad717af
i: 经过 a 过程 URL 键值对字典序排序后的字符串 string1 为:
body=测试支付
&mch_create_ip=127.0.0.1&mch_id=001075552110006&nonce_str=1409196838¬ify_url=http://227.0.0.1:9001/javak/sds?123&23=3&out_trade_no=141903606228&service=pay.weixin.scancode&total_fee=1
ii: 经过 b 过程后得到 sign 为:
sign=md5(string1&key=e1cf0ddcf6b47b59c351565d8ad717af).toUpperCase
=md5(body=测试支付
&mch_create_ip=127.0.0.1&mch_id=001075552110006&nonce_str=1409196838¬ify_url=http://227.0.0.1:9001/javak/sds?123&23=3&out_trade_no=141903606228&service=unified.trade.micropay&total_fee=1&key=e1cf0ddcf6b47b59c351565d8ad717af).toUpperCase()
=”83684D9546F261997EFF2ECFAC372583”