как тестировать веб-хуки Braintree с разными типами уведомлений

Я хочу протестировать функциональность веб-перехватчика с различными уведомлениями. Прямо сейчас я могу протестировать его только для отмены подписки (путем отмены подписки из бэкэнда braintree).

$webhookNotification = Braintree_WebhookNotification::parse($sampleNotification["bt_signature"], $sampleNotification["bt_payload"]);        

Я также пробовал https://www.braintreepayments.com/docs/php/webhooks/testing :

$sampleNotification = Braintree_WebhookTesting::sampleNotification(Braintree_WebhookNotification::SUBSCRIPTION_WENT_ACTIVE,'1234qwe');
$webhookNotification = Braintree_WebhookNotification::parse($sampleNotification["bt_signature"], $sampleNotification["bt_payload"]);

Но результат, возвращаемый API, неудовлетворителен. Он всегда возвращает один и тот же массив для всех типов уведомлений независимо от того, существует идентификатор подписки или нет.


person user2971353    schedule 09.01.2015    source источник


Ответы (2)


Вы правы в том, что Braintree_WebhookTesting::sampleNotification не знает о состоянии вашего хранилища Braintree. Этот метод предназначен для быстрой эмуляции всех типов уведомлений о веб-перехватчиках, которые могут быть получены, поскольку настройка среды тестирования для получения веб-перехватчиков может быть довольно сложной.

Если вы хотите получать фактические веб-перехватчики с различными типами уведомлений, вам придется создать объект Subscription, Merchant Account или Braintree, для которого вы надеетесь получить веб-перехватчик.

Полное раскрытие: я разработчик Braintree.

person openbl    schedule 09.01.2015
comment
Я получаю фактический тип уведомления веб-перехватчика только для отмены подписки. Как я могу получить фактический веб-перехватчик для других типов уведомлений? Я попытался добавить транзакцию из учетной записи branitree (sandbox.braintreegateway.com), но это не похоже работать на меня. - person user2971353; 12.01.2015
comment
@openbl: возможно ли как-то заполнить соответствующие поля образца уведомления о веб-перехватчике? Это действительно необходимо, когда дело доходит до тестовых вариантов использования, зависящих, например, от: billingEndDate. Кстати: я использую Java SDK. - person SandorRacz; 25.01.2015
comment
@sanya, кроме идентификатора подписки, невозможно заполнить другие поля в тестовом веб-перехватчике. - person openbl; 29.01.2015
comment
благодарю за разъяснение. это усложняет проверку логики приложения на основе полей фактической подписки. - person SandorRacz; 30.01.2015
comment
Я согласен с @sanya. Без полного заполнения объектов, как это было бы при обычном вызове веб-перехватчика, функциональность sampleNotification на самом деле не очень помогает мне при тестировании. Я вижу, что уведомление попадет в правильную часть моего кода для определенного уведомления, но я не могу проверить, как я обрабатываю это уведомление без заполнения соответствующих полей. - person LeftyCoder; 23.02.2015
comment
Я согласен с тем, что эти пустые уведомления не особенно полезны, и мне действительно нужен способ создать «фиктивный» объект ответа с некоторыми допустимыми данными для каждого типа уведомлений. Мне было предложено, что один из подходов заключается в сериализации объектов входящих уведомлений в массив байтов и сохранении их для справки в качестве образца каждого типа, но это означает, что мне нужно найти способ генерировать каждый тип уведомления в состоянии, которое я нужно протестировать. Если бы Braintree мог хотя бы опубликовать несколько более подробных примеров содержания уведомлений для каждого уведомления и состояния, это помогло бы. - person Liam Weston; 28.02.2015
comment
Есть новости по этому поводу? Я не могу найти пример полных уведомлений о веб-перехватчиках в документах. Было бы здорово, если бы мы могли иметь тестовый веб-хук для отправки в панели управления песочницей. - person Stev; 15.05.2015
comment
То же самое. Я очень удивлен, что объект WebhookNotification пуст. Поскольку у нас в любом случае есть объект BraintreeGateway, который, например, настроен для режима песочницы, почему проблема запросить такое уведомление из песочницы, чтобы перенаправить его на что-то вроде http://localhost:8080/bt/webhooks? - person Stefan Falk; 13.08.2016

Вот мой тестовый скрипт, который отправляет пример тестовых пост-данных на URL-адрес веб-перехватчика localhost:

<?php
require_once __DIR__ . '/vendor/autoload.php';

// your sandbox data
\Braintree\Configuration::environment('env...');
\Braintree\Configuration::merchantId('id');
\Braintree\Configuration::publicKey('your key');
\Braintree\Configuration::privateKey('your key');

$kind = isset($argv[1]) ? $argv[1] : \Braintree\WebhookNotification::CHECK;
$id = isset($argv[2]) ? $argv[2] : null;

$sampleNotification = \Braintree\WebhookTesting::sampleNotification($kind, $id);
$signature = $sampleNotification['bt_signature'];
$payload = $sampleNotification['bt_payload'];

// Submit a payload and signature to handler
$ch = curl_init('http://localhost/braintree.hook.php'); // Your URL
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
  ['bt_signature' => $signature, 'bt_payload' => $payload]
);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

echo curl_exec($ch);

Вы можете отправить этому скрипту два параметра: сначала kind, а затем id. Это позволит вам изменить тип события — ознакомьтесь с документацией. Следуйте примеру, как сгенерировать событие subscription_canceled:

php webhook.tests.php subscription_canceled 123456 > output.txt
person OzzyCzech    schedule 15.11.2017