Веб-перехватчик PayPal: как определить транзакцию, связанную с событием веб-перехватчика - PullRequest
0 голосов
/ 11 июля 2020

Я интегрировал функцию проверки с помощью смарт-кнопок в торговую площадку, где любой может продавать / покупать товары у кого угодно.

Я также успешно установил прослушиватель веб-перехватчика, который получает уведомление, если был произведен возврат платежа.

Но в теле полученного события возврата я не могу найти информацию, КАКАЯ платеж / транзакция была возвращена.

Читая событие с помощью

file_get_contents('php://input');

Я получу детали события в кодировке JSON следующим образом:

{
    "id":"WH-3WS24689NP236083V-89P84301TC0576916",
    "event_version":"1.0",
    "create_time":"2020-07-10T15:36:33.720Z",
    "resource_type":"refund",
    "resource_version":"2.0",
    "event_type":"PAYMENT.CAPTURE.REFUNDED",
    "summary":"A EUR 7.89 EUR capture payment was refunded",
    "resource":{
        "seller_payable_breakdown":{
            "total_refunded_amount":{
                "value":"7.89",
                "currency_code":"EUR"},
            "paypal_fee":{
                "value":"0.15",
                "currency_code":"EUR"
            },
            "gross_amount":{
                "value":"7.89",
                "currency_code":"EUR"},
            "net_amount": {
                "value":"7.74",
                "currency_code":"EUR"
            }
        },
        "amount":{
            "value":"7.89",
            "currency_code":"EUR"
        },
        "update_time":"2020-07-10T08:36:00-07:00",
        "create_time":"2020-07-10T08:36:00-07:00",
        "links":[
            {"method":"GET","rel":"self","href":"https://api.sandbox.paypal.com/v2/payments/refunds/3TF6899507696873K"},
            {"method":"GET","rel":"up","href":"https://api.sandbox.paypal.com/v2/payments/captures/5U107751JJ334642K"}
        ],
        "id":"3TF6899507696873K",
        "status":"COMPLETED"
    },
    "links":[{
        "href":"https://api.sandbox.paypal.com/v1/notifications/webhooks-events/WH-3WS24689NP236083V-89P84301TC0576916",
        "rel":"self",
        "method":"GET"},{
        "href":"https://api.sandbox.paypal.com/v1/notifications/webhooks-events/WH-3WS24689NP236083V-89P84301TC0576916/resend",
        "rel":"resend",
        "method":"POST"}
    ]
}

Итак, я получаю данные. Но в данных я не могу найти никакой информации, такой как «идентификатор транзакции», «идентификатор заказа» или аналогичной, которую я мог бы использовать для поиска в БД, если она соответствует идентификатору захвата (из порядка захвата) предыдущего заказа.

Что мне нужно сделать, чтобы получить нужную мне информацию? Или я ищу не в том месте / не в том поле?

В случае, если мне нужно сначала авторизовать запрос и сделать еще один запрос для получения дополнительных данных, я был бы очень благодарен за ПОЛНЫЙ пример (или ссылку к примеру) в PHP, поскольку я не могу понять документацию Paypal по веб-перехватчикам.

РЕДАКТИРОВАТЬ: Кажется, что в одной из ссылок (в случае выше), идентификатор захвата (который совпадает с идентификатором транзакции txn) исходного платежа «скрыт» в одной из ссылок, обеспечивающих конечные точки. В данном случае: 5U107751JJ334642K

Я могу только покачать головой, когда Paypal делает невероятно труднодостижимые вещи. Как можно НЕ иметь специального поля с идентификатором исходной транзакции в сообщении о возврате?

1 Ответ

1 голос
/ 11 июля 2020

Добро пожаловать в чудесный мир Hypermedia как движка состояния приложения ( HATE OAS [курсив добавлен…])!

Цель которого - предоставить вашему приложению информацию, необходимую для динамического обнаружения и выполнения связанных ресурсов / действий. С этой целью каждый ответ API или полезная нагрузка веб-перехватчика содержат список links.

Как вы уже обнаружили, в данном случае они ссылаются на родительский ресурс, то есть на захваченный возврат средств, через up взаимосвязь.

Хотя может возникнуть соблазн извлечь идентификатор захвата прямо из href, может быть безопаснее перейти по этой ссылке. Вы получите исходный ответ на захват , из которого вы можете либо захватить id, либо перейти по ссылке up, чтобы перейти к авторизации .

Вы можете найти немного больше информации о реализации PayPal HATEOAS на https://developer.paypal.com/docs/api/reference/api-responses/#hateoas -ссылках . Те типы rel, которые стандартизированы, задокументированы в https://www.iana.org/assignments/link-relations/link-relations.xhtml#link -relations-1 . Например, описание rel="up": «относится к родительскому документу в иерархии документов».

...