測試用:
itms-services://?action=purchaseIntent&bundleId=bundleID&productIdentifier=produceID
bundID :項目的bundle identifier
produceID :app connect 我的App,功能列表里面對應的商品ID
做自己的邏輯需要關閉蘋果協(xié)議的添加商品:
-(BOOL)paymentQueue:(SKPaymentQueue*)queue shouldAddStorePayment:(SKPayment*)payment forProduct:(SKProduct*)product
{
//自己的邏輯,直接走下單余額支付道路
return NO;
}
不關閉的話蘋果自動下單.
支付結果協(xié)議:
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions
{
}
判斷支付狀態(tài),先獲取base64數(shù)據(jù),交易流水賬號,產(chǎn)品ID,再向自己服務器驗證(自己服務器向蘋果認證)可能某些服務器還有自己另外的配置,看后臺需要
單純驗證沙河測試結果
-(void)verifyReceiptData:(NSString*)ReceiptDataWithQueue:(SKPaymentQueue*)queueAndTransactions:(SKPaymentTransaction*)transaction
{
? ? NSMutableDictionary *params = [NSMutableDictionary dictionary];
? ? [paramssetValue:ReceiptDataforKey:@"receipt-data"];
? ? [paramssetValue:@""forKey:@"password"];
? ? NSError*jsonError;
? ? NSData*josonData = [NSJSONSerializationdataWithJSONObject:params
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? options:NSJSONWritingPrettyPrinted
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? error:&jsonError];
? ? if(jsonError) {
? ? ? ? NSLog(@"verifyRequestData failed: error = %@", jsonError);
? ? }
? ? NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"]];
? ? request.HTTPBody= josonData;
? ? staticNSString*requestMethod =@"POST";
? ? request.HTTPMethod= requestMethod;
? ? NSURLSession * session = [NSURLSession sharedSession];
? ? NSURLSessionDataTask* task = [sessiondataTaskWithRequest:requestcompletionHandler:^(NSData*_Nullabledata,NSURLResponse*_Nullableresponse,NSError*_Nullableerror) {
? ? ? ? NSError*jsonError;
? ? ? ? NSDictionary*responseJSON = [NSJSONSerializationJSONObjectWithData:dataoptions:0error:&jsonError];
? ? ? ? if(!responseJSON) {
? ? ? ? ? ? NSLog(@"Failed To Parse Server Response");
? ? ? ? }
? ? ? ? NSSLog(@"result === %@\n",responseJSON);
? ? ? ? staticNSString*statusKey =@"status";
? ? ? ? NSIntegerstatusCode = [responseJSON[statusKey]integerValue];
? ? ? ? staticNSIntegersuccessCode =0;
? ? ? ? staticNSIntegersandboxCode =21007;
? ? ? ? if(statusCode == successCode) {
? ? ? ? ? ? [queuefinishTransaction:transaction];
? ? ? ? }elseif(statusCode == sandboxCode) {
? ? ? ? ? ? [queuefinishTransaction:transaction];
? ? ? ? }else{
? ? ? ? ? ? NSLog(@"Verification Failed With Code %ld", (long)statusCode);
? ? ? ? }
? ? }];
? ? [taskresume];
}