【问题标题】:Failed to validate receiptError: failed to validate purchase using Node.js无法验证收据错误:无法使用 Node.js 验证购买
【发布时间】:2019-06-12 12:52:01
【问题描述】:

我正在尝试设置一个 node.js 服务器来验证来自AppStore connect 的收据我已经设置了应用购买。我已经关注了这个https://github.com/voltrue2/in-app-purchase 库,但我收到一个错误响应,说我的收据没有定义和failed to validate receipt。我在这里做错了什么。我仍在本地服务器上进行测试。我想在将它托管在Heroku 之前让它工作。我在这里会做错什么?

const iap = require('in-app-purchase');

iap.config({
  applePassword: 'MySecretKey',
  test: true
});

iap.setup()
  .then(() => {
    iap.validateOnce(receipt, appleSecretString).then(onSuccess).catch(onError);
  })
    .catch((error) => {
    if (error) {
        console.log('Validation error' + error);
    }
});

iap.validate(iap.APPLE, function (error, appleResponse) {
  console.log(iap.APPLE);
  if (error) {
    console.log('Failed to validate receipt' + error);
  }
  if (iap.isValidated(appleResponse)) {
    console.log('Validation successful');
  }
});

这是日志

iapserver:server 监听 3000 端口 +0ms 验证错误ReferenceError:收据未定义 苹果 无法验证收据错误:无法验证购买

【问题讨论】:

    标签: javascript ios node.js in-app-purchase web-deployment


    【解决方案1】:

    从错误看来,您实际上并没有将收据文件传递给validateOnce 函数。在该代码运行之前的某个地方,您需要设置:

    const receipt = req.query.receipt;
    

    然后用类似的方式调用你的 API:

    http://localhost:3000/verifyReceipt?receipt=<YOUR_RECEIPT_DATA>
    

    您可以事先手动verify your receipt 以确保其有效。

    把所有这些放在一起,你会得到类似的东西:

    var express = require('express');
    var app = express();
    
    const iap = require('in-app-purchase');
    
    
    app.get('/verifyReceipt', function(req, res){
    
      const receipt = req.query.receipt;
    
      iap.config({
        applePassword: 'MySecretKey',
        test: true
      });
    
      iap.setup()
        .then(() => {
          iap.validateOnce(receipt, appleSecretString).then(onSuccess).catch(onError);
        })
          .catch((error) => {
          if (error) {
              console.log('Validation error' + error);
              res.status(400).send({valid: false});
          }
      });
    
      iap.validate(iap.APPLE, function (error, appleResponse) {
        console.log(iap.APPLE);
        if (error) {
          console.log('Failed to validate receipt' + error);
          res.status(400).send({valid: false});
        }
        if (iap.isValidated(appleResponse)) {
          console.log('Validation successful');
          res.status(200).send({valid: true});
        }
      });
    });
    
    app.listen(3000);
    

    请注意,这只会在购买时验证收据,如果您正在实施订阅,您还需要定期刷新收据以确保他们的用户没有取消。这是一个很好的订阅实现指南:iOS Subscriptions are Hard

    【讨论】:

    • 你们也有安卓收据验证网站吗?
    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 2014-07-19
    • 1970-01-01
    • 2020-04-30
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多