我正在尝试使用BrainTree webhook进行订阅交易,但无法让我的页面进行验证。
来自BrainTree:https://www.braintreepayments.com/docs/php/webhooks/destination_verification
当您尝试添加目标时,我们的服务器将使用名为bt_challenge的查询参数向提供的URL发出GET请求。此查询参数应传递给verify方法。调用此方法的结果应作为响应的主体返回。
Braintree_WebhookNotification::verify(bt_challenge_param);
首先,我在NodeJS中尝试过(因为我们的交易以这种方式成功完成):
//WEBHOOK GET PROCESS FOR BRAINTREE SUBSCRIPTION
app.get('/getwebhook', function(req, res){
var bt_challenge_param = req.param('bt_challenge_param', null);
var jsObj = new Object();
jsObj.response = gateway.webhookNotification.verify(bt_challenge_param);
res.json(JSON.stringify(jsObj));
});
我的PHP页面与NodeJS进程通信并将结果放入正文。验证失败后,我直接在PHP中编写了一个测试页面:
<?php
require_once 'lib/Braintree.php';
Braintree_Configuration::environment('production');
Braintree_Configuration::merchantId('mymid');
Braintree_Configuration::publicKey('mypubkey');
Braintree_Configuration::privateKey('myprodkey');
$bt_challenge = "";
if(isset($_GET['bt_challenge']))
{
$bt_challenge = $_GET['bt_challenge'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>Webhooks</title>
<meta name="viewport" content="width=device-width; initial-scale=1.0" />
</head>
<body>
<?php
if(isset($bt_challenge) && $bt_challenge != ""){
echo Braintree_WebhookNotification::verify($bt_challenge);
}
?>
</body>
</html>
然而,验证失败了。不确定是什么问题,因为没有验证测试或任何错误的指示。我尝试过联系BrainTree,但没有回复。
答案 0 :(得分:4)
您需要返回
的结果Braintree_WebhookNotification::verify($bt_challenge);
作为body of the response,而不是HTML文档的主体,而HTML文档又是响应的主体。换句话说,您的整个文件应该是:
<?php
require_once 'lib/Braintree.php';
Braintree_Configuration::environment('production');
Braintree_Configuration::merchantId('mymid');
Braintree_Configuration::publicKey('mypubkey');
Braintree_Configuration::privateKey('myprodkey');
$bt_challenge = "";
if(isset($_GET['bt_challenge']))
{
$bt_challenge = $_GET['bt_challenge'];
}
if(isset($bt_challenge) && $bt_challenge != ""){
echo Braintree_WebhookNotification::verify($bt_challenge);
}
?>
如果您还有其他问题,请随时联系Braintree Support。
披露:我在Braintree工作。