2

サブスクリプション トランザクションに BrainTree Webhook を使用しようとしていますが、ページを確認することができません。

BrainTree から: https://www.braintreepayments.com/docs/php/webhooks/destination_verification

宛先を追加しようとすると、サーバーは提供された URL に対して、bt_challenge という名前のクエリ パラメータを使用して 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 プロセスと通信し、結果を body に入れます。これが検証に失敗すると、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>

しかし、これも検証に失敗しました。検証のためのテストや何が問題なのかを示すものがないため、何が問題なのかわかりません。ブレインツリーのサポートに問い合わせてみましたが、返事がありません。

4

1 に答える 1

4

次の結果を返す必要があります

Braintree_WebhookNotification::verify($bt_challenge);

応答の本文として、応答の本文である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サポートまでお気軽にお問い合わせください。

開示:私はBraintreeで働いています。

于 2012-09-17T14:39:27.590 に答える