iOS 内购 的若干问题

3 天前
 chouqiu

现在是在 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 内购,问题有点多,希望各位大佬赐教

2238 次点击
所在节点    iDev
25 条回复
chouqiu
2 天前
@mbtfdwlx #20

得传 36 位的 UUID 格式字符串

这种:
856bb959-ae22-4711-2005-af69286aceed
mbtfdwlx
2 天前
@chouqiu #21 多谢老哥,解决了困扰我几天的一个问题,多谢
alioth0909
2 天前
其它问题网友们都回答了。提醒一点,上线后,记得处理下 CONSUMPTION_REQUEST 的通知( production 环境),这是用户发起退款后,Apple 跟开发者“征求意见”的关键一步,不处理的话,Apple 会倾向于允许退款。可以自己处理,也可以用这个开源项目 https://github.com/argus-sight/refund-swatter-lite
xz410236056
2 天前
@whoisjohnlee storeKit2 最低 iOS15+ swift ,就老中这现在还在 iOS10 、iOS12 开发的,甚至一帮遗老连 swift 都不想学,你还想用 storekit2 ? 想太多了吧
whoisjohnlee
2 天前
@xz410236056
1 、demo 里加个退款的按钮给服务器做退款通知测试,总比线上出事故强吧?

2 、我们公司现在是两个版本 StoreKit 同时使用,支持 StoreKit2 的优先使用,这也不是很复杂的事情,毕竟接过 iOS IAP 的都知道,StoreKit2 能通过订单号关联票据信息解决掉单问题是这么重要。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1162819

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX