Передача идентификатора пользователя и идентификатора продукта кнопке Paypal

Я использую @paypal/react-paypal-js для отображения кнопки PayPal и создания заказа. Меня конкретно интересует обработка платежей по кредитным картам. Когда мой бэкенд Django получает событие завершения приема платежа от PayPal, ему необходимо сохранить информацию о конкретном пользователе, владеющем конкретным продуктом. Следовательно, уведомление должно содержать как ID пользователя (т.е. email), так и ID продукта.

Вот как я пытаюсь передать эти две части информации в моем фронтенде:

createOrder={(data, actions) => {
    return actions.order.create({
        purchase_units: [
            {
                amount: {
                    value: course.price,
                    currency_code: course.currency,
                },
                custom_id: course.title,
            },
        ],
        payer: {
            email_address: userEmail,
        }
    });
}}

Адрес электронной почты пользователя автоматически заполняется в форме. Однако событие webhook_event в сервере не содержит этой информации. То есть, нет поля payer внутри resource в webhook_event.

Я также попробовал добавить payee: {email_address: userEmail} в purchase_units, но после нажатия на кнопку PayPal не было возможности оплатить кредитной картой. Эта опция была заменена опцией создания учетной записи PayPal.

Как я могу передать две части информации, чтобы получить их в webhook_event? (Я хотел бы избежать уродливого решения конкатенировать оба куска в custom_id)

Я также попробовал добавить payee: {email_address: userEmail} в purchase_units, но тогда после нажатия на кнопку PayPal не было возможности оплатить кредитной картой. Эта опция была заменена опцией создания счета PayPal.

.

payee устанавливает, какой счет получает платеж PayPal. Черная кнопка "Дебетовая или кредитная карта" обычно доступна для гостевых платежей, если счет получателя PayPal существует и подтвержден.

Как я могу передать две части информации, чтобы получить их в webhook_event?

Если вам абсолютно необходимо хранить две части информации как часть пользовательского значения (обычно это полезно только для подписок, хотя даже для подписок есть лучшие решения, которые включают использование вашей собственной базы данных), вы можете закодировать объект JSON с помощью json.dumps({'email': somevalue, 'product': somevalue} и сохранить это строковое значение json в custom_id - затем декодировать его позже при получении с помощью json.loads.

Однако необходимость в подобном действии возникает редко, особенно при единовременной оплате заказа. Вы должны реализовать создание и захват заказа из собственных серверных маршрутов и хранить необходимую информацию в собственной базе данных сразу после успешного захвата, прежде чем возвращать результат захвата в кнопку JavaScript. Смотрите информацию для серверной интеграции в Настройка стандартных платежей.

Вебхуки в таком случае вообще не нужны, тем более получение информации о товаре из вебхука. Однако вы можете и должны включить информацию о товаре в транзакцию PayPal в информационных целях, используя массив items. Это также будет показано плательщику в правом верхнем углу корзины во время оформления заказа и будет видно в деталях завершенной транзакции paypal.com.

Вернуться на верх