无法验证receiptError:无法验证使用Node.js的购买(Failed to valida

2019-11-05 10:38发布

我想建立一个服务器的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:收据是没有定义的苹果无法验证receiptError:服务器3000端口+ 0毫秒验证errorReferenceError聆听无法验证购买

Answer 1:

从错误是好像你实际上并不传递回执文件到validateOnce功能。 该代码运行前的某个地方,你需要设置:

const receipt = req.query.receipt;

并且用类似调用您的API:

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

您可以验证您的收据事先手动,以确保它是有效的。

把这个放在一起,你会得到这样的:

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的订阅都要硬



文章来源: Failed to validate receiptError: failed to validate purchase using Node.js