跳到主要内容
聚合支付平台 - API 开发文档

接口对接说明

本文档提供外部系统对接支付平台的完整接口说明,包括发起支付、订单查询、退款等功能。

接口域名:正在读取...

签名算法:仅支持 ECDSA。旧版 MD5、RSA 及 /mapi.php?act=* 文档均已废弃,不可继续使用。

接口说明

支付产品由通道插件的已选可用接口决定。显式 method 只能请求该接口已开启的产品,平台不会在 Native、H5、JSAPI、小程序和 APP 之间猜测或降级。

请求地址:/mapi.php请求方式:POST 推荐

等价兼容入口

/api/pay/create、/openapi/order/pay/create 与 /mapi.php 调用同一服务,均兼容 GET/POST。新对接建议使用 POST。

请求参数

参数名类型必填说明
pidstring是平台商户UID(商户后台显示的UID,如:100001 或 UWM3HK58)
typestring是支付类型,如 wxpay、alipay
out_trade_nostring是商户订单号,需唯一
notify_urlstring是异步通知地址
namestring是支付标题;未传 original_name 时也作为商品名称显示
moneyfloat是支付金额(元)
timestampint是当前时间戳(秒)
signstring是ECDSA签名
sign_typestring是签名类型,固定为 ECDSA
app_idstring是商户后台应用列表中的完整应用ID,不能自行拼接
original_namestring否原商品名称;传入后订单详情会额外展示商品标题
return_urlstring否同步跳转地址
paramstring否自定义参数,回调时原样返回
clientipstring否用户IP地址;不传时使用请求来源IP
devicestring否用户实际终端:pc/mobile/wechat/alipay/qq/douyin/app
methodstring否web、jump、cashier、qrcode、h5、jsapi、scan、applet、app
auth_codestring否付款码;method=scan 时必填
sub_openidstring否用户 OpenID;method=jsapi 时必填
sub_appidstring否服务商/子商户模式下的子应用 AppID
is_appletint否小程序上下文标记,method=applet 时平台自动设为 1

app_id 取值说明

app_id必须传商户后台“应用列表”里生成的完整应用ID,不能用 app_ + pid、商户UID、进件商户号或数据库内部ID代替。修改任何参与签名的参数后必须重新生成 sign。

请求示例

POST {origin}/mapi.php
Content-Type: application/x-www-form-urlencoded

pid=100001
&type=wxpay
&out_trade_no=ORDER202401010001
&notify_url=https://your-site.com/notify
&return_url=https://your-site.com/return
&name=测试商品
&money=0.01
&app_id=app_xxxxxxxxxxxxxxxxxxxxxxxx
&device=pc
&method=web
&timestamp=1704067200
&sign=MEUCIQDxxxxxx...
&sign_type=ECDSA

PC 微信自建收银台请使用 web

客户网站自己展示微信二维码时,传 type=wxpay、method=web、device=pc,并根据响应 type处理。返回 qrcode时只绘制二维码,不跳转 pay_url;需要平台托管收银台时使用 method=jump。

支付产品与二维码展示策略

服务器调用必须传递用户真实终端

device描述最终付款用户环境,不是发起 HTTP 请求的服务器。微信内传 wechat,支付宝内传 alipay。

接入模式选择

场景methoddevice调用方处理
浏览器付款jump用户真实终端跳转 pay_url;用户可再次打开同一地址继续付款
插件自动选择产品web用户真实终端按响应 type 消费;产品服从通道已选可用接口
自建 Native 扫码页qrcode通常为 pc把 qrcode 绘制成二维码,禁止当网页打开
始终展示收银台二维码cashier通常为 pc扫码后按已选接口完成真实支付
手机浏览器 H5h5mobile按 type 处理跳转地址或插件声明的结果
微信/支付宝内 JSAPIjsapiwechat/alipay传 sub_openid,使用 data 调用客户端 SDK
微信小程序appletwechat使用 data 调用小程序支付 API
原生 APPappapp使用 data 调用支付 SDK
商户扫用户付款码scan实际终端必须传 auth_code,按同步结果处理

cashier、qrcode、scan 含义不同

