四方 · SquarePay 开放平台
OPEN PLATFORM · 商户接入文档
v1.0

SquarePay 商户接入文档

本文档面向下游商户的技术开发人员,描述如何对接四方聚合支付平台完成收款、查询、退款及支付结果通知的全流程。所有接口均基于 HTTPS + RSA2 签名,可放心用于生产环境。

1 · 接入概述

四方模式说明

四方聚合支付是指在传统「商户—收单机构」之外,引入聚合平台作为中间层的收单模式。资金与交易链路如下:

下游商户只需对接本平台一套 API,即可获得微信、支付宝等多渠道收款能力;平台内部完成向上游斗拱的报文转换与验签,商户无需关心上游细节。

环境地址

● 沙箱环境 Sandbox
https://sandbox-api.squarepay.com
仅用于联调,交易不产生真实资金流。
● 生产环境 Production
https://api.squarepay.com
正式收款,需完成签约与密钥配置。

接入流程(4 步)

1. 签约开户
联系集成经理签约,获取商户号 mch_id 与费率配置。
2. 配置密钥
生成 RSA2 密钥对,上传商户公钥、下载平台公钥(用于验签回调)。
3. 沙箱联调
在沙箱环境完成下单 / 查询 / 退款 / 通知全链路验证。
4. 生产上线
切换生产地址与生产密钥,报备回调 IP,正式收款。

2 · 公共说明

项目约定
请求方式POST,Content-Type 为 application/json
字符编码统一使用 UTF-8,请求与响应体均为 JSON
金额单位一律为 「分」,且为整数(如 1 元 = 100),不接受小数
时间格式yyyy-MM-dd HH:mm:ss,时区 GMT+8(东八区)
商户号 mch_id平台为每个商户分配的唯一编号,请求必带,用于路由与验签
随机串 nonce_str32 位以内随机字符串,防重放,参与签名
签名 sign除 sign 外所有参数参与签名,详见「签名规则」
金额字段一旦传错单位(元 / 分)将直接导致收款金额错误,请务必以「分」为单位并保证为整数。

3 · 签名规则(RSA2)

平台采用 RSA2(SHA256withRSA) 非对称签名。请求方使用商户私钥签名,平台使用商户公钥验签;回调时平台使用平台私钥签名,商户使用平台公钥验签。

签名步骤

  1. 取出请求体中所有非空参数(不含 sign)。
  2. 按参数名的 ASCII 码升序 排列。
  3. key=value 形式、以 & 连接,拼成待签名串 stringA
  4. 使用 SHA256withRSA 以商户私钥对 stringA 签名。
  5. 对签名结果做 Base64 编码,得到最终 sign,放回请求体一并发送。

待签名串示例(参数已按 ASCII 排序):

stringA
mch_id=100000018&nonce_str=a1b2c3d4e5f6&notify_url=https://shop.com/notify&out_trade_no=T20260703001&pay_type=WX_JSAPI&subject=会员充值&total_amount=100

sign 示例(RSA2 签名 + Base64,此处截断示意):

sign
Ql3kZ8vN...c2FtcGxlLXNpZ25hdHVyZQ==...9pXbQe4rT7
验签同理:收到响应或回调后,取除 sign 外全部参数按同样规则拼出 stringA,用对方公钥执行 SHA256withRSA 验签,通过后方可信任报文。

4 · 统一下单接口

POST/v1/pay/unifiedorder

创建一笔支付订单并返回用于唤起支付的 prepay_data。不同 pay_type 返回的 prepay 结构不同:小程序 / 公众号返回可直接 wx.requestPayment 的参数,H5 返回可跳转的收银台 URL。

请求参数

