Node.js 苹果收据

Node.js 苹果收据,node.js,appstore-sandbox,Node.js,Appstore Sandbox,各位, 我正在使用API验证苹果的收据 iOS应用程序只是用内容类型:application/octet stream发布苹果收据 我现在需要做的是,将其转发给苹果公司进行验证 代码: 输出: <Buffer 30 82 1a f8 06 09 2a 86 48 86 f7 0d 01 07 02 a0 82 1a e9 30 82 1a e5 02 01 01 31 0b 30 09 06 05 2b 0e 03 02 1a 05 00 30 82 0a a9 06 09 2a 86 4

各位, 我正在使用API验证苹果的收据

iOS应用程序只是用
内容类型:application/octet stream
发布苹果收据

我现在需要做的是,将其转发给苹果公司进行验证

代码:

输出:

<Buffer 30 82 1a f8 06 09 2a 86 48 86 f7 0d 01 07 02 a0 82 1a e9 30 82 1a e5 02 01 01 31 0b 30 09 06 05 2b 0e 03 02 1a 05 00 30 82 0a a9 06 09 2a 86 48 86 f7 0d ...>
 MIIa+AYJKoZIhvcNAQcCoIIa6TCCGuUCAQExCzAJBgUrDgMCGgUAMIIKqQYJKoZIhvcNAQcBoIIKmgSCCpYxggqSMAoCAQgCAQEEAhYAMAoCARQCAQEEAgwAMAsCAQECAQEEAwIBADALAgELAgEBBAMCAQAwCwIBDgIBAQQDAgFZMAsCAQ8CA
QEEAwIBADALAgEQAgEBBAMCAQAwCwIBGQIBAQQDAgEDMAwCAQoCAQEEBBYCNCswDQI........... lots of chars

Invalid receipt false Data was malformed { status: 21002 }

MIIa+AyjkozihvcnaQCoIa6TCGUCAQEXCZAJBGURDGGUAMIIKQYjkozihvcnaQCoIkMgCpYxGGQSmaocaQgCaqeAgWAMASCaQeQeQeQeQeQeQeQeQeQeQaQaQdQdQaQaQaQaQaQaQaQaQaQaQaQaQaQaQaQaQaQaQaQaQ
QEEAWIbadalageqagegebqabamcaqawcwibgqibaqqdagedMawcaqocaqecaqeebbyCNCSWDQI。。。。。。。。。。。大量的chars
无效收据错误数据格式错误{状态:21002}

谢谢

req.body
已经是一个缓冲区,所以您只需要执行
var receive=req.body.toString('base64')


但是,我认为主要的问题是您将
false
作为第二个参数传递给
verifyreceive()
。如果
receipt
已经是base64编码字符串,则应为
true
。因此,我认为目前正在发生的是对数据进行双重编码。

我的问题是验证AutoRenewReceipt

工作代码:

        var receipt = req.body.toString('base64');

        //https://github.com/pcrawfor/iap_verifier
        var client = new IAPVerifier('appleSecret');
        client.verifyAutoRenewReceipt(receipt, true, function(valid, msg, data) {
            if (valid) {
                // update status of payment in your system
                console.log("Valid receipt",valid,msg,data);
                var responseObject = {
                    valid: valid,
                    msg: msg,
                    data: data
                };
                responses.respond200(responseObject,res);
            } else {
                console.log("Invalid receipt",valid, msg, data);
                var responseObject = {
                    valid: valid,
                    msg: msg,
                    data: data
                };
                responses.respond200(responseObject,res);
            }
        });

官方文件说21002状态意味着“收据数据属性中的数据格式不正确或丢失”。我已经更新了我的问题。。。获取
无效回执的错误数据格式错误{status:21002}
希望我知道
verifyAutoRenewReceipt
verifyReceipt
方法之间的区别。您必须显式地将
true
作为
verifyReceipt()的第二个参数传递
告诉它
收据
已经是base64编码字符串。该参数的默认值为
false
,这不是您当前传递收据数据的方式。如果我添加布尔值'true',我会得到
无效收据false Shared secret不匹配{状态:21004,环境:'Sandbox'}
我没有在这里粘贴实际的apple secret。
        var receipt = req.body.toString('base64');

        //https://github.com/pcrawfor/iap_verifier
        var client = new IAPVerifier('appleSecret');
        client.verifyAutoRenewReceipt(receipt, true, function(valid, msg, data) {
            if (valid) {
                // update status of payment in your system
                console.log("Valid receipt",valid,msg,data);
                var responseObject = {
                    valid: valid,
                    msg: msg,
                    data: data
                };
                responses.respond200(responseObject,res);
            } else {
                console.log("Invalid receipt",valid, msg, data);
                var responseObject = {
                    valid: valid,
                    msg: msg,
                    data: data
                };
                responses.respond200(responseObject,res);
            }
        });