代码 微信支付 V3 没有沙箱,支付宝有沙箱,Stripe 是 test mode:四家支付测试环境对照

2026-09-24 09:02:13

微信支付 V3 没有沙箱,支付宝有沙箱,Stripe 是 test mode:四家支付测试环境对照

上线前联调,常见的预期是「每家都有沙箱,换个域名就能跑」。实际把四家接进来会发现,「测试环境」在每家那里是完全不同的东西:有的是独立域名加独立账号,有的只是换一个 key,有的干脆不存在。

前提:同一业务链路里接两家以上渠道,且上线前要验证下单 → 回调 → 查单 → 退款 → 对账。如果只接一家、或者只需要跑通成功链路,直接看该渠道文档即可,下面的对照意义不大。

一、微信支付:仿真系统只覆盖 V2 付款码支付,V3 没有沙箱

微信支付有一套「仿真测试系统」,属 V2 时代产物,切换方式是在正式 API 的 URL 上加一层 xdc/apiv2sandbox 路径。以付款码支付为例:

https://api.mch.weixin.qq.com/pay/micropay
https://api.mch.weixin.qq.com/xdc/apiv2sandbox/pay/micropay

覆盖范围很窄,目前只支持「付款码支付成功用例」和「付款码支付异常用例」两类。统一下单接口 https://api.mch.weixin.qq.com/pay/unifiedorder 等暂不支持。

异常用例通过 HTTP Header 触发,仿真系统据此返回对应异常报文:

Wechatpay-Negative-Test: {用例名}

仿真系统与生产环境完全独立,含存储层,全程无资金流:用户不真实扣款,商户不入账,代金券也是假的。

验签密钥要单独取,不能复用生产的:

POST https://api.mch.weixin.qq.com/xdc/apiv2getsignkey/sign/getsignkey

请求体带 mch_id,返回 sandbox_signkeyString(32))。

关键是 APIv3 那一整套——JSAPI / Native / H5 / App 下单、退款、对账单——没有沙箱可用,只能拿真实小额或测试商户号在生产链路里验证。

参考:微信支付 支付验收指引

二、支付宝:沙箱是一整套(环境 + 测试服务 + 沙箱钱包)

支付宝的沙箱是完整环境:无需商业资质,无需绑定和开通产品即可调用接口,不影响生产数据。网关与生产不同:

网关
沙箱openapi.alipaydev.com
生产openapi.alipay.com

配套工具分散在几处,版本有下限要求:

  • 沙箱控制台:沙箱应用、沙箱买家 / 卖家账号都在这里
  • 沙箱支付宝钱包 App:10.3.70 以上
  • 小程序 IDE 3.6.2 以上 + 沙箱环境切换插件 V2.0.5 以上,装完要重启 IDE

沙箱测试服务分两种模式:

  • 单步测试:按单接口入参示例快速测,结果即用即消,步骤间流量互不影响
  • 链路测试:按测试步骤拓扑顺序清洗流量,并给出校验结果

约束与特性:原则上不需要签约 / 订购插件,沙箱会自动 MOCK 这类数据;暂时不支持信用授权。

几个常踩的报错:

现象原因与处理
APP 支付沙箱调试提示「当前账号未入驻沙箱,暂不支持调试」账号未入驻沙箱
支付提示「抱歉,无可用付款方式」沙箱买家余额不足,去沙箱控制台充值
支付输密码提示系统异常多为网络超时 / 系统抖动,重试

前端联调可以直接用沙箱钱包拉起,不一定需要切换插件。

参考:支付宝 沙箱测试服务支付宝 沙箱调试说明

三、Stripe:没有独立沙箱域名,就是 test mode + test key

Stripe 的「测试环境」不是另一个域名。用 test API key(sk_test_ / pk_test_)就是测试模式,和 live key 走同一个 api.stripe.com

测试卡:4242 4242 4242 4242,任意未来日期(如 12/34),任意 3 位 CVC(Amex 是 4 位)。

