苹果支付
2020-02-08 09:39:25 0 举报
苹果支付
作者其他创作
大纲/内容
调用苹果支付SDK
SKPaymentTransactionStateRestored
否
这时候返回的transactionState可能为SKPaymentTransactionStatePurchasedSKPaymentTransactionStateFailedSKPaymentTransactionStateRestoredSKPaymentTransactionStateDeferred
不处理
根据扩展字段遍历列表
筛选有transactionInfo的订单
重启恢复或者设置中手动恢复购买
本次恢复购买结束
恢复购买重试
支付失败
反向订购流程
服务端反向订购流程
点击购买按钮
调用苹果SDK API传入计费点查询产品信息
返回一个订单列表
SKPaymentTransactionStatePurchased
SKPaymentTransactionStateDeferred
调用苹果SDK查询产品信息
SKPaymentTransactionStatePurchasing
调用苹果SDK支付
SKPaymentTransactionStateFailed
- (void)paymentQueue:(SKPaymentQueue *)paymentQueue restoreCompletedTransactionsFailedWithError:(NSError *)error
1
给出提示信息
查询不到产品信息
是否成功回调
是
resultCode=ERR_HW_REMOTE或者ERR_UNKNOWN,则说明没有同步到服务端成功,重新调用反向订购接口,否则认为ACCEPTED,同步成功
提示没有查询到产品信息
这时客户端会将transactionInfo存到本地,key是一个订单号
status=5?
transactionInfo
useridproductidproductNamechannelidgoodsProperties
获取transactionInfo
1.先判断transactionInfo是否存在2.判断苹果交易号存不存在3.判断applicationUsername是否有值4.根据transactionid从本地取transactionInfo5.根据计费点从本地取transactionInfo结果:如果有一条获取到transactionInfo,则判断userid是否跟当前userid一致,如果一致,则带上交易号和凭证返回transactionInfo,如果userid不一致,则返回nil;如果都没有取到transactionInfo,则return nil
线上版本是在苹果SDK成功回调时将订单信息关联transactionId
恢复购买
存储transactionInfo
1.判断transactionInfo是否存在,不存在走到下一个流程2.transactionInfo存在,判断SKPaymentTransaction中的计费点是否跟transactionInfo中的计费点一样,如果不一样,走到下一个流程3.计费点一样,则先根据当前的一个订单号删除本地存储的transactionInfo,然后根据transactionid重新将transactionInfo存入本地,走到下一个流程
开始
1.如果SKErrorCode为SKErrorPaymentCancelled,则为用户主动取消2.其他code,购买失败
SKErrorCode
弹输入密码框,输完密码
status=4?
没有拉取到订单,本次回复购买结束
applicationUsername属性存入本地参数transactionInfo
判断是否有订单列表
根据苹果返回的商品对象SKProduct构建SKMutablePayment
订单查询,最多6次,如果6次status不为5,则提示去交易记录查看
关掉订单
调用服务端反向订购验签
是否匹配到
查询未完成订单
是否有未完成
重新调用验签,最多重试6次,6次失败则提示购买失败
1.判断苹果交易号存不存在2.判断applicationUsername是否有值3.根据transactionid从本地取transactionInfo4.根据计费点从本地取transactionInfo如果有一条获取到transactionInfo,则判断userid是否跟当前userid一致,如果一致,则带上交易号和凭证返回transactionInfo,如果userid不一致,则返回nil;如果都没有取到transactionInfo,则return nil
数组中包含一个SKPaymentTransaction对象
transactionState
SKPaymentTransactionStatePurchasedSKPaymentTransactionStateFailedSKPaymentTransactionStateRestoredSKPaymentTransactionStatePurchasingSKPaymentTransactionStateDeferred
反向订购参数
http://confluence.cmvideo.cn/confluence/pages/viewpage.action?pageId=10435529客户端参数与文档区别:extInfo客户端传了以下参数:productid:计费点restore:恢复购买还是正常购买phoneNumber:手机号promotionId
筛选transactionState为SKPaymentTransactionStatePurchased的订单
调用反向订购
回调成功,该笔订单信息绑定苹果transactionIdentifier并存储到本地,用于恢复购买
根据计费匹配
补救措施,在调用苹果SDK时,将订单信息存在本地,但是关联不到transactionId
订单查询
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
resultCode=ERR_UNKNOWN或者ERR_HW_REMOTE
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentTransaction *)transaction
是否查询到产品信息
权益交付成功
根据transactionState处理
是否成功
拉取未完成订单
是否有transactionInfo
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
判断SKErrorCode
回调
2
0 条评论
下一页