字段类型必填说明
mch_idstring必填平台分配的商户号
out_trade_nostring必填商户订单号,同一商户下唯一,建议 6–32 位
total_amountint必填订单金额,单位,须为正整数
pay_typestring必填支付方式:WX_JSAPI / WX_LITE / ALI_H5
subjectstring必填订单标题 / 商品描述,≤ 128 字节
openidstring条件必填用户在商户公众号 / 小程序下的 openid;WX_JSAPIWX_LITE 必填
notify_urlstring必填接收异步支付结果的回调地址,须 https
attachstring选填商户自定义透传数据,回调原样返回,≤ 128 字节
time_expirestring选填订单失效时间,格式 yyyy-MM-dd HH:mm:ss,默认 30 分钟
nonce_strstring必填随机字符串,防重放
signstring必填RSA2 签名,见「签名规则」

响应参数

字段类型说明
codestring业务状态码,0000 表示成功,其余见「状态码表」
messagestring状态描述
trade_nostring平台交易单号(唯一),退款 / 查询可用
out_trade_nostring原样返回商户订单号
prepay_dataobject唤起支付参数,结构随 pay_type 不同:微信返回 appId/timeStamp/nonceStr/package/signType/paySign;H5 返回 pay_url
signstring平台对响应的签名,商户应验签

报文示例

请求 JSON

Request · JSON
{
  "mch_id": "100000018",
  "out_trade_no": "T20260703001",
  "total_amount": 100,
  "pay_type": "WX_JSAPI",
  "subject": "会员充值",
  "openid": "oX7bt5A1b2C3d4E5f6G7h8I9",
  "notify_url": "https://shop.com/notify",
  "attach": "vip-2026",
  "nonce_str": "a1b2c3d4e5f6",
  "sign": "Ql3kZ8vN...9pXbQe4rT7"
}

响应 JSON

Response · JSON
{
  "code": "0000",
  "message": "success",
  "trade_no": "SQ2026070310000123456",
  "out_trade_no": "T20260703001",
  "prepay_data": {
    "appId": "wxa1b2c3d4e5f6a7b8",
    "timeStamp": "1751520000",
    "nonceStr": "c3d4e5f6g7h8",
    "package": "prepay_id=wx0310000123456",
    "signType": "RSA",
    "paySign": "kM8...tR2=="
  },
  "sign": "Z9xW...aB1cD2=="
}

5 · 订单查询接口

POST/v1/pay/query

根据商户订单号或平台单号查询订单最新状态。建议在未收到异步通知或需要对账时主动调用。

请求参数

字段类型必填说明
mch_idstring必填商户号
out_trade_nostring二选一商户订单号,与 trade_no 二选一
trade_nostring二选一平台交易单号,与 out_trade_no 二选一
nonce_strstring必填随机字符串
signstring必填RSA2 签名

响应参数

字段类型说明
codestring业务状态码
trade_nostring平台交易单号
out_trade_nostring商户订单号
trade_statestring交易状态:SUCCESS 支付成功 / NOTPAY 未支付 / CLOSED 已关闭 / REFUND 已退款
total_amountint订单金额(分)
success_timestring支付完成时间,未支付时为空
signstring平台签名

报文示例

Request / Response · JSON
// 请求
{ "mch_id": "100000018", "out_trade_no": "T20260703001",
  "nonce_str": "9f8e7d6c", "sign": "Aa1Bb2...==" }

// 响应
{
  "code": "0000",
  "trade_no": "SQ2026070310000123456",
  "out_trade_no": "T20260703001",
  "trade_state": "SUCCESS",
  "total_amount": 100,
  "success_time": "2026-07-03 10:41:22",
  "sign": "Z9xW...aB1cD2=="
}

6 · 申请退款接口

POST/v1/pay/refund

对已支付成功的订单发起退款,支持部分退款。同一原订单可多次退款,退款总额不得超过订单金额。

请求参数

字段类型必填说明
mch_idstring必填商户号
out_refund_nostring必填商户退款单号,同一商户下唯一
out_trade_nostring必填原商户订单号
refund_amountint必填退款金额(分),≤ 可退余额
reasonstring选填退款原因,≤ 80 字节
nonce_strstring必填随机字符串
signstring必填RSA2 签名

