如何使用不同的通知类型测试braintree webhooks

时间:2015-01-09 10:41:03

标签: cakephp-2.3 webhooks braintree

我想用不同的通知来测试我的webhook功能。现在我只能测试它取消订阅(通过取消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返回的结果并不令人满意。无论订阅ID是否存在,它始终为所有通知类型返回相同的数组。

2 个答案:

答案 0 :(得分:3)

你是正确的Braintree_WebhookTesting::sampleNotification不知道你的Braintree保险库的状态。该方法旨在用于快速模拟人们可能收到的所有webhook通知类型,因为设置测试环境以接收webhooks可能相当复杂。

如果您希望接收具有不同通知类型的实际webhook,则必须创建您希望接收webhook的Subscription,Merchant Account或Braintree对象。

完全披露:我是Braintree的开发者。

答案 1 :(得分:1)

这是我的测试脚本,它将测试发布数据的示例发送到localhost webhook URL:

<?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。这允许您更改事件类型 - 请查看documentation。举个例子,如何生成subscription_canceled事件:

php webhook.tests.php subscription_canceled 123456 > output.txt