#paypal #next.js
Вопрос:
Я хочу написать конечную точку api, где вы можете поместить идентификатор заказа в запрос, и с помощью api PayPal я хочу проверить состояние состояния платежа.
Ссылка для разработчиков Paypal
Приведенная выше ссылка, по-видимому, является решением, но у них нет Next.JS пример. Я пытался следить за интеграцией узлов, но не могу заставить ее работать..
Сам платеж я выполняю с помощью «@paypal/react-paypal-js»: «^6.0.2», если эта информация полезна.
Это мой код, но я не получаю никакого заказа, он не определен на шаге 5…
const checkoutNodeJssdk = require('@paypal/checkout-server-sdk');
const clientId = 'clientid';
const clientSecret = 'secret';
const environment = new checkoutNodeJssdk.core.SandboxEnvironment(clientId, clientSecret);
const payPalClient = new checkoutNodeJssdk.core.PayPalHttpClient(environment);
const handler = (req, res) => {
// 2a. Get the order ID from the request body
const orderID = '1243324';
// 3. Call PayPal to get the transaction details
let request = new checkoutNodeJssdk.orders.OrdersGetRequest(orderID);
let order;
try {
order = payPalClient.execute(request);
} catch (err) {
// 4. Handle any errors from the call
console.error(err);
return res.send(500);
}
// 5. Validate the transaction details are as expected
if (order.result.purchase_units[0].amount.value !== '220.00') {
return res.send(400);
}
return res.status(200).json({ message: JSON.stringify(order.result)})
}
export default handler;
Я не могу преобразовать его в Next.js Может ли кто-нибудь показать мне пример для Next.js?
Редактировать:
Если я утешу.зарегистрируйте мой запрос, который я получаю:
OrdersGetRequest {
path: '/v2/checkout/orders/9JS050507F3815039?',
verb: 'GET',
body: null,
headers: { 'Content-Type': 'application/json' }
}
И после этого под номером 5 появляется сообщение об ошибке:
TypeError: Cannot read property 'purchase_units' of undefined
at handler (webpack-internal:///./pages/api/hi.js:26:20)
at apiResolver .. UnhandledPromiseRejectionWarning: Error: {"error":"invalid_client","error_description":"Client Authentication failed"}
at IncomingMessage.<anonymous> (/Users/Development/nextjs/uploadcloudinary/node_modules/@paypal/paypalhttp/lib/paypalhttp/http_client.js:136:22)
at IncomingMessage.emit (events.js:327:22)
at endReadableNT (_stream_readable.js:1221:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
(node:47190) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 10)
Ответ №1:
Наконец-то у меня все получилось! Для всех, кто хочет быстрое и надежное Next.JS
решение о том, как проверить детали транзакций с помощью paypal api, может использовать мой код:
const checkoutNodeJssdk = require('@paypal/checkout-server-sdk');
const clientId = 'your client id';
const clientSecret = 'your client secret';
const environment = new checkoutNodeJssdk.core.SandboxEnvironment(clientId, clientSecret);
const payPalClient = new checkoutNodeJssdk.core.PayPalHttpClient(environment);
export default async (req, res) => {
// 1. Get the order ID from the request body
const orderID = 'orderid';
// 2. Call PayPal to get the transaction details
let request = await new checkoutNodeJssdk.orders.OrdersGetRequest(orderID);
let order;
try {
order = await payPalClient.execute(request);
} catch (err) {
// 3. Handle any errors from the call
console.error(err);
return res.send(500);
}
// 4. Validate the transaction details are as expected
// Here you can do your own checks on the order
if (order.result.purchase_units[0].amount.value !== '220.00') {
return res.send(400);
}
// return whatever you want. If you check the order.result you can see the whole return from paypal
// with all the fields you also can use in 4. for your own checks
return res.status(200).json({ message: order.result })
}