2012-09-24 148 views
1

我正在執行「應用程序購買 - 消耗品」系統。在第一次,我可以正常購買,但是當我在下次嘗試購買時,它不起作用。所以我換了一個測試用戶,它也只能第一次購買。它顯示「SK付款交易狀態失敗」,我該如何解決?我無法在應用程序購買中重新購買 - 消耗品

- (void)buyProduct:(int)myNumber{ 
    SKPayment *payment = [SKPayment paymentWithProductIdentifier:[appDelegate.ArrayProductName objectAtIndex:myNumber]]; 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
} 

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
    for (SKPaymentTransaction *transaction in transactions){ 
     switch (transaction.transactionState) { 
      case SKPaymentTransactionStatePurchasing: 

       break; 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
       break; 
      case SKPaymentTransactionStateRestored: 
       [self restoreTransaction:transaction]; 
       [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       if (transaction.error.code != SKErrorPaymentCancelled){ 
        NSLog(@"An error encounterd : %@",transaction.error.code); 
       } 
       break; 
      default: 
       break; 
     } 
    } 
} 

- (void)completeTransaction:(SKPaymentTransaction *)transaction { 
    [self verifyReceipt:(SKPaymentTransaction *)transaction]; 
} 

- (void)restoreTransaction:(SKPaymentTransaction *)transaction { 

} 

- (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction { 
    NSString* jsonObjectString = [self encode:(uint8_t *)transaction.transactionReceipt.bytes length:transaction.transactionReceipt.length];  
    NSString* completeString = [NSString stringWithFormat: @"myurl?receipt=%@", jsonObjectString]; 
    NSURL* urlForValidation = [NSURL URLWithString: completeString]; 
    NSMutableURLRequest* validationRequest = [[NSMutableURLRequest alloc] initWithURL: urlForValidation]; 
    [validationRequest setHTTPMethod: @"GET"]; 
    NSData * responseData = [NSURLConnection sendSynchronousRequest:validationRequest returningResponse: nil error: nil]; 
    NSString* responseString = [[NSString alloc] initWithData: responseData encoding: NSUTF8StringEncoding]; 
    NSLog(@"return data : %@",responseString); 
    int success = [responseString intValue]; 
    return (success == 0); 
} 

回答

相關問題