小程序虚拟支付集成指南
小程序虚拟支付集成即将开放,敬请期待。
在 CloudBase 控制台「集成中心」创建小程序虚拟支付集成后,平台会自动生成一个 HTTP 云函数,封装好签名、查单与回调处理能力。本指南介绍如何完成从创建集成、配置微信消息推送到小程序端调起收银台的完整链路。
关于函数名的约定:集成中心生成的云函数名形如
<集成名>-<随机串>(例如xpay-demo-rwmx67sc)。为方便讲解,本文统一称其为xpay-common——你在自己的代码中替换为实际函数名即可。
虚拟支付面向虚拟商品(道具直购、代币支付、会员订阅)。它解决了 iOS 端的支付合规问题:底层把微信支付与 Apple IAP 打通,同一套 wx.requestVirtualPayment 在安卓与 iOS 上都能 拉起收银台。
实物商品请使用微信小程序支付集成指南;虚拟商品必须使用虚拟支付,否则 iOS 端会因违反应用商店规则而无法上架。
整体调用链路:
- 正向请求:小程序 →
wx.cloud.callHTTPFunction(平台自动鉴权 + 注入 openid)→xpay-commonHTTP 云函数 → 返回signData+ 双签名 - 支付拉起:小程序拿到签名参数后,由客户端调用
wx.requestVirtualPayment自行完成下单(服务端不参与下单) - 异步回调:微信消息推送 → 集成中心网关(验签 + 解密)→
xpay-common→ 业务侧发货
架构总览
职责分工:
| 角色 | 职责 |
|---|---|
| 小程序 | 通过 callHTTPFunction 获取签名参数,再调 wx.requestVirtualPayment 拉起收银台 |
| xpay-common 云函数 | 生成 signData 与双签名;提供查单接口;接收回调后完成幂等与发货 |
| 微信虚拟支付 | 支付业务实际执行方(安卓走微信支付,iOS 走 Apple IAP) |
| 集成中心 | 托管凭证与环境变量;代收回调并完成验签、解密,以明文转发至云函数 |
| 业务侧 | 维护道具清单(productId + 价格)、订单状态机、幂等发货与风控 |
这是虚拟支付与普通微信支付最大的差异。普通支付由服务端调 V3 接口拿 prepay_id;虚拟支付由服务端只产出签名参数,真正的下单动作发生在客户端调用 wx.requestVirtualPayment 时。
与微信支付集成的差异
| 维度 | 微信支付(实物) | 虚拟支付 |
|---|---|---|
| 适用商品 | 实物商品、线下服务 | 道具直购、代币、会员订阅等虚拟商品 |
| 客户端 API | wx.requestPayment | wx.requestVirtualPayment |
| 下单动作 | 服务端调 V3 接口拿 prepay_id | 服务端本地构造 signData + 双签名,客户端自行拉起 |
| 服务端接口 | /v3/pay/transactions/* | /xpay/*(米大师) |
| 回调通道 | 微信支付回调 + AES-GCM 解密 | 小程序消息推送 + AES-256-CBC 解密 |
| 核心凭证 | 商户号、APIv3 密钥、商户证书、支付公钥 | OfferID、AppKey、AppID / AppSecret |
| 费率与结算 | 约 0.6%,T+1 | 安卓 1%,T+3;iOS 12%,约 45–60 天 |
前置条件
| 项 | 要求 |
|---|---|
| 小程序 | 已通过微信认证,并已开通虚拟支付能力(类目与主体要求以微信公众平台为准) |
| 虚拟支付商户信息 | 已在 MP 后台「虚拟支付 → 基本配置」获取 OfferID 与 AppKey |
| 道具 | 已在 MP 后台创建并发布道具,取得 productId 与价格;发布后同步需数分钟至半小时 |
| 小程序基础库 | ≥ 3.15.2(wx.cloud.callHTTPFunction 的前提条件) |
| 微信开发者工具 | 最新稳定版;支付需在真机验证 |
iOS 端通过 Apple IAP 收款,最低金额为 1 元(100 分)。低于 1 元的道具档位在 iPhone 上必然失败;且 Apple 支付不支持沙箱环境,开发调试请在安卓端完成或使用现网小额道具。
第一步 · 准备虚拟支付凭证
登录 微信公众平台,按以下各处取值。所有值将在第二步填入集成中心表单。
1.1 虚拟支付基本配置
路径:MP 后台 → 虚拟支付 → 基本配置。
| # | 凭证 | 说明 |
|---|---|---|
| 1 | offerId | 虚拟支付商户号(米大师应用 ID) |
| 2 | appKey | 支付签名密钥,用于计算 paySig,只放服务端 |
1.2 小程序基本信息
路径:MP 后台 → 设置 → 基本设置。
| # | 凭证 | 说明 |
|---|---|---|
| 3 | appId | 小程序 AppID |
| 4 | secret | 小程序 AppSecret,用于换取 sessionKey,只放服务端 |
1.3 消息推送配置(回调)
路径:MP 后台 → 虚拟支付 → 基本配置 → 基础配置 → 发货推送配置。
| # | 凭证 | 说明 |
|---|---|---|
| 5 | token | 消息推送 Token,用于验签 |
| 6 | msgSecret | EncodingAESKey(43 位),用于安全模式解密 |
虚拟支付的发货推送复用了消息推送的验签 / 解密能力,但配置项挂在虚拟支付下,不是「开发管理 → 消息推送」,两处指向同一套 Token 与 EncodingAESKey。
采用集成中心托管回调(system 模式)时,这两项由平台注入并由网关使用,业务代码无需实现任何密码学逻辑。