Мы пытаемся внедрить 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