我想用不同的通知来测试我的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是否存在,它始终为所有通知类型返回相同的数组。
答案 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