Zweryfikuj otrzymanie iOS za pomocą Node.js

Po kilku dniach starania się, aby coś zadziałało i nie było gdzie, zastanawiałem się, czy ktoś nie dostał iOS Receipt Validation działającego na Node.js. Próbowałem znaleźć moduł węzła iap_verifiertutaj ale nie mogłem sprawić, by działało poprawnie dla mnie. Jedyną odpowiedzią, jaką otrzymałem z serwerów Jabłek, jest 21002, dane były zniekształcone.

Jedną z rzeczy, która zadziałała dla mnie, była prośba o sprawdzenie poprawności po stronie klienta na serwerach Apple, które otrzymałem bezpośrednio z samouczków dostarczonych przez Appletutaj, z kodem pokazanym poniżej.

// 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];

Mam kilka różnych kodów, których używam do wysyłania szerokiej gamy rzeczy do mojego serwera węzłów. i wszystkie moje różne próby zawiodły. Próbowałem nawet po prostu umieścić na moim serwerze „payloadData” skonstruowany w powyższym przykładzie sprawdzania poprawności po stronie klienta i wysyłając go do serwerów Apples z następującym kodem:

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();
}

Gdzie przekazywana jest funkcja payloadData. Odpowiedź otrzymana od Apple jest zawsze 21002. Nadal jestem w zasadzie nowicjuszem w węźle, więc nie mogę zrozumieć, co się dzieje źle. Myślę, że może nastąpić uszkodzenie danych podczas wysyłania danych z ObjC do mojego serwera Node, więc być może nie przesyłam danych.

Jeśli ktoś może wskazać mi właściwy kierunek lub podać przykład, w jaki sposób uzyskał potwierdzenie walidacji, aby pracować dla nich w węźle, byłoby to wielką pomocą. Byłoby wspaniale, gdyby ktoś miał jakieś doświadczenie z modułem iap_verifier i dokładnie tego, jakich danych wymaga. Podam dowolny przykład kodu, którego potrzebuję, ponieważ walczę z tym procesem już od kilku dni.

Dzięki!

questionAnswers(3)

yourAnswerToTheQuestion