Paypal Webhooks не отправляет никаких ответов - PullRequest
0 голосов
/ 17 января 2019

Мы пытаемся внедрить PayPal платежи в нашем проекте. Мы использовали среду песочницы и использовали paypal-rest-sdk и успешно осуществили оплату. Тем не менее, мы попытались внедрить webhooks, чтобы получать ответы / уведомления webhook после последовательных платежей. Мы внедрили webhooks, как показано ниже, мы получаем ответ для webhooks после того, как достигнута конечная точка успеха, но ответы пусты!

Мы пробовали много гуглить и читать документы, но безрезультатно. Если кто-то уже делал это ранее, используя paypal-rest-sdk, пожалуйста, помогите нам.

//webhooks.js

const paypal = require("paypal-rest-sdk");

let webhook_json = {
  url: "https://ac193954.ngrok.io/ewebhook",
  event_types: [
    {
      name: "PAYMENT.AUTHORIZATION.CREATED"
    },
    {
      name: "BILLING.SUBSCRIPTION.CREATED"
    },
    {
      name: "PAYMENT.CAPTURE.COMPLETED"
    }
  ]
};

let sync = async () => {
  return new Promise((resolve, reject) => {
    paypal.notification.webhook.create(webhook_json, function(error, webhook) {
      if (error) {
        reject(error);
      } else {
        resolve();
      }
    });
  });
};

module.exports = { paypalWebhook: sync };




//server.js

const { paypalWebhook } = require("./webhooks");

app.get("/success", (req, res) => {
    let paymentToken = req.query.token;
    paypal.billingAgreement.execute(paymentToken, {}, function(
      error,
      billingAgreement
    ) {
      if (error) {
        throw error;
      } else {
        console.log("Billing agreement", JSON.stringify(billingAgreement));
        let date = billingAgreement.start_date;
        let amountString =
          billingAgreement.plan.payment_definitions[1].amount.value;
        let trial =
          billingAgreement.plan.payment_definitions[0].frequency_interval;
        let frequencyInterval =
          billingAgreement.plan.payment_definitions[1].frequency_interval;
        let frequency = billingAgreement.plan.payment_definitions[1].frequency;
        let totalFrequency = frequencyInterval + " " + frequency;
        let period = [trial, totalFrequency];
        let amount = parseInt(amountString);
        try {
          Payment.create({
            id: uuidv1(),
            date: date,
            amount: amount,
            period: period
          });
        } catch (err) {
          throw new Error(err);
        }
        res.render("index");
      }
    });
  });

  app.get("/cancel", (req, res) =>
    res.send("Transaction cancelled please go back to the home page.")
  );

  try {
    let resultWebhook = await paypalWebhook();
    if (typeof resultWebhook == "Error") {
      return;
    }
    console.log("result", resultWebhook);
  } catch (err) {
    console.log("Webhook error", err);
  }

    //This route is being triggered about 5 seconds after the /success 
    route is triggered, but there are no any responses. 

  app.post("/ewebhook", (req, res) => {
    console.log("Webhook req res", req, res);
  });

Вот запрос для / ewebhook после / успеха маршрута выполняется: https://gist.github.com/BikalNepal/4d2fd47063538d772c4432fa6d19c26d

Вот ответ: https://gist.github.com/BikalNepal/4f09eb79e3204be624bef239f945d971

...