写代码时官方建议用 PaymentMethod,例如 pm_card_visa,而不是直接硬编码卡号——硬编码卡号上线后可能不符合 PCI 要求。

沙箱里能模拟的场景:

场景卡号结果
通用拒付4000 0000 0000 0002card_declined / generic_decline
余额不足4000 0000 0000 9995insufficient_funds
始终被 Radar 拦截4100 0000 0000 0019risk level highest
争议4000 0000 0000 0259默认设置下会被以 fraudulent 争议
异步退款成功4000 0000 0000 7726pendingsucceeded,发 refund.updated 事件
异步退款失败4000 0000 0000 5126succeededfailed,发 refund.failed 事件

另外两点:按卡组织 / 国家的成功支付、Radar 风控、争议、3DS、异步退款都能在测试模式触发;测试环境里取消卡退款只能在 Dashboard 操作,模拟窗口是 30 分钟。不要用测试环境做压测,会撞 rate limit。

参考:Stripe Testing

四、PayPal:sandbox 是独立环境和独立域名

PayPal 走独立域名:

API 域名
沙箱api-m.sandbox.paypal.com
生产api-m.paypal.com

注册 PayPal 开发者账号时会自动生成两个沙箱账号,一个 business(收款)、一个 personal(付款),命名形如 sb-xxxxx@business.example.com / sb-xxxxx@personal.example.com,自带测试 API 凭据。

沙箱站点 https://www.sandbox.paypal.com 可登录查看 mock 交易。

沙箱功能集与生产一致,但部分功能不适用:关闭账户、发月结单、保存物流偏好、PayPal Shops 支持。

取 access token:

curl -v -X POST "https://api-m.sandbox.paypal.com/v1/oauth2/token" \
  -u "CLIENT_ID:CLIENT_SECRET" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials"

参考:PayPal sandbox testing guidePayPal Sandbox accounts

五、对照表

渠道测试环境形态地址 / 切换方式覆盖范围备注
微信支付 V2仿真测试系统正式 URL 加 /xdc/apiv2sandbox仅付款码支付成功 / 异常用例;统一下单不支持无资金流;验签密钥单独接口取
微信支付 V3无沙箱无(需真实小额 / 测试商户号)JSAPI / Native / H5 / 退款 / 账单均无沙箱
支付宝沙箱环境 + 沙箱测试服务openapi.alipaydev.com多数支付 / 资金接口,自动 MOCK 签约沙箱钱包 10.3.70+;不支持信用授权
Stripetest mode同域名,换 test key卡 / 钱包 / 银行转账、拒付、风控、争议、退款测试卡号 + PaymentMethod
PayPalsandboxapi-m.sandbox.paypal.com与生产一致的 API 功能集独立沙箱账号 sb-xxx@

六、无论哪家,上线前都要过的几条

  • 0.01 元真实小额全链路:下单 → 回调 → 查单 → 退款 → 对账。没有沙箱的渠道必须做。
  • 回调幂等与重复通知、回调丢失兜底。
  • 拒付 / 风控拦截路径。Stripe 有现成卡号;国内渠道要在生产才可能真实触发,谨慎操作。
  • 退款失败 / 异步退款路径。
  • 沙箱与生产的域名、密钥、证书三套配置隔离。别把 test key 带上线,也别把 live key 提交进版本库。

七、未实测 / 待确认

  • 微信仿真测试系统当前是否仍在维护、是否对新商户开放,以官方文档为准。
  • 支付宝沙箱支持的产品范围会随平台调整,以「沙箱环境」文档为准。
  • 各渠道测试环境的 rate limit 具体阈值未核实。

开放问题

没有沙箱的渠道(微信 V3)怎么在测试环境里覆盖异常路径?用真实小额只能测成功链路,异常路径(重复支付、退款失败、风控拦截)几乎只能靠 mock 号或者上线后灰度。这块各家都没有干净答案。

参考链接

复制全文 生成海报 支付 沙箱 接口对接 联调 测试环境

推荐文章

程序员茄子在线接单