cashier是始终展示二维码的展示策略;qrcode明确请求 Native/主扫二维码;scan是付款码/被扫支付,必须传 auth_code。无 auth_code 的旧 scan 请求目前临时兼容为 qrcode,但对接方不应继续依赖。

method用途约束
web默认直接调用插件,按 apptype 与终端选择产品-
jump只返回本站 /pay/submit 收银台地址-
cashier只展示一个二维码,真实产品仍服从 apptype-
qrcodeNative/主扫二维码通道已开启扫码接口
h5手机浏览器 H5 支付通道已开启 H5 接口
jsapi微信/支付宝内 JSAPIsub_openid
scan商户扫描用户付款码auth_code
applet小程序支付通道已开启小程序接口
appAPP 支付参数通道已开启 APP 接口

PC 微信扫码响应示例

{
  "code": 0,
  "msg": "success",
  "type": "qrcode",
  "trade_no": "20240101120000123456",
  "pay_url": "weixin://wxpay/bizpayurl?pr=xxxxxxxx",
  "qrcode": "weixin://wxpay/bizpayurl?pr=xxxxxxxx",
  "page": "wxpay_qrcode",
  "timestamp": 1704067200,
  "sign": "MEUCIQDxxxxxx...",
  "sign_type": "ECDSA"
}

响应类型

响应 type主要字段正确处理方式
jumppay_url浏览器跳转或 HTTP 重定向
qrcodeqrcode使用二维码库绘制,禁止 window.location 跳转
schemeurlscheme由用户操作触发 Scheme,保留可重复点击入口
jsapidata调用微信或支付宝 JSAPI
appdata交给原生 APP 支付 SDK
wxplugin / wxappdata交给微信插件或小程序接口
scandata读取同步结果,并以异步通知为最终依据
pagepage + data插件页面结果;通用浏览器优先 method=jump

响应类型以插件返回为准

平台保留插件声明的 qrcode/jump/scheme/jsapi/app/scan/wxplugin/wxapp/page 类型。URL类响应读取 pay_url、qrcode或 urlscheme;参数类响应读取 data。二维码结果还可能声明 scan_only、direct_open、wechat_direct_open、android_wechat_direct_open,只有对应能力明确为真时才允许特定终端直开。

不要把二维码内容当网页地址打开

qrcode可能是微信 Native 码、支付宝扫码串或第三方扫码内容,只能由二维码库绘制;只有 type=jump 时才跳转 pay_url。

// 错误:二维码内容不是网页地址
window.location.href = result.qrcode

// 正确:二维码模式只绘制二维码
if (result.type === 'qrcode') {
  QRCode.toCanvas(canvas, result.qrcode)
}

// 正确:jump 模式才跳转托管收银台
if (result.type === 'jump') {
  window.location.assign(result.pay_url)
}

支付响应字段

字段类型说明
codeint0 表示成功
msgstring结果说明
typestring必须按类型分支处理
trade_nostring平台订单号
pay_urlstring是否可跳转以 type 为准
qrcodestring二维码原始内容,仅用于绘制
urlschemestring仅在 type=scheme 时使用
dataobject|stringJSAPI、小程序、APP、付款码参数
pagestring插件声明的页面模板标识
scan_onlyboolean为 true 时保持二维码展示
direct_openboolean插件明确允许普通终端直接打开
wechat_direct_openboolean插件明确允许微信内直接打开
android_wechat_direct_openboolean插件明确允许 Android 微信内直接打开
timestampint平台响应时间戳
signstring平台 ECDSA 响应签名
sign_typestring固定为 ECDSA

成功响应示例

{
  "code": 0,
  "msg": "success",
  "type": "jump",
  "trade_no": "20240101120000123456",
  "pay_url": "{origin}/pay/submit/20240101120000123456",
  "timestamp": 1704067200,
  "sign": "MEUCIQDxxxxxx...",
  "sign_type": "ECDSA"
}

错误响应

{
  "code": -1,
  "msg": "错误信息"
}

注意事项

  • method=jump返回本站收银台地址。
  • method=web由插件按已选 apptype 决定产品。
  • method=scan必须携带付款码 auth_code。
  • 同一商户订单号在10天内不可重复使用。
  • 时间戳误差不能超过5分钟。

确认操作