跳转正文
DocsEN官网 ↗
Docs/签名与验签
INTEGRATION GUIDE

签名与验签

遵循原始文档的 MD5 规则,并按接口选择参与签名的字段。

签名算法#

  1. 移除 pay_md5sign 与 sign。
  2. 对选定的字段名升序排序。
  3. 排除 PHP empty() 判定为空的值,包括字符串 "0"。
  4. 以 name=value& 拼接原始值,末尾追加 key=商户APIKEY。
  5. 计算 MD5,并将结果转为大写。

参与签名的字段范围#

接口字段范围
Collection createpay_memberid, pay_orderid, pay_amount, pay_applydate, pay_bankcode, pay_notifyurl, pay_callbackurl
Collection querypay_memberid, pay_orderid
Payout create实际提交的非空表单字段,排除 pay_md5sign
Payout querymchid, out_trade_no
Balance query通常为 mchid;巴西须签入实际发送的所有非空 POST 字段
Collection callbackmemberid, orderid, transaction_id, amount, datetime, returncode
Payout callback实际通知字段,排除 sign

PHP 参考实现#

PHP · Source-defined algorithm
function makeSign($params, $apiKey) {
    unset($params['pay_md5sign'], $params['sign']);
    ksort($params);
    $source = '';
    foreach ($params as $name => $value) {
        if (!empty($value)) {
            $source .= $name . '=' . $value . '&';
        }
    }
    return strtoupper(md5($source . 'key=' . $apiKey));
}

避免常见不一致#

  • 先用原始值签名,传输时再做表单编码。
  • 保持金额原始字符串一致,100.00 和 100 的签名输入不同。
  • 代收下单不要将 type、商品字段加入签名;代收通知的 attach 不参与验签。
  • 响应验签时先移除 sign 字段。
© 2026 88Pay 接口字段与响应原值不随页面语言改变。
仅搜索本站文档 · 不向服务器发送搜索内容