sarkis-tlt
@sarkis-tlt
Full Stack Web Developer (ReactJS/MeteorJS/NodeJS)

IPN listener для PayPal в Meteor app, как реализовать?

Второй день мучаюс с прикруткой paypal к meteor приложению. Про REST API уже забил совсем, просто тонны документанции без удобной навигации. Нашел более менее простое решение, это поставить просто кнопку PayPal и настроить IPN натификацию, при которой после каждой операции пайпал будет отправлять пост запрос который нужно обработать на сервере и вернуть обратно пайпал. Собственно это единственный безопасный способ как то автоматически вести контроль платежей и что то с этим делать.
Собственно с этим "простым" решением я повис уже второй день. Не могу настроить IPN listener! Может кто поделиться опытом?
  • Вопрос задан
  • 368 просмотров
Решения вопроса 1
sarkis-tlt
@sarkis-tlt Автор вопроса
Full Stack Web Developer (ReactJS/MeteorJS/NodeJS)
решение для meteor:

ставим следующие пакеты (поддержка node пакетов и роутинг на серверной стороне).
meteor add meteorhacks:npm
meteor add meteorhacks:picker


в корне проекта появится файл packages.json, дописываем в него следующие модули.
{
  "paypal-ipn" : "3.0.0",
  "body-parser": "1.14.1"
}


на серверной стороне проекта создаем файл в котором конфигурируем роутинг.
const bodyParser = Meteor.npmRequire('body-parser');
Picker.middleware(bodyParser.urlencoded({ extended: false }));
Picker.middleware(bodyParser.json());


можно в этом же или в новом файле на серверной стороне, определяем пути и настраиваем сам listener.
Picker.route('/ipn', function(params, req, res, next) {
  res.writeHead(200);
  const ipn = Meteor.npmRequire("paypal-ipn");
  // создаем обертку функции верификации
  // можно так же верифицировать синхронно
  const wrappedVerify = Async.wrap(ipn,"verify");

  let verified = false;

  //обрабатывать только пост запросы
    if (req.method === "POST") {

    // PayPal ждет от нас пересылки IPN сообщения
    // делаем это первым:
        try {

            //второй аргумент в продакшене не нужен и по умалчанию false
            verified = wrappedVerify(req.body, {"allow_sandbox" : true});

        } catch (err) {
            // код при ошибке
        }
        if (verified === 'VERIFIED') {
            let payment = req.body;
            // код если все успешно
        }
    }
  res.end();
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ElkinPP
Здесь вы можете найти пример IPN ПейПала: https://github.com/paypal/ipn-code-samples
Я надеюсь он вам поможет.
так же : https://developer.paypal.com/docs/classic/ipn/inte...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы