何かを機能させるために数日間苦労した後、どこにも行かなかったので、誰かが Node.js で動作する iOS Receipt Validation を手に入れたのではないかと思っていました。ここにあるノード モジュール iap_verifier を試しましたが、適切に動作させることができませんでした。Apples サーバーから返された唯一の応答は 21002 で、データの形式が正しくありませんでした。
私にとってうまくいったことの 1 つは、Apple が提供するこちらのチュートリアルから直接取得した Apple サーバーへのクライアント側の検証要求でした。コードは以下のとおりです。
// The transaction looks ok, so start the verify process.
// Encode the receiptData for the itms receipt verification POST request.
NSString *jsonObjectString = [self encodeBase64:(uint8_t *)transaction.transactionReceipt.bytes
length:transaction.transactionReceipt.length];
// Create the POST request payload.
NSString *payload = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\", \"password\" : \"%@\"}",
jsonObjectString, ITC_CONTENT_PROVIDER_SHARED_SECRET];
NSData *payloadData = [payload dataUsingEncoding:NSUTF8StringEncoding];
// Use ITMS_SANDBOX_VERIFY_RECEIPT_URL while testing against the sandbox.
NSString *serverURL = ITMS_SANDBOX_VERIFY_RECEIPT_URL;
// Create the POST request to the server.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:serverURL]];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:payloadData];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[conn start];
ノードサーバーにさまざまなものを送信するために使用しているさまざまなコードがたくさんあります。私のさまざまな試みはすべて失敗しました。上記のクライアント側の検証の例で作成した「payloadData」をサーバーに注ぎ込み、次のコードを使用してそれを Apples サーバーに送信することさえ試みました。
function verifyReceipt(receiptData, responder)
{
var options = {
host: 'sandbox.itunes.apple.com',
port: 443,
path: '/verifyReceipt',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(receiptData)
}
};
var req = https.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log("body: " + chunk);
});
});
req.write(receiptData);
req.end();
}
関数にペイロードデータが渡される場所。Apple からの応答は常に 21002 です。私はまだ基本的にノード初心者なので、正確に何が問題なのかわかりません。ObjC からノード サーバーにデータを送信しているときに、データの破損が発生している可能性があるため、正しく送信されていない可能性があります。
誰かが私を正しい方向に向けたり、レシート検証をノードで機能させる方法の例を提供したりできれば、それは大きな助けになるでしょう. 誰かが iap_verifier モジュールの経験があり、正確に必要なデータがあれば、それは素晴らしいことです。数日間このプロセスと戦ってきたので、必要なコード例を提供します。
ありがとう!