2017-03-08 4 views
0

私はサブスクリプションと有料機能をサポートするアプリケーションを持っています。私はサーバー側で領収書の検証に直面している問題があります。 アプリ購入レシートの有効化の問題

    1. もしユーザーが加入し、ユーザーが加入し、有効期限が切れた場合、私は21002エラー( 検証のために渡して共有秘密)
    2. を取得しています行く として賃金を使用してコンテンツをダウンロードしようとしていません。あなたが応答が

    を21004(共有秘密鍵を渡していない)し、次いで行くようになりましたユーザーが、私はリンゴのサーバーに共有シークレットを渡す必要があるときに理解することができません ダウンロードペイしようとしました。 Appleには消耗品と購読の領収書情報が含まれています。

    助けが必要ですか?

  • +0

    にキーを渡していないあなたは、サンドボックスモードでの領収書をチェックしている、コード内の論理エラーを持っていることを意味します?。 –

    +0

    はい、私はサンドボックスでテストしています – naresh

    答えて

    0

    Code 21002JSON、あなたの共有秘密を持っており、あなたのレシートデータが「misformed」かいない形式のリンゴがそれを望んでいるリンゴに送信していることを意味します。

    enter image description here

    またレシートから文字'\n''\r'を削除し、サーバーに送信する前に、'%2B''+'を交換してみてください。このような何か:

    NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; 
    NSData *receipt = [NSData dataWithContentsOfURL:receiptURL]; 
    NSString *receiptDataString = [receipt base64EncodedStringWithOptions:0]; 
    receiptDataString=[receiptDataString stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"]; 
    receiptDataString=[receiptDataString stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 
    receiptDataString=[receiptDataString stringByReplacingOccurrencesOfString:@"\r" withString:@""]; 
    NSString *postDataString = [NSString stringWithFormat:@"receipt-data=%@", receiptDataString]; 
    NSString *length = [NSString stringWithFormat:@"%lu", (unsigned long)[postDataString length]]; 
    [request setValue:length forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPBody:[postDataString dataUsingEncoding:NSASCIIStringEncoding]]; 
    

    Reference

    ​​は、これはあなたが何らかの形であなたがその場合

    +0

    '\ n \ r'を取り除いて、それ以外のものはそのまま領収書に残して、同様の問題を解決できました。 – Timo

    +0

    最近、正しい共有秘密コードを使用していても、Appleが21004ステータスをサンドボックスに返すようなバグがあります。 –

    関連する問題