2012-09-24 34 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); 
} 

回答