iOS 内购 的若干问题

chouqiu · 2025-9-30 10:18:11 · 944 次点击

现在是在 App Store Connect 后台开启了 App Store 服务器通知

填写了 生产环境服务器 URL沙盒环境服务器 URL 两个回调地址

生产环境服务器 URL: https://prod.xxx.com/iapNotify

沙盒环境服务器 URL: https://test.xxx.com/iapNotify

在开发过程中,测试同事使用 TestFlight 安装了最新版本的 app

当客户端完成支付时,沙盒环境服务器 URL 会收到苹果服务器通知,一个是 JWT 字符串

signedPayload解出来是下面这样的:

{
  "notificationType": "ONE_TIME_CHARGE",
  "notificationUUID": "d03b3bae-a63c-4fd3-ad4f-69e52fb966fd",
  "data": {
    "appAppleId": 6751180999,
    "bundleId": "xx.yy.zz",
    "bundleVersion": "62",
    "environment": "Sandbox",
    "signedTransactionInfo": "eyJhbG..."
  },
  "version": "2.0",
  "signedDate": 1759197475796
}

再把signedTransactionInfo解出来是这样的:

{
  "transactionId": "2000001023950888",
  "originalTransactionId": "2000001023950888",
  "bundleId": "xx.yy.zz",
  "productId": "xx.yy.zz.product_01",
  "purchaseDate": 1759197470000,
  "originalPurchaseDate": 1759197470000,
  "quantity": 1,
  "type": "Consumable",
  "appAccountToken": "856bb959-ae22-4711-2005-af69286aceed",
  "inAppOwnershipType": "PURCHASED",
  "signedDate": 1759197475796,
  "environment": "Sandbox",
  "transactionReason": "PURCHASE",
  "storefront": "CHN",
  "storefrontId": "143465",
  "price": 6000,
  "currency": "CNY",
  "appTransactionId": "704888381761368888"
}

appAccountToken 是我们的订单唯一标识

问题:

1.怎么确认这个订单已完成支付

是只要有这个回调就认为是支付成功了吗?

2.如果订单退款是怎么处理

沙盒环境好像不能测试内购的退款流程,如果上线了退款时,也会有这种服务器通知吗

3.现在要提审 app ,更换了生产环境接口 https://prod.xxx.com ,在 TestFlight 里更新到最新版

支付完成后,App Store 的服务器通知还是会请求到 沙盒环境服务器 https://test.xxx.com ,这样订单标识就对不上了。那 App Store 的审核人员审核内购时会审核不通过吧。

首次对接 iOS 内购,问题有点多,希望各位大佬赐教

举报· 944 次点击
登录 注册 站外分享
8 条回复  
ccyq1994 初学 2025-9-30 10:23:24
只有在 App 过审之后的订单才会是真是的环境,其他的都是走的沙盒。
ccyq1994 初学 2025-9-30 10:24:46
有一个通知回调的地址,需要你们填写在 App Store Connect 后台。当发生退款后,苹果会调用你们填写的地址进行通知
ccyq1994 初学 2025-9-30 10:30:30
沙盒想测试退款有点困难,也有点复杂,但是还是可以做到的,需要在沙盒创建一个订阅类型的商品,然后让你们的 iOS 工程师参考苹果的文档去写一个支付跟取消的功能,然后你再在通知中去看,你最好是在回调的地方打个 log
chouqiu 楼主 初学 2025-9-30 10:32:06
@ccyq1994 #2 审核时,支付成功后回调也请求到沙盒环境服务器 URL ,这样怎么做支付确认呢 审核时把 App Store Connect 后台的沙盒环境服务器 URL 改成生产环境的服务器 URL 吗
ccyq1994 初学 2025-9-30 10:36:29
@chouqiu 你验证的时候不是有一个状态的吗?那个状态可以可以判断是不是成功。你可以先用生产环境去验证,如果失败的话,会给你报一个是沙盒环境的状态码,再根据那个状态码去沙盒环境验证。
amarantin1 小成 2025-9-30 10:48:29
https://juejin.cn/post/7551258620349431854 这个文章看起来描述的挺清晰,我正在看 错误处理:如果使用生产环境 URL 调用此 API 返回错误码 4040010 ( TransactionIdNotFoundError ),表明该交易 ID 在生产环境中不存在,应尝试使用沙盒环境 URL 再次调用 。
whoisjohnlee 初学 2025-9-30 11:01:34
Store Kit2 支持退款通知测试,让客户端的人仔细看下文档
chouqiu 楼主 初学 2025-9-30 11:10:57
@ccyq1994 #5 审核时,审核人员购买成功后,服务器通知请求到了沙盒环境服务器 URL ( https://test.xxx.com/iapNotify ) @amarantin1 #6 谢谢,正在看,确实很详细 不过,好像提审时,还是得把 沙盒环境服务器 URL 改成 生产环境服务器 URL
返回顶部