Не удалось проверить получениеError: не удалось проверить покупку с помощью Node.js - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь настроить сервер 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: сервер прослушивает порт 3000 + 0ms Проверка errorReferenceError: квитанция не определена яблоко Не удалось проверить ошибку получения: не удалось проверить покупку

1 Ответ

0 голосов
/ 19 января 2019

Из-за ошибки кажется, что вы фактически не передаете файл квитанции в функцию 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-подписки жесткие

...