支付宝小程序在 iOS 上支持虚拟物品支付吗?
结论
支付宝小程序在 iOS 上通常可以使用支付宝的小程序支付能力购买虚拟物品,并没有“所有 iOS 虚拟物品都必须跳转 H5 支付”的统一技术限制。
不过,能调用支付接口,不代表所有虚拟商品都能接入。商品最终能否上线,要看小程序类目、商品性质、商户签约产品、平台运营规范,以及当时适用的 iOS 审核政策。游戏币、会员权益、付费内容、直播礼物等商品可能分别适用不同规则,具体以支付宝开放平台后台实际开放的能力和审核结果为准。
推荐实现方式
一般由服务端创建支付宝交易,再将支付宝返回的交易号交给小程序调用 my.tradePay。支付结束后,服务端根据支付宝异步通知确认订单并发放虚拟物品。
小程序下单
↓
业务服务端创建订单
↓
调用支付宝服务端支付接口
↓
返回 trade_no
↓
小程序调用 my.tradePay
↓
支付宝异步通知服务端
↓
验签、核对金额和订单状态
↓
发放虚拟物品
不要只根据小程序端的支付回调发货。用户关闭页面、网络中断或伪造请求,都可能造成订单状态不一致。
小程序端示例
服务端创建交易后,向小程序返回 tradeNO:
my.request({
url: 'https://api.example.com/orders',
method: 'POST',
data: {
productId: 'vip_monthly',
quantity: 1
},
success: (response) => {
const tradeNO = response.data.tradeNO;
my.tradePay({
tradeNO,
success: (result) => {
if (result.resultCode === '9000') {
// 这里只表示客户端支付流程成功。
// 商品是否到账仍应向业务服务端查询。
my.navigateTo({
url: `/pages/order/result?id=${response.data.orderId}`
});
} else {
console.log('支付未完成:', result.resultCode);
}
},
fail: (error) => {
console.error('支付调用失败:', error);
}
});
},
fail: (error) => {
console.error('订单创建失败:', error);
}
});
tradeNO 必须由服务端创建并返回。商户私钥、应用私钥等敏感信息不能放进小程序代码。
服务端处理要点
服务端通常需要处理以下事项:
- 校验商品是否存在、是否可售,并确认当前价格。
- 生成唯一的业务订单号。
- 调用支付宝服务端支付接口创建交易。
- 将支付宝返回的
trade_no传给小程序。 - 接收支付宝异步通知并验证签名。
- 核对
out_trade_no、订单金额、商户身份和交易状态。 - 使用幂等逻辑发放虚拟物品,避免重复到账。
伪代码如下:
async function handlePaymentNotify(params) {
const verified = verifyAlipaySignature(params);
if (!verified) {
throw new Error('Invalid signature');
}
const order = await findOrder(params.out_trade_no);
if (!order) {
throw new Error('Order not found');
}
if (order.amount !== params.total_amount) {
throw new Error('Amount mismatch');
}
if (params.trade_status === 'TRADE_SUCCESS') {
await runInTransaction(async () => {
await markOrderPaidOnce(order.id, params.trade_no);
await grantVirtualGoodsOnce(order.id);
});
}
return 'success';
}
接口名称和请求参数应以商户实际签约的支付宝支付产品文档为准,不能把这段伪代码直接当作完整的 SDK 调用。
是否需要跳转 H5
如果小程序后台已经开放相应的支付能力,通常直接使用 my.tradePay 即可,没有必要单独为 iOS 跳转 H5。
跳转 H5 也不一定能绕过平台规则。如果某类虚拟商品本身不在允许范围内,即使把收银台放到 H5,也可能被认定为规避审核,同时还会增加登录态同步、支付结果回跳和订单补偿的复杂度。
只有支付宝明确要求使用网页支付,或者当前商户确实无法获得小程序支付能力时,才需要考虑 H5 方案。
上线前需要确认
上线前应重点检查:
- 小程序所属类目是否允许销售相应的虚拟商品。
- 商户是否已经签约并开通小程序支付能力。
- 商品是否涉及游戏充值、虚拟币、会员订阅、数字内容或直播打赏等特殊场景。
- iOS 与 Android 是否需要采用不同的商品展示或支付流程。
- 支付宝审核是否要求补充资质、用户协议、退款规则或未成年人保护措施。
- 当前 iOS 审核政策是否允许这种业务形态。
更准确地说,支付宝小程序在 iOS 上并不存在适用于所有场景的“虚拟物品一律禁止支付”规则。技术上可以使用小程序支付,但具体商品能否上线,需要先在支付宝开放平台确认类目和支付权限。涉及特殊虚拟商品时,还应提交工单取得书面确认。
备注:内容仅供参考。
