You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Sagepay(现Opayo)Form集成下repeat.vsp回调及重复支付问题

Opayo (Sagepay) Form集成:重复支付的响应捕获与实现经验

我之前帮几个客户处理过Opayo Form集成的重复支付需求,刚好能给你一些实用的解决方案:

一、如何捕获repeat.vsp的响应

你猜的方向没错,但Form集成虽然没有全局配置NotificationURL,你可以在发起repeat.vsp请求时主动指定这个参数——这是官方文档里容易被忽略的细节:

  • 在构造repeat.vsp的POST请求时,添加NotificationURL参数,值设置为你的服务器上专门接收重复支付回调的接口地址
  • Opayo会将重复支付的结果(成功/失败等状态)以POST请求的形式发送到这个地址,响应格式和Server集成的Notification完全一致
  • 你的服务器端需要验证响应的签名(用你的Vendor Security Key),再根据Status字段处理后续逻辑(比如更新订单状态、记录交易日志)

二、Form集成实现重复支付的完整流程

已经有不少商家成功实现了这个场景,标准步骤是:

  1. 初始Form支付完成后,调用getTransactionDetails接口,传入原交易的VendorTxCodeVPSTxId,获取对应的SecurityKey
  2. 构造repeat.vsp的POST请求,必填参数包括:
    • VPSProtocol:指定版本(比如4.00
    • TxType:固定为REPEAT
    • Vendor:你的Opayo商家账号
    • VendorTxCode:新的唯一交易编号(不能和原交易重复)
    • Amount:重复支付的金额
    • Currency:交易货币(和原交易一致)
    • SecurityKey:从getTransactionDetails获取的密钥
    • NotificationURL:你的回调接口地址
  3. 将请求发送到对应环境的repeat.vsp地址:
    • 测试环境:https://test.sagepay.com/gateway/service/repeat.vsp
    • 生产环境:https://live.sagepay.com/gateway/service/repeat.vsp
  4. 服务器接收Opayo的回调响应,验证签名后处理业务逻辑

三、注意事项

  • 确保NotificationURL是公网可访问的地址,Opayo无法回调内网地址
  • 重复支付的金额、货币必须和原交易匹配(部分场景允许小额调整,需提前联系Opayo开通)
  • 签名验证逻辑要和Form集成的返回URL验证逻辑一致,避免伪造回调

内容的提问来源于stack exchange,提问作者AnthonyH

火山引擎 最新活动