「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > アプリ内購入の領収書検証のトラブルシューティング: 「無効なステータス」応答を処理する方法?

アプリ内購入の領収書検証のトラブルシューティング: 「無効なステータス」応答を処理する方法?

2024 年 11 月 9 日に公開
ブラウズ:134

Troubleshooting In-App Purchase Receipt Validation: How to Handle \

アプリ内購入の領収書の確認

アプリ内購入の検証は、ユーザーが正当な購入を行ったことを確認し、ユーザーにアクセスを許可するために重要です。プレミアムコンテンツまたは機能。ドキュメントが入手可能であるにもかかわらず、効果的なレシート検証を実装するのは難しい場合があります。

1 つのアプローチとして、レシート データを PHP サーバーに送信し、PHP サーバーがそれを検証のために Apple App Store に転送することが含まれます。応答が成功すると購入の正当性が確認され、サーバー上での取引の記録を続行できるようになります。

ただし、領収書の検証中に「無効なステータス」応答が発生した場合は、入力ミスがないか確認することが重要です。あなたのコード。次のサンプル コードは解決策を提供します。

- (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction {
    NSString *jsonObjectString = [self encode:(uint8_t *)transaction.transactionReceipt.bytes length:transaction.transactionReceipt.length];      
    NSString *completeString = [NSString stringWithFormat:@"http://url-for-your-php?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];  
    [validationRequest release];
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding];
    NSInteger response = [responseString integerValue];
    [responseString release];
    return (response == 0);
}

- (NSString *)encode:(const uint8_t *)input length:(NSInteger)length {
    static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /=";

    NSMutableData *data = [NSMutableData dataWithLength:((length   2) / 3) * 4];
    uint8_t *output = (uint8_t *)data.mutableBytes;

    for (NSInteger i = 0; i > 18) & 0x3F];
        output[index   1] =                    table[(value >> 12) & 0x3F];
        output[index   2] = (i   1) > 6)  & 0x3F] : '=';
        output[index   3] = (i   2) > 0)  & 0x3F] : '=';
    }

    return [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease];
}

さらに、次の PHP コードをサーバーで使用して、領収書の検証を処理し、トランザクションを記録することができます:

$receipt = json_encode(array("receipt-data" => $_GET["receipt"]));
// NOTE: use "buy" vs "sandbox" in production.
$url = "https://sandbox.itunes.apple.com/verifyReceipt";
$response_json = call-your-http-post-here($url, $receipt);
$response = json_decode($response_json);

// Save the data here!

echo $response->status;

「call-your-http-post-here」を好みの HTTP 投稿メカニズムに置き換えてください。このコードを実装し、その正確性を確保することで、レシートの購入を効果的に検証し、アプリ内トランザクションを自信を持って管理できるようになります。

リリースステートメント この記事は次の場所に転載されています: 1729166962 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3