苹果内购对接

1. 开发流程描述 

主要步骤说明:

## 主要步骤说明:

1.1 步骤1,配置相关

* 业务方需要在 [App Store Connect](https://appstoreconnect.apple.com) 中添加售卖的内购商品

* 需要在沙箱环境和生产环境分别配置回调地址,由支付中心服务端提供回调地址

* 业务方需要提供如下信息给支付中心开发者:

                                                        表①

名称 说明
bundleId ios应用唯一标识
appAppleId 应用程序标识appId
kid 项目内购密钥id
签名密钥文件 下载内购项目密钥(https://developer.apple.com/cn/help/app-store-connect/configure-in-app-purchase-settings/generate-keys-for-in-app-purchases
issuer ID    iss,在kid处可找到issuer ID

                                                          

 

1.2 步骤5,[生成苹果内购支付记录]

* 业务方传的orderNo必须是uuid

 

1.3 步骤8,压入支付队列

* APP创建支付请求,请使用[SKMutablePayment](https://developer.apple.com/documentation/storekit/skmutablepayment)对象,把该对象的[applicationUsername](https://developer.apple.com/documentation/storekit/skmutablepayment/1506088-applicationusername)属性值设置为orderNo,加入支付队列,唤起支付

 

1.4 步骤11

* 用户完成付款后,APP会收到APP Store回调的收据,APP可自行处理该收据。

* 支付中心不再提供验证收据的功能,而是以苹果APP Store Server回调为准

 

1.5 步骤12

* 用户完成付款后,苹果APP Store Server会回调步骤1中配置的回调地址,通知支付中心

 

1.6 步骤13

* 支付中心解析回调内容,更新订单状态,通知业务方最新订单信息

 

1.7 步骤15

* 业务方收到支付中心的通知后,需更新订单状态,处理支付成功后的逻辑

 

1.8 步骤16

* APP可轮训支付中心服务端,获取最新订单状态,展示支付成功信息

 

2. 接收苹果回调

  App Store Server 提供了JAVA,Python,Nodejs,Swift的SDK,我们使用Nodejs处理。

  2.1 服务端开发   

    1. 测试回调

    我们可以发送一个测试通知的请求,来验证配置的回调地址是否能正常收到回调信息,详情查看:https://developer.apple.com/documentation/appstoreserverapi/request_a_test_notification回调结果中包含字段testNotificationToken字符串,需要携带该字符串,再请求Get Test Notification Status接口,获取具体的通知内容,详情查看:https://developer.apple.com/documentation/appstoreserverapi/get_test_notification_status,返回结果中包含signedPayload字段,是一个JWS格式的字符串,需要使用开发工具包解析该字符串。

 

     2. 解析回调内容前置工作  

    2.1 APPS Store Connect获取内购项目密钥,详情查看https://developer.apple.com/cn/help/app-store-connect/configure-in-app-purchase-settings/generate-keys-for-in-app-purchases,同时还需要下载签名密钥文件(注意:只允许下载一次,下载后需要妥善保管)

    2.2  Apple PKI官网的Apple Root Certificates模块获取苹果根证书,网址如下https://www.apple.com/certificateauthority/,选择Apple Root CA - G3 Root下载

 

    3. 解析回调内容 

    3.1 使用nodejs JDK解析回调内容,详情查看https://github.com/apple/app-store-server-library-node

    3.2 先用回调接收到的signedPayload,调用SignedDataVerifier.verifyAndDecodeNotification(signedPayload) 方法,得到ResponseBodyV2DecodedPayload对象decodedPayload

    3.3 判断decodedPayload里的notificationType,如果为TEST,说明是测试通知请求,不做任何处理,直接返回;我们系统只处理如下几种类型:

     ① CONSUMPTION_REQUEST:用户发起退款请求,退款中

 

     ② REFUND:退款成功

 

     ③ REFUND_REVERSED:撤销退款,还能撤销?再把钱扣掉?

 

     ④ SUBSCRIBED:已订阅,表示用户购买成功,已付款

    3.4再用该对象的decodedPayload.data.signedTransactionInfo调用SignedDataVerifier.verifyAndDecodeTransaction(decodedPayload.data.signedTransactionInfo)方法,得到JWSTransactionDecodedPayload对象A。对象A就是解析后的订单信息,包括priceproductIdquantitycurrencypurchaseDateappAccountToken等字段,其中appAccountToken就是2.1的订单号uuid,用来关联自有系统订单

    备注:NodejsSDK文档可查看 https://github.com/apple/app-store-server-library-node

 

 

 

posted @   学海无涯学吧  阅读(499)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示