XD-OP-13 · DOC

易支付协议兼容接入(已有插件的系统怎么切过来)

系统里已装易支付 / 彩虹支付类插件?把网关地址、商家 ID、商户密钥三格填回插件即可,不用改代码;资金仍走持牌支付公司。

小豆支付开放平台是面向已有自有系统的商家的支付接入服务:通过服务器对服务器的接口,把支付宝与微信收款接进商家自己的系统,并以签名事件通知回传支付状态;资金由持牌支付公司收付结算。个人也能申请:主体类型选「个人」,身份证 + 本人银行卡即可完成商户进件。央行持牌机构清算,安全可靠的个人和企业支付接口。

这一篇是给系统里已经装了「易支付 / 彩虹支付」类支付插件的商家看的:不改你系统的代码,只把三个值填进插件配置,就能用小豆的收银链收钱。

先划清一件事(很重要):「易支付」「彩虹支付」在这里都是行业叫法,指同一类用共享密钥签名、参数固定的老式收款协议(这一类协议最常见的实现叫「彩虹易支付」,插件商常直接把它叫「易支付」)。 我们不是「免签 / 第四方代收」那一类做法——买家付的钱由有支付牌照的支付公司收付与结算,进的是你自己在该支付公司开的结算账户,钱不经过任何中间人的账户。两者的资金路径详见 README 的 FAQ。

1. 三个值,两个入口

在卖家后台的「易支付接口配置」页开通后,你会拿到三个值:

值是什么填到哪
网关地址收款入口地址(系统按插件类型要完整地址或基址,页面上有对照表)你系统「易支付」配置里的网关 / 接口地址
商家 ID平台给你的商户号(PID)插件配置里的 PID / 商户号
商户密钥与商家 ID 配对的一串密钥插件配置里的密钥 / Key
  • 开通只需一次,不用写代码;密钥在页面上默认只显示尾部,点「查看完整密钥」要做一次短信验证,明文短时展示、请当场复制到你自己的服务器。
  • 密钥等同于收款凭证:只填进你自己的服务器,不要发在群里、工单里或截图里。怀疑泄露就去页面点「重置密钥」——旧密钥立即失效,商家 ID 不变。

2. 协议长什么样

兼容该协议的多种接口:submit.php(表单提交收单)、mapi.php(程序化收单)与 api.php(查询;act=order / act=query)。你的插件原来把请求发给哪个入口,就还发给哪个入口——三类接口的参数与签名规则完全一样,不用挑、也不用迁移。

2.1 两个建单入口

你的插件怎么发请求会得到什么
表单提交(浏览器跳转语义):把参数提交到网关地址平台返回一个跳转,落到收银页;买家在那里用支付宝扫码付款
程序化请求:在同一网关域名下用 mapi.php 发同样的参数返回 JSON(含收银页地址;支付宝订单还会带官方收款码内容,能直接画成二维码)

两边参数完全一样,只是返回形式不同——你的插件原来怎么发,就还怎么发。

2.2 建单参数

参数要求
pid必填:上面那个商家 ID
out_trade_no必填:你自己的订单号,6–64 位,只能用大小写字母、数字、下划线和短横线(不支持点号)
money必填:金额,元为单位的十进制写法(1.1 和 1.10 都行),最低 0.01 元;单笔上限以你应用当前的额度为准
name必填:商品名(会出现在收银页上)
notify_url必填:支付成功后我们异步通知你的地址,必须是 https 开头的完整地址
return_url选填:支付完成后买家同步跳回你页面的地址,同样必须 https;不填就用平台的完成页
type选填:alipay / wxpay;不填时按你在配置页选的默认支付方式走
param选填:你自己的透传参数,会原样带回通知与回跳
sign / sign_type签名与签名类型(见下;sign_type 不填按 MD5)

其余字段(device、sitename 这类插件习惯带的)带着不会报错,我们按签名规则处理、内容忽略。

2.3 签名怎么算

和这类插件的通用做法一致(这也是为什么你的插件不用改):

  1. 把所有参数(除 sign、sign_type)按键名的 ASCII 顺序排好;
  2. 丢掉值为空的参数;
  3. 拼成 键=值&键=值 的串(值不额外编码);
  4. 把这个串直接接上你的商户密钥(中间没有分隔符),算 MD5,取小写十六进制。

收到的通知、回跳我们也用同一个算法签名,你按同样的规则验一遍即可。

2.4 支付结果怎么拿

  • 异步通知:支付成功后我们用 GET 请求你填的 notify_url,参数含 trade_status=TRADE_SUCCESS、你的 out_trade_no、平台的 trade_no、金额等,并带签名。你返回纯文本 success 我们就认为送达;否则会按退避节奏重发(第一次即时,之后按分钟级到小时级逐档拉长,最多 8 次)。通知可能重复到达,请按 out_trade_no 幂等处理。
  • 同步回跳:买家用支付宝付完会跳回你填的 return_url(带同一套参数与签名)。注意:跳回来只说明流程走完了,不代表付款成功——付款成功只认异步通知或查单结果。
  • 主动查询:在网关域名下用 api.php,act=order(按订单号查一笔)或 act=query(查商户状态)可查;返回里 status 为 1 表示已支付。

2.5 重复提交同一个订单号会怎样

情况结果
未支付、金额一致按原订单返回(不会建出两笔)
未支付、金额不一致拒绝(订单号已存在)
已支付拒绝(订单已支付)
已关闭拒绝,请换一个新订单号

3. 支持范围

支付方式状态
支付宝现在就能接(买家扫收银页上的码付款)
微信微信 JSAPI 已开放:买家在微信内打开收银页即可调起微信支付(仅限微信内浏览器;微信外手机浏览器与商家 App 内没有「直接拉起」形态)。其他通道或交易形态是否放行以对接人确认为准;未放行时下单会返回一个正常的、可预期的拒绝,别当故障、更别反复重试
QQ 钱包不支持:你的插件里如果选了它,请改成支付宝或微信

4. 这一篇不覆盖什么(明确不做)

  • 只支持上面这种共享密钥签名的老式协议;不支持带 RSA 密钥对的新形态(要用它请走接入指南的七接口)。
  • 不支持当 API 调你的退款:退款走商家后台「成交订单」或退款与对账那条链。
  • 不支持批量查询、修改结算账户、二维码直出等边角能力。
  • 你系统里原有的「免签 / 第四方代收」类网关不在迁移范围——我们不接入也不充当那类通道(见 README 的 FAQ)。

5. 上线前自检

  1. 用你自己系统下第一笔小额真实订单(金额尽量小),确认能跳到收银页并正常付款;
  2. 付完后:你的订单被标记为已支付、notify_url 收到一条验签通过的通知(记得回 success)、同步回跳把你带回了订单页;
  3. 回到卖家后台「易支付接口配置」页,确认密钥的「最后使用时间」刚刚更新过。

费率与到账口径与开放平台同一条资金链,见费率与限额;上线清单逐条自检见上线检查清单。

内容源:open-platform/docs/13-epay-compat-integration.md · 最后更新 2026-10-17 下载本文 .md 在 GitHub 查看