签名算法
19支付 签名算法与微信官方签名算法一致
签名生成的通用步骤如下
1.设所有发送或者接收到的数据为集合M,将集合内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
2.在stringA最后拼接上&key=密钥得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值
特别注意以下重要规则:
a.参数名ASCII码从小到大排序(字典序);
b.如果参数的值为空不参与签名;
c.参数名区分大小写;
d.验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
e.19支付 接口可能增加字段,验证签名时必须支持增加的扩展字段
示例
例如传递的参数如下:
1. app_id: 191008821006
2. total_fee: 1
3. out_trade_no: 2019101056485
第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下
app_id=191008821006&out_trade_no=2019101056485&total_fee=1
第二步:对上一步中的字符串拼接&key=密钥 (登录19支付平台-> 商户管理 -> 支付对接 AppSecret 前往获取)
app_id=191008821006&out_trade_no=2019101056485&total_fee=1&key=xxxxxxxxx
第三步:对上一步中字符串取MD5值
String sign = MD5("app_id=191008821006&out_trade_no=2019101056485&total_fee=1&key=xxxxxxxxx")
第四步:对上面md5值转化为大写
sign.toUpperCase();
JAVA代码示例
以 JAVA 语言为例,调用网站支付接口的代码示例如下:
