接口规则

协议规定

术语 描述
传输方式 为保证交易安全性,建议采用 HTTPS 传输
提交方式 采用 POST 方法提交
数据格式 提交和返回数据都为 json 格式
字符编码 统一采用 UTF-8 字符编码
签名算法 MD5
签名要求 请求和接收数据均需要校验签名,详细方法请参考签名算法
判断逻辑 先判断协议字段返回,再判断业务返回,最后判断交易状态

签名算法

目前支持MD5签名:MD5 是一种摘要生成算法,通过在签名原始串后加上商户通信密钥的内容,进行MD5运算,形成的摘要字符串即为签名结果。为了方便比较,签名结果统一转换为大写字符。

sign签名计算公式:

sign = Md5(原字符串&key=密钥).toUpperCase

签名生成的通用步骤如下:

第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特别注意以下重要规则:
1、参数名ASCII码从小到大排序(字典序);
2、如果参数的值为空不参与签名;
3、参数名区分大小写;
4、验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验;
5、接口可能增加字段,验证签名时必须支持增加的扩展字段。

第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

如: 假设传送的参数如下:

app_id:969037206616276993
merchant_code:1010174934854402049
out_trade_no:
channel:HKB
product:WECHAT_DYNAMIC_SCAN_CODE
client_ip:218.76.8.29
amount:1
body:test
description:test
subject:test
notify_url:http://127.0.0.1/notify/wechat
sign_type:MD5

第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:

stringA= amount=1&app_id=969037206616276993&body=test&channel=HKB&client_ip=218.76.8.29&description=test&merchant_code=1010174934854402049&notify_url=http://127.0.0.1/notify/wechat&out_trade_no=1027805986871574528&product=WECHAT_DYNAMIC_SCAN_CODE&sign_type=MD5&subject=test

第二步:拼接API密钥:

stringSignTemp=stringA&key=6C7C97D68C7DB148DE678B4F5827D2F0 sign=MD5(stringSignTemp).toUpperCase()="C3D0BB2D39C1274C89B332F2B5739CA4";

最终得到最终发送的数据:

{
  "app_id": "969037206616276993",
  "merchant_code": "1010174934854402049",
  "out_trade_no": "T120190318111208",
  "channel": "HKB",
  "client_ip": "218.76.8.29",
  "amount": "1",
  "subject": "ddddss",
  "body": "ddd",
  "description": "3333",
  "notify_url": "https://pay.91xft.cn/xft_tx/pay/mockmentchantNotify.do",
  "sign_type": "MD5",
  "product": "WECHAT_DYNAMIC_SCAN_CODE",
  "sign": "D48908EBEBC8C1596213A79CDB32E13A",
  "extra": "{\"auth_code\":\"134775151965409782\"}"
}

results matching ""

    No results matching ""