iOS 现网 Apple IAP 已开通,小程序简称已审核,平台路径已开启,道具已发布。
Android 现网同一 productId=trial 可正常付款并到账。
iOS 体验版调用 wx.requestVirtualPayment 返回 errCode=4,服务端未收到 xpay_goods_deliver_notify,提示微信虚拟支付未完成(4),换一个手机提示-15001
当前 signData 已简化为仅包含 offerId/buyQuantity/env/currencyType/productId/goodsPrice/outTradeNo。
请协助查询 outTradeNo=WEDP20260503164438WHBBJO 的 iOS Apple IAP/米大师侧失败原因。
现网 env=0
iOS platform=ios
苹果 IAP 支付已开通
平台路径已开启
小程序简称已审核通过
道具 trial 已发布
productId=trial
goodsPrice=990
outTradeNo=WEDP20260503151447EGSR1H
wx.requestVirtualPayment 返回 errCode=4
服务端未收到 xpay_goods_deliver_notify
体验版也不行,预览也不行
iOS 客户端调用时间
调用时间:2026-05-03 16:44 左右(北京时间,Asia/Shanghai)
测试环境:体验版
客户端:iPhone / iOS
支付方式:微信小程序虚拟支付,iOS Apple IAP
本次订单信息
outTradeNo / order_no:WEDP20260503164438WHBBJO
productId:trial
goodsPrice:990
env:0(现网)
mode:short_series_goods
offerId:1450525010
调用 wx.requestVirtualPayment 的完整请求参数
本次 iOS 为排查问题,已将 signData 简化为最小字段,不包含 platform,不包含 attach。
{
"signData": "{\"offerId\":\"1450525010\",\"buyQuantity\":1,\"env\":0,\"currencyType\":\"CNY\",\"productId\":\"trial\",\"goodsPrice\":990,\"outTradeNo\":\"WEDP20260503164438WHBBJO\"}",
"paySig": "请见服务端实际返回,已用现网 AppKey 计算,因涉及签名不公开完整值",
"signature": "请见服务端实际返回,已用 wx.login/code2session 返回的 session_key 计算,因涉及用户态签名不公开完整值",
"mode": "short_series_goods"
}
展开后的 signData:
{
"offerId": "1450525010",
"buyQuantity": 1,
"env": 0,
"currencyType": "CNY",
"productId": "trial",
"goodsPrice": 990,
"outTradeNo": "WEDP20260503164438WHBBJO"
}
客户端现象
iOS 体验版点击支付后,前端提示:
微信虚拟支付未完成,请重试(4)
服务端未收到支付成功发货通知。
服务端 virtual-prepay 日志
服务端已成功创建订单并生成虚拟支付参数:
POST /ai/wedding/billing/orders HTTP/1.1 200 OK
POST /ai/wedding/billing/orders/WEDP20260503164438WHBBJO/wechat/virtual-prepay HTTP/1.1 200 OK
可补充截图:请截服务器中包含上述两行的日志。
xpay_goods_deliver_notify 未收到情况
我们服务端发货推送接口地址为:
https://api.weddinghost.xyz/ai/wedding/billing/payments/wechat/virtual/notify
该接口用于接收 xpay_goods_deliver_notify。本次订单支付失败后,服务端日志中没有出现:
POST /ai/wedding/billing/payments/wechat/virtual/notify
说明本次 iOS 支付未进入成功发货推送链路。
服务端可用以下命令过滤验证:
cd /root/wedding-host
docker compose --env-file .env.prod -f docker-compose.prod.yml logs --tail=300 kinit-api | grep "WEDP20260503164438WHBBJO\|virtual/notify\|xpay_goods_deliver_notify"
当前结果仅能看到 virtual-prepay 200 OK,看不到 virtual/notify。
苹果 IAP 支付通知地址配置确认
微信虚拟支付后台已配置并启用消息推送/发货推送地址:
https://api.weddinghost.xyz/ai/wedding/billing/payments/wechat/virtual/notify
配置情况:
消息加密方式:明文模式
数据格式:JSON
状态:已启用
苹果 IAP 支付:已开通
平台路径:已开启
小程序简称:已审核通过
该地址已通过微信后台服务器地址验证。手动测试也可访问:
curl -i -X POST https://api.weddinghost.xyz/ai/wedding/billing/payments/wechat/virtual/notify \
-H "Content-Type: application/json" \
-d '{}'
返回:
{"ErrCode":1,"ErrMsg":"missing OutTradeNo"}
说明接口可达,且未被登录鉴权拦截。
服务端 rid 请求标识
目前我们服务端日志中没有看到微信侧 rid 字段。virtual-prepay 是我们小程序前端请求自己后端的接口,日志中只有 HTTP 请求记录,没有微信 rid。
如果官方需要微信侧 rid,请说明该 rid 应从以下哪个位置获取:
1. iOS 微信客户端 requestVirtualPayment fail 回调对象
2. 微信开发者工具 Console
3. 微信后台交易订单详情
4. 米大师后台流水/失败记录
我们目前客户端返回只看到错误码 4,未看到 rid。

-15001参数错误,具体原因见err_msg 这个打印出来的错误是什么?
signData={"offerld":"1450525010""buyQuantity":1,"'env":0,"currencyType":"CNY","productld":"trial","goodsPrice":990,"outTradeNo":"WEDP20260503163742XDU6MF""attach":"{\"order_no\":\"WEDP20260503163742XDU6MF""plan_code\":("triall",("user_id":2y"}
我在服务器默临时让后端在 virtual-prepay 成功时打印一行脱敏日志,显示: