iOS內購的訂單對應和補單,ios訂單對應
內購的關鍵類:
1.SKPayment(SKMutablePayment可將自己的參數一對一與蘋果產生的payment對應起來)
2.TransactionObserver:交易狀態更新時執行此方法,此方法會傳入交易SKPaymentTransaction數組,對數組進行遍曆,對不同狀態進行對應的操作
(SKPaymentTransactionStatePurchasing,SKPaymentTransactionStatePurchased,SKPaymentTransactionStateFailed,SKPaymentTransactionStateRestored,SKPaymentTransactionStateDeferred)
3.SKPaymentTransaction:包括transactionReceipt,payment,transactionIdentifier等關鍵屬性,transactionReceipt是後端驗簽的關鍵。
內購流程1:
SKPayment *payment = [SKPayment paymentWithProductIdentifier:productID];//傳入productID
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];//添加observer,並執行協議,對支付狀態進行更新
//observer代理方法
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
//對已經支付的狀態進行操作
break;
case SKPaymentTransactionStateFailed:
//支付失敗的操作
break;
case SKPaymentTransactionStateRestored:
//對於非消耗產品的操作
break;
default:
break;
}
}
}
如果使用者已經支付,但是驗簽沒有通過,繼續支付時會產生可免費恢複的對話方塊,這時即使再添件payment,也都是purchasing的狀態,必需將purchased狀態的paymenttrananction 通過[[SKPaymentQueue defaultQueue] finishTransaction:transaction]後才能逐個執行paymentque裡面purchasing狀態下的訂單(這是針對同一個productIdentifier的產品),不同的productIdentifier產品仍可正常支付