统一使用 post 方式。
请求体参数统一使用 json 格式传递,并在请求头中指定 Content-Type: application/json
。
如下参数,在每个请求中都必须传递。
参数 | 类型 | 说明 |
appid | string | 应用ID |
timestamp | integer | 请求 Unix 时间戳【秒】,当系统检测到传递到时间戳与当前时间相差大于15秒时,会返回错误。 |
merchant_num | string | 商户编号 |
sign | string | 根据签名规则生成的签名字符串 |
请求流控响应头:
X-RateLimit-Limit
: 表示接口限速阈值,以 接口+appid 进行限制,限速时间单位为1分钟。
X-RateLimit-Remaining
:表示剩余可发起的请求数。
Retry-After
:多长时间后,可以重新发起请求,单位秒。
请求标记:
Request-Id
:标记了每一个请求,用于联调和问题跟踪。
1. 准备工作
需要通过运营人员添加应用,获取appid及key,用于接口加签、验签。根据您申请的类型不同,appid对应的权限也有所差别,如机构可以代理其下所有商户执行支付操作。
2. 签名
2.1. 参与签名的参数
接口的所有标量参数。
2.2. 所有参数以 ASCII字典升序排列。
2.3. 拼接待签名字符串。
以key1=value1&key2=value2 形式将参与签名的参数,拼接成待签名字符串。并在待签名字符串最后拼接上&key=APPKEY,其中APPKEY 为第一步中得到的 key。
2.4. MD5摘要
使用MD5摘要算法对带签名字符串做签名,以得到的32个字符十六进制小写字符串作为签名字段sign 的值。
2.5. PHP 示例代码
$params = [
"appid" => "abcdefghidg",
"merchant_num" => "8019000087",
"store_num" => "1000000",
"staff_num" => "60000000",
"amount" => "0.10",
];
ksort($params);
$strForSign = urldecode(http_build_query($params)) . "&key=58c247bcafa76a338bc25863e396ad52";
$params["sign"] = md5($strForSign);
2.6接口可能增加字段,验证签名时必须支持增加的扩展字段。
3. 验签
3.1. 将接入方的appid 参数添加到返回参数列表中。
3.2. 将返回参数列表中的sign 字段移除。
3.3. 根据签名方法生成签名字符串。
3.4. 对比计算得到的签名字符串和返回参数中的sign 字符串。
若两个签名字符串相同,则为合法的请求;否则应忽略该请求响应或通知。