响应参数

字段类型说明
codestring业务状态码
refund_nostring平台退款单号
out_refund_nostring商户退款单号
refund_amountint本次退款金额(分)
refund_statestringPROCESSING 退款中 / SUCCESS 退款成功 / FAIL 退款失败
signstring平台签名

报文示例

Request / Response · JSON
// 请求
{
  "mch_id": "100000018",
  "out_refund_no": "R20260703001",
  "out_trade_no": "T20260703001",
  "refund_amount": 100,
  "reason": "用户取消订单",
  "nonce_str": "7a6b5c4d",
  "sign": "Bb2Cc3...=="
}

// 响应
{
  "code": "0000",
  "refund_no": "SR2026070310000987654",
  "out_refund_no": "R20260703001",
  "refund_amount": 100,
  "refund_state": "PROCESSING",
  "sign": "Y8vU...9cD1=="
}

7 · 支付结果异步通知

用户支付成功后,平台会以 POSTapplication/json)主动推送结果到商户下单时传入的 notify_url。商户须验签成功后处理业务,并返回纯文本字符串 SUCCESS;否则平台将按 0/15s/30s/3m/10m/30m… 策略多次重推。

通知参数

字段类型说明
trade_nostring平台交易单号
out_trade_nostring商户订单号
trade_statestring交易状态,通常为 SUCCESS
total_amountint订单金额(分)
success_timestring支付完成时间
attachstring下单时透传的自定义数据(若有)
signstring平台签名,商户须用平台公钥验签

通知示例与应答

Notify · JSON
// 平台 POST 到 notify_url 的报文
{
  "trade_no": "SQ2026070310000123456",
  "out_trade_no": "T20260703001",
  "trade_state": "SUCCESS",
  "total_amount": 100,
  "success_time": "2026-07-03 10:41:22",
  "attach": "vip-2026",
  "sign": "Z9xW...aB1cD2=="
}

// 商户应答(HTTP 200,纯文本 body)
SUCCESS
幂等处理:同一订单可能收到多次通知,商户须以 out_trade_notrade_no 做去重,确保发货 / 加款等业务只执行一次;处理成功后即返回 SUCCESS,重复通知直接返回 SUCCESS 即可。
处理逻辑中不要以通知里的金额直接入账,应回查本地订单金额比对,防止金额被篡改;验签失败时返回非 SUCCESS 即可触发平台重推。

8 · 状态码 / 错误码

接口以 code 字段返回业务处理结果,0000 为成功,其余为各类失败。建议商户对下表错误码做统一映射与告警。

code含义说明 / 处理建议
0000成功请求处理成功
2001参数错误缺少必填参数或格式非法,检查请求体
2002金额非法金额非正整数或超限,须以「分」为单位
3001签名验证失败签名串拼接、密钥或算法有误,核对签名规则
3002商户不存在或已禁用核对 mch_id 与账户状态
4001订单已存在out_trade_no 重复,请更换订单号
4004订单不存在查询 / 退款时未找到对应订单
4005订单状态不允许如对未支付订单退款、对已退款订单重复退款
4006退款金额超限退款总额超过原订单可退余额
5001上游通道异常斗拱 / 汇付返回异常或超时,建议稍后重试或查单
5002系统繁忙平台内部异常,请重试;持续失败请联系集成

9 · pay_type 枚举

下表为本平台当前已开通的支付能力,下单时 pay_type 取以下值。

pay_type渠道场景openid
WX_JSAPI微信微信公众号内 H5 支付(JSAPI)必填
WX_LITE微信微信小程序支付必填
ALI_H5支付宝支付宝手机网站 H5 支付不需要
更多渠道(银联云闪付、数字人民币等)正在接入中,如有需求可联系集成经理评估开通。