做跨境业务、SaaS、订阅服务的时候,很多人会遇到一个现实问题:
国内用户习惯支付宝 / 微信,欧美用户更习惯银行代扣(Direct Debit)、ACH、SEPA,想一次性搞定很难。
GoCardless 是一家专注于「银行直接借记(Direct Debit)」的全球收款平台,可以帮你从用户的银行账户中按周期自动扣款,支持多个国家和地区的本地扣款通道,包括:
-
英国 Bacs 直接借记(GBP)
-
欧洲 SEPA 直接借记(EUR)
-
美国 ACH 借记(USD)
-
澳大利亚 BECS、瑞典 Autogiro、丹麦 Betalingsservice、加拿大 PAD 等
官方还给出了各币种的限制,例如 USD/ACH 至少 2 美元一笔,GBP/Bacs 至少 1 英镑一笔,EUR/SEPA 至少 1 欧元一笔。
本文就以 彩虹易支付 + GoCardless 支付插件 为例,演示如何在你现有的易支付平台中,对接 GoCardless,打通:
-
对欧美用户:使用银行卡信息发起 本地 Direct Debit(ACH / Bacs / SEPA)
-
支持 USD / GBP / EUR 多币种代扣
-
通过 Webhook 自动同步支付状态,配合彩虹易支付完成订单自动回调
如果你已经在用彩虹易支付做聚合支付,只要增加一个 GoCardless 插件和对应通道,就能“原地扩展”到欧美主流的银行代扣场景。
一、准备工作
在动手之前,建议先准备好以下几样东西:
-
一套可正常使用的彩虹易支付源码,如果没有可以到https://www.wxcydz.cc/t-2893-1-1.html 购买下载。
-
PHP 环境、数据库正常
-
商户添加、订单创建、其他支付接口正常
-
有服务器管理权限(宝塔 / SFTP / SSH 均可)
-
-
GoCardless 商户账号
-
在 GoCardless 官网注册账号,开通 Sandbox(沙盒)环境 用于测试
-
完成基本的商户信息、公司/主体资料填报
-
后台可以看到 Access Token(访问令牌) 和 Webhooks(回调端点) 配置页面
-
-
GoCardless 对接彩虹易支付的插件文件,如果没有可以到https://www.wxcydz.cc/t-2893-1-1.html 购买下载。
-
插件一般包含以下目录结构(示意):
-
/plugins/gocardless/gocardless_plugin.php -
/plugins/gocardless/inc/GoCardlessClient.php -
可能附带图标、说明文档等
-
-
如果是你自己开发 / 购买的插件,按插件说明为准
-
-
HTTPS 证书
-
建议站点启用 HTTPS,以便 GoCardless Webhook 能正常访问你的回调 URL(多数生产环境会要求 https)
-
二、安装彩虹易支付 GoCardless 插件
1. 上传插件文件
-
使用 SFTP / 宝塔面板进入你易支付网站的插件目录,例如:
-
把你拿到的 GoCardless 插件压缩包解压:
-
插件是已经按照易支付结构打包好的,解压后会自动把文件放入
/plugins/gocardless/目录
-
2. 添加支付图标(可选)
为了在易支付前端展示更直观,你可以准备一个 GoCardless 图标,例如:
-
主图标:
gocardless.ico可以点击下载图标
放到:
然后在支付方式配置里引用这个图标,让前台支付通道列表看起来更美观。
3. 刷新插件列表
登录彩虹易支付后台(管理员账户):
-
找到 “支付插件 / 插件管理” 之类的菜单项
-
点击「刷新插件 / 更新插件列表」
-
正常情况下,你会看到类似:
GoCardless Direct Debit 支付插件
支持 USD / GBP / EUR 银行代扣
说明插件已经被系统识别。
三、在 GoCardless 后台获取必要参数
要让易支付成功调用 GoCardless,需要在 GoCardless 后台准备以下信息:
-
Access Token(访问令牌)
在 GoCardless 后台:
-
进入 Developers → API keys / Access tokens 页面
-
生成一条 Sandbox access token(用于测试),形如:
sandbox_xxxxxxxxx -
后面正式上线时再生成 Live access token(形如:
live_xxxxxxxxx)
-
-
Webhook Endpoint & Secret
GoCardless 会通过 webhooks 把付款结果、扣款失败、退款等事件实时推送给你的系统。官方推荐所有集成都使用 webhook 跟进状态变化。
基本流程是:
-
进入 GoCardless Dashboard 的 Developers → Webhooks(或 Webhook endpoints)页面
-
点击「Add endpoint / Create webhook endpoint」
-
在 URL 处填入你的易支付 Webhook 地址(下面第四节会讲)
-
填写一个 Secret(自定义一串随机字符串)
-
勾选你想接收的事件类型(建议先全选,调通后再精简)
成功后,你会在 Webhook 列表中看到刚创建的 endpoint,同时可以查看/复制对应的 Secret —— 这串 Secret 要填回彩虹易支付插件配置中,用来校验签名。
-
四、在彩虹易支付后台新增支付方式
让易支付「认识」 GoCardless 这种支付类型,首先需要在后台新增一个支付方式(或者你用现有的类型也可以,这里给一个常见写法):
-
登录易支付后台
-
找到「支付方式管理 / 支付类型管理」
-
点击「新增支付方式」,示例:
-
显示名称:银行代扣(GoCardless)
-
调用值(英文标识):
gocardless -
支持设备:PC + Mobile
-
图标:选刚才上传的
gocardless.ico
调用值要和插件内部的
$info['types']定义一致,插件会根据这个值判断是否走 GoCardless 通道。
如果你想区分地区,也可以新建多种方式,例如:
-
gocardless_us(美国 ACH) -
gocardless_uk(英国 Bacs) -
gocardless_eu(欧洲 SEPA)
再在插件里根据类型做更细的逻辑,这里就按「统一一个 gocardless」来讲。
五、在彩虹易支付新增 GoCardless 支付通道
支付方式只是展示用的「壳」,真正决定收款的是「支付通道」。
1. 新增通道(基础配置)
在易支付后台:
-
进入「支付接口 / 支付通道管理」
-
点击「新增支付通道」,参考配置:
-
通道名称:GoCardless Direct Debit
-
支付方式:选择刚刚创建的「银行代扣(GoCardless)」
-
支付插件:选择
gocardless(插件刷新后出现的名称) -
分成比例:按自身业务需求设置
-
状态:启用
2. 填写 GoCardless 插件配置项
不同版本插件字段名字可能略有差异,下面以常见字段为例说明含义(可根据你实际插件字段对应一下):
-
Live Access Token / 正式环境令牌:
填你在 GoCardless Live 环境创建的live_...访问令牌; -
Sandbox Access Token / 沙盒令牌:
填sandbox_...访问令牌(测试用); -
模式选择:
-
Sandbox(沙盒) → 所有订单都是模拟扣款,不动真钱 -
Live(正式) → 实际从用户银行发起代扣
-
-
Webhook Secret:
填你在 GoCardless Webhook Endpoint 设置的那串 Secret,用于 HMAC 校验; -
汇率设置(如果插件内支持 CNY → USD/GBP/EUR 换算):
-
人民币→美元汇率 rate_usd:例如 1 CNY ≈ 0.14 USD,则填0.14 -
人民币→英镑汇率 rate_gbp:例如 1 CNY ≈ 0.11 GBP,则填0.11 -
人民币→欧元汇率 rate_eur:例如 1 CNY ≈ 0.13 EUR,则填0.13
-
插件一般会在下单时:
-
取订单的基础金额(通常是 CNY)
-
根据用户的银行账户币种(USD / GBP / EUR)选择对应汇率
-
换算后传给 GoCardless,以最小货币单位(分/便士/分)提交。
3. 正确填写 Webhook 回调地址
在 GoCardless Webhook Endpoint 里,URL 必须带上通道 ID,形式为:
例如:
其中5就是你在易支付后台这个 GoCardless 通道的 ID(通道列表里通常会显示数字 ID)。
如果漏掉通道 ID,比如只写
https://pay.example.com/pay/webhook/,插件是无法知道应该用哪个通道配置来验签和处理这条 Webhook 的。
填好 URL、Secret,保存。
六、关于 GoCardless 的币种、金额和到账时间
1. 最低支付金额限制
GoCardless 对不同币种/通道设置了最低金额限制,官方给出的(单位为对应货币本身):
-
USD / ACH:最低 2 USD
-
GBP / Bacs:最低 1 GBP
-
EUR / SEPA:最低 1 EUR
如果你这边换算后的金额低于这个值,就会收到 API 报错:
amount is lower than the minimum permitted amount
所以:
-
测试时建议订单至少 15~20 CNY 以上再换算
-
也可以在插件或前台做一个「最小金额校验」,避免用户支付 1 元被拒绝
2. Direct Debit 到账时间不是“秒到”
跟微信/支付宝不一样,GoCardless 的 Direct Debit 是“银行批量扣款”,流程大概是:
-
你创建 Payment → 状态
pending_submission -
到了扣款日(Charge date),GoCardless 提交给本地清算系统 →
submitted -
银行确认扣款成功 →
confirmed -
过几天钱结算到你的 GoCardless 账户/银行 →
paid_out
整个过程通常要几天时间,因此:
-
用户不会立刻在银行 App 里看到扣款
-
也不要误以为「payment 创建成功 = 已经到钱」
比较严谨的做法是:
-
前端:下单返回成功页面时提示「代扣指令已提交,等待银行扣款」
-
后台:真正把订单改成“已支付”,最好还是根据 Webhook 收到的
confirmed / paid_out状态来判断。
七、测试支付与回调(完整流程)
当你完成前面步骤后,建议按下面流程做一次完整测试(推荐先在 Sandbox 模式 测):
-
在你的前端站点发起一笔测试订单
-
金额建议不要太小(比如 20 CNY)
-
选择支付方式:银行代扣(GoCardless)
-
正常会跳转到 GoCardless 的托管页面,让用户录入银行信息
-
-
在 GoCardless 页面绑定测试银行账户
-
沙盒环境会提供测试银行信息
-
Live 环境则需要你真实的银行账户(谨慎操作)
-
-
支付完成后跳回你的站点
-
用户会看到类似「支付请求已提交」或「等待银行扣款」的页面
-
如果你的插件设计为“创建 Payment 即视为成功”,这时订单状态可能已经变成“已支付”
-
-
在 GoCardless Dashboard 查看 Payment 状态
-
进入 Payments 列表
-
找到刚才这笔,查看:
-
金额(例如 2.10 USD)
-
Status:
pending_submission / submitted / confirmed / paid_out -
Metadata 中的
order_id是否为你的易支付订单号
-
-
-
验证 Webhook 回调是否正常
-
在 GoCardless Dashboard 的某笔 Payment 详情页,一般可以看到关联的 Webhook 事件
-
查看你的服务器是否成功返回
200 OK -
检查易支付订单:
-
是否能在
confirmed / paid_out时自动标记为“已支付”
-
如插件有日志,查看是否有签名失败、找不到订单等错误
-
-
如果:
-
GoCardless 后台显示 Payment 成功,但易支付没更新订单
-
检查 Webhook URL 是否带通道 ID
-
检查 Webhook Secret 是否一致
-
-
易支付显示成功,但 GoCardless Payment 实际失败
-
检查你有没有在“创建 payment 即标记成功”逻辑里,忽略了失败的重试
-
八、常见问题(FAQ)
1. 为什么用户刚付完钱,银行 App 里还没看到扣款?
因为 GoCardless 用的是 Direct Debit(银行代扣),不是实时卡支付。
官方文档也说明,Direct Debit 通常需要多个工作日完成扣款和清算,资金会在 confirmed / paid_out 后才真正完成划转。
2. 用户中途中止扣款或退款,会怎样?
-
在扣款前,用户可能会通过银行/GoCardless 取消 mandate 或 stop payment;
-
扣款后,也可能通过银行发起 indemnity claim / chargeback,导致款项被退回;
-
这些情况 GoCardless 会通过 Webhook 推送
failed / cancelled / charged_back等事件,你可以在插件里根据这些状态对订单进行“退款/关闭”处理。
3. 金额太小总报错 “amount is lower than the minimum permitted amount”?
检查:
-
是否是 USD / ACH 通道,金额 < 2 USD
-
是否是 GBP / Bacs 或 EUR / SEPA 通道,金额 < 1 GBP / 1 EUR
-
汇率配置是否合理(不要把 CNY → USD/GBP/EUR 的汇率填错)
可以在插件里做「最小金额判断」,提示用户把订单金额调大一点再支付。
4. 多币种怎么配置比较科学?
常见做法:
-
使用统一基础币种(例如 CNY),在插件里按银行账户币种自动换算为 USD / GBP / EUR;
-
对欧美用户,建议用 USD / EUR / GBP 结算;
-
对某些只开了部分 Direct Debit 通道的商户,只开通对应地区用户使用。
5. Sandbox 和 Live 环境会互相影响吗?
不会。Sandbox 是完全隔离的测试环境:
-
用
sandbox_... Access token -
Webhook 也推到你配置的测试回调 URL
-
不会实际从银行扣款,所有交易都是模拟
Live 环境用
live_... Token
,一定要确认:
-
Webhook URL 填的是正式域名
-
Secret 与生产 endpoint 一致
-
在正式上线前先用几笔小金额、自己或熟人账号做实测
总结
通过 彩虹易支付 + GoCardless Direct Debit 插件 的组合,你可以在不大改现有支付架构的前提下,得到:
-
覆盖欧美主流的银行代扣方式(ACH / Bacs / SEPA 等)
-
支持 USD / GBP / EUR 多币种自动扣款
-
通过 Webhook 与易支付订单系统自动同步支付状态
-
更适合订阅、周期扣款、SaaS 按月收费等场景
如果你已经在用彩虹易支付做国内聚合收款,只需:
-
配置一个 GoCardless 插件、
-
新增一条 GoCardless 支付通道、
-
在 GoCardless 后台配置好 Access Token 和 Webhook,
就能从“只做国内支付”升级为「同时支持欧美银行代扣」的多通道收款平台。









