在測試環境下檢測App上線后內購是否可以正常使用

如網友的提問:
親,我想問一下為什么我在沙盒下真機測試可以調起內購,為什么app上線了調不起來內購了?

操作前提:
1.使用沙河測試賬號 進行支付

Snip20170626_11.png

如何申請沙河測試賬號 這里就不啰嗦了 自己百度一下 網上太多了

2.使用正式的環境進行驗證 如圖


Snip20170626_12.png

確保這兩點操作之后就可以調起支付

重點:
在驗證返回的結果中 捕捉結果字典如出現以下 結果就表示 你的內購在上線之后可以正常使用了

Snip20170626_10.png

最后附上驗證的代碼


//沙盒測試環境驗證

#define SANDBOX @"https://sandbox.itunes.apple.com/verifyReceipt"

//正式環境驗證

#define AppStore @"https://buy.itunes.apple.com/verifyReceipt"

// 驗證購買 -- 雖然蘋果在iOS7提升了購買憑據的安全性,但是處于金錢考慮,購買完成后,一定要做憑據的驗證工作

- (void)completeTransaction:(SKPaymentTransaction *)transaction {
    
    [FSXBobble showRoundProgressWithTitle:@"正在確認訂單,請稍等"];
    
    // 驗證憑據,獲取到蘋果返回的交易憑據
    
    // appStoreReceiptURL iOS7.0增加的,購買交易完成后,會將憑據存放在該地址
    
    NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
    
    // 從沙盒中獲取到購買憑據
    
    NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL];
    
    // 發送網絡POST請求,對購買憑據進行驗證
    
    //測試驗證地址:https://sandbox.itunes.apple.com/verifyReceipt
    
    //正式驗證地址:https://buy.itunes.apple.com/verifyReceipt
    
    NSURL *url = [NSURL URLWithString:AppStore];
    
    NSMutableURLRequest *urlRequest =
    
    [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0f];
    
    urlRequest.HTTPMethod = @"POST";
    
    NSString *encodeStr = [receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
    
    NSString *payload = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\"}", encodeStr];
    
    NSData *payloadData = [payload dataUsingEncoding:NSUTF8StringEncoding];
    
    urlRequest.HTTPBody = payloadData;
    
    
    
    // 提交驗證請求,并獲得官方的驗證JSON結果 iOS9后更改了另外的一個方法
    
    NSData *result = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil];
    
    // 官方驗證結果為空
    
    if (result == nil) {
        
        FSXLog(@"驗證失敗");
        [FSXBobble showErrorWithTitle:@"..蘋果驗證失敗.."];
        
        _instance = nil;
        
        return;
        
    }
    
    // 啟用正式地址時__采用沙河賬號進行購買 status = 21007 表示內購在app上線后也可以使用
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:result options:NSJSONReadingAllowFragments error:nil];
    
    if (dict != nil) {
        
        // 比對字典中以下信息基本上可以保證數據安全
        
        // bundle_id , application_version , product_id , transaction_id
        
        FSXLog(@"驗證成功!購買的商品是:%@", @"_productName");
        
        [FSXBobble showSuccessWithTitle:@"支付成功"];
        
        _instance = nil;
        
    }
    
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一.總說內購的內容 協議、稅務和銀行業務 信息填寫 內購商品的添加 添加沙盒測試賬號 內購代碼的具體實現 內購的注...
    默默_David閱讀 3,719評論 0 6
  • 一.總說內購的內容 協議、稅務和銀行業務 信息填寫 內購商品的添加 添加沙盒測試賬號 內購代碼的具體實現 內購的注...
    九洲仙人閱讀 2,991評論 2 3
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,333評論 25 708
  • 楊俐爾閱讀 188評論 0 0
  • 又是一年一度教師節的來臨,今早剛從睡夢中醒來,打開手機,看到屏保中自動更新了教師節的圖片。盯著屏保幾秒鐘,等腦子清...
    五碗閱讀 202評論 1 2