统一下单

接口URL

{{api_host}}/orders/unified

请求方式

POST

Content-Type

form-data

请求Body参数

参数 示例值 是否必填 参数描述
total_amount 100 必填 金额
out_trade_no P0490012000089 必填 商户自定义订单号
notify_url http://api.mp_admin.test/api/orders/notify 必填 异步回调地址
return_url https://www.baidu.com 必填 同步回调地址
gateway 1 必填 平台支付网关
attach id=1&a=b&b=c&name=志远 必填 额外参数
subject 支付宝余额宝 必填 商品标题
body 理财首选余额宝 必填 商品描述

成功响应示例

  1. {
  2. "code": 0,
  3. "data": {
  4. "appid": "100001",
  5. "expired_at": "2020-10-12 21:03:07",
  6. "expired_in": 599,
  7. "out_trade_no": "P0490012000089",
  8. "qrcode_url": "",
  9. "sign": "170EE10B27AF9BFA7EBF80304F0BDB26",
  10. "total_amount": 100,
  11. "trade_no": "DD1602507187082143885",
  12. "web_url": "http://scsys_admin.test/web/orders/payment?trade_no=DD1602507187082143885"
  13. },
  14. "message": "success"
  15. }
参数 示例值 参数描述
code 0 状态码,为0时表示成功,其他为失败。-1表示通用错误状态码
data - -
data.appid 100001 商户号
data.expired_at 2020-10-12 21:03:07 订单失效时间
data.expired_in 599 订单有效剩余时间,单位秒
data.out_trade_no P0490012000089 商户订单号
data.qrcode_url - 支付二维码URL
data.sign 170EE10B27AF9BFA7EBF80304F0BDB26 签名
data.total_amount 100 订单金额
data.trade_no DD1602507187082143885 平台订单号
data.web_url http://scsys_admin.test/web/orders/payment?trade_no=DD1602507187082143885 平台支付地址
message success 详细信息

错误响应示例

  1. {
  2. "code": -1,
  3. "data": [],
  4. "message": "签名不能为空"
  5. }
参数 示例值 参数描述
code -1 状态码,为0时表示成功,其他为失败。-1表示通用错误状态码
data {} 返回数据
message 签名不能为空 详细信息

订单查询

接口URL

{{api_host}}/orders/query?trade_no=DD1601386113652389498&out_trade_no=TS1601386113555026343

请求方式

GET

Content-Type

form-data

请求Query参数

参数 示例值 是否必填 参数描述
trade_no DD1601386113652389498 选填 平台订单号,与商户订单号二选一
out_trade_no TS1601386113555026343 选填 商户订单号,与平台订单号二选一

成功响应示例

  1. {
  2. "code": 0,
  3. "data": {
  4. "appid": "100001",
  5. "expired_at": "2020-09-30 21:29:33",
  6. "expired_in": -1,
  7. "out_trade_no": "TS1601386113555026343",
  8. "pay_time": null,
  9. "sign": "EB8A1A7289FBF10F05CDE0B1F53DF83C",
  10. "total_amount": "100.00",
  11. "trade_no": "DD1601386113652389498",
  12. "trade_state": "CLOSED",
  13. "trade_state_cn": "已关闭"
  14. },
  15. "message": "success"
  16. }
参数 示例值 参数描述
code 0 状态码,为0时表示成功,其他为失败。-1表示通用错误状态码
data - 返回数据
data.appid 100001 商户号
data.expired_at 2020-09-30 21:29:33 订单失效时间
data.expired_in -1 订单有效剩余时间,单位秒
data.out_trade_no TS1601386113555026343 商户订单号
data.pay_time - 用户支付完成时间
data.sign EB8A1A7289FBF10F05CDE0B1F53DF83C 签名
data.total_amount 100.00 订单金额
data.trade_no DD1601386113652389498 平台订单号
data.trade_state CLOSED 用户支付状态
data.trade_state_cn 已关闭 用户支付状态中文
message success 详细信息

签名生成

sign 签名生成的步骤

第一步

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

特别注意以下重要规则:

  • 参数名ASCII码从小到大排序(字典序)
  • 如果参数的值为空不参与签名
  • 参数名区分大小写
  • 验证调用返回或微信主动通知签名时,传入的 sign 参数不参与签名,将生成的签名与该 sign 值作校验

第二步

在 stringA 最后加入&key=secret 拼接上商户后台的密钥,得到 stringSignTemp 字符串,并对 stringSignTemp 进行MD5运算,将得到 sign 值,最后将 sign 值进行大写转换。

注意事项

参数中的 appid、sign 不参与签名

PHP 示例代码

  1. /**
  2. * @param array $data 参数
  3. * @param string $secret 商户密钥
  4. * @return string 签名
  5. */
  6. public static function sign(array $data, string $secret): string
  7. {
  8. $result = [];
  9. foreach ($data as $key => $value) {
  10. if (trim((string)$value) === '')
  11. continue;
  12. $result[$key] = $value;
  13. }
  14. ksort($result);
  15. return strtoupper(md5(urldecode(http_build_query($result)) . '&key=' . $secret));
  16. }