javascript - 使用 Node.js 验证 iOS 收据

标签 javascript ios iphone node.js

在努力尝试让某些东西工作但无处可去之后,我想知道是否有人已经在 Node.js 上进行了 iOS 收据验证。我已经尝试找到 Node 模块 iap_verifier here但我无法让它为我正常工作。我从苹果服务器收到的唯一响应是 21002,数据格式错误。

对我有用的一件事是对苹果服务器的客户端验证请求,我直接从 Apple 提供的教程中获得 here ,代码如下所示。

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

我有一堆不同的代码,我一直在使用这些代码将各种各样的东西发送到我的 Node 服务器。我所有不同的尝试都失败了。我什至尝试过将我在上面的客户端验证示例中构建的“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();
}

向函数传递 payloadData 的地方。从 Apple 收到的响应始终是 21002。我基本上还是一个 Node 新手,所以我无法弄清楚到底出了什么问题。我认为当我将数据从 ObjC 发送到我的 Node 服务器时可能会发生一些数据损坏,所以我可能没有正确传输。

如果有人能给我指出正确的方向,或者提供一些示例说明他们如何在 node 中为他们进行收据验证,那将是一个很大的帮助。如果有人对 iap_verifier 模块有任何经验,并且确切知道它需要什么数据,那就太好了。我将提供我需要的任何代码示例,因为我已经为这个过程奋斗了几天。

谢谢!

最佳答案

对于使用 npm library "request" 的任何人,这里是避免麻烦的 21002 错误的方法。

formFields = {
  'receipt-data': receiptData_64
  'password': yourAppleSecret
}

verifyURL = 'https://buy.itunes.apple.com/verifyReceipt' // or 'https://sandbox.itunes.apple.com/verifyReceipt'

req = request.post({url: verifyURL, json: formFields}, function(err, res, body) {
    console.log('Response:', body);
})

关于javascript - 使用 Node.js 验证 iOS 收据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600431/

相关文章:

javascript - 网页不显示发布的数据

ios - UiTableView-将内容添加到相关部分

iphone - UITableViewCell 并不总是可选择的?

ios - 在首次启动时加载弹出窗口,而不是 iOS 中的 UIAlertView

ios - AutoLayout 链接两个 UILabel 以具有相同的字体大小

ios - 选择 UITableViewCell 时标签背景颜色发生变化

iphone - 如何识别一个可靠的 "hw.machine"标识符?

c# - Switch(Javascript 和 C#)和 Select...Case (VBScript) 的语言语法 - 组合大小写

javascript - JS 流 : Is inheritance in Flow broken?

javascript - 应用于一个 div 的圆 Angular 和阴影?