如何处理 BrainTree 中的 Webhook

2024-05-26

我正在尝试使用 BrainTree webhooks 进行订阅交易,但无法让我的页面进行验证。

来自脑树:https://www.braintree payments.com/docs/php/webhooks/destination_verification https://www.braintreepayments.com/docs/php/webhooks/destination_verification

当您尝试添加目的地时,我们的服务器将使用名为 bt_challenge 的查询参数向提供的 URL 发出 GET 请求。该查询参数应传递给验证方法。调用此方法的结果应作为响应正文返回。

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 支持人员,但没有得到回复。


您需要返回结果

Braintree_WebhookNotification::verify($bt_challenge);

as the 响应正文 https://www.braintreepayments.com/docs/php/webhooks/destination_verification,而不是 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);
}
?>

如果您还有其他疑问,请随时联系布伦特里支持 https://www.braintreepayments.com/support.

披露:我在布伦特里工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 BrainTree 中的 Webhook 的相关文章

随机推荐

  • Cordova 构建 - 无法解析 com.android.tools.build:gradle:1.5.0

    升级我的机器 Ubuntu 15 10 的 cordova 和 npm 后 我无法使用 cordova 构建新项目 构建指责 graddle 中存在错误 我做了一些研究并找到了一些可能的解决方案 解决方案例如更改版本和 url graddl
  • checked="checked" 在 Chrome 中不起作用

  • 我的石墨中的 Logstash 指标在哪里?

    这可能是一个菜鸟问题 但我很难找到答案 所以我希望你们能在这里帮助我 我有一个running logstash实例将日志从一台服务器传送到另一台运行 Graphite 的服务器 这是我的输出配置 output stdout codec gt
  • 如何使用 Google App Engine 和 Python 创建 REST 服务?

    我想创建一个 RESTFUL Web 服务 通过访问的 URL 获取请求 然后为该客户端返回适当的文档 例如 如果它是一个天气应用程序 我想通过网络浏览器获取亚特兰大的天气 我会访问http weatherapp appspot com T
  • Pyspark dataframe:如何按组应用 scipy.optimize 函数

    我有一段运行良好的代码 但使用 pandas 数据帧 groupby 处理 但是 由于文件很大 gt 7000 万组 我需要转换代码以使用 PYSPARK 数据框架 这是使用 pandas dataframe 和小示例数据的原始代码 imp
  • 如何使用哈希数组填充 select_tag?

    在 Rails 3 2 应用程序中 我尝试添加一个选择字段 该字段从外部 API 调用获取数据 该数据作为哈希数组返回 name gt NameA id gt 001 name gt NameB id gt 002 我如何使用这些数据来构造
  • git:检查标签,修改某些内容,然后再次标记它

    我觉得我应该知道这一点 但我很困惑 我在 github 上分叉了一个存储库 我需要的是签出一个标签 称为 v1 0 5 修改文件上的语句 使用名为 1 0 5 的新标签 不带 v 重新标记该状态 然后执行对 master 进行同样的更改 让
  • 使用 Apache CXF 更改 WSDL xsd:complexType 名称

    我使用 Apache CXF 发布 Web 服务 即时 生成 WSDL 这很好用 但我想更改生成类型的命名约定 由于服务客户端 C 基于 WSDL 生成代码 因此默认的 xsd complexType 命名会导致类型名称以小写字母开头 以下
  • 如何在产品listing页面显示产品详细描述?

    我想在产品列表页面上的简短描述后显示详细的产品描述 我正在做这个 但什么也没有出现 我也尝试过这个 Mage getModel catalog product gt load product gt getProductId gt getDe
  • Blade 如何处理脚本调用?

    大家好 我在脚本调用方面遇到问题 我在 Laravel 中使用 Blade 除了支持搜索和排序功能的脚本调用之外 一切都正常工作 这是我的层次结构和相应的相关代码 main blade php div class page containe
  • 即使 startService 不返回,peekService 也会返回 null

    我正在尝试使用 AndroidService from a BroadcastReceiver The Service生活在不同的应用程序中BroadcastReceiver 我的理解是 正确的方法是首先调用Context startSer
  • 如何使超类方法返回子类的实例

    我有一堂课叫Test和一个名为SubTest谁延伸Text 我想有一个方法Test将返回实例的类SubTest当接到电话时 我想做 SubTest test new SubTest setTest Hello setOtherTest Hi
  • Rspec : PG::ConnectionBad: PQsocket() 无法获取套接字描述符

    我运行了 rspec 大部分测试都失败了 我对他们遇到了同样的错误 即 Failure Error Unable to find matching line from backtrace ActiveRecord StatementInva
  • Apache Flink 动态设置 JVM_OPT env.java.opts

    是否可以设置自定义 JVM 选项env java opts提交作业时未在作业中指定conf flink conf yaml file 我问的原因是我想在 log4j 中使用一些自定义变量 我也在 YARN 上运行我的工作 我已经使用 CLI
  • 将 2 个不同表中的 2 个值相乘

    我正在尝试使用 SQL 将值 X 乘以值 Y 值 X 位于表 A 中 B 位于表 B 中 我找不到这个问题的答案 表交易 ID Transaction ID Total Amount 1 001 1200 2 002 1500 3 003
  • SHA-256 BigQuery 函数或 UDF

    有人有 UDF 或知道在 BigQuery 中支持 SHA 256 的计划吗 https cloud google com bigquery query reference syntax 16 https cloud google com
  • 在 firebase 函数中设置 dotenv

    我正在尝试将我制作的小型节点表达应用程序移动到 firebase 函数中 该文件有dotenv变量 早些时候我想如果我只是部署并依赖 dotenv 它会起作用 但那并没有发生 于是 我去了firebase的环境配置文章了解如何设置 env
  • 使用express/connect-redis在页面重新加载时抓取现有会话

    使用 connect express 和 socket io 我试图让我的应用程序在重新连接时获取会话详细信息 我的会话显然在客户端连接时工作 但如果我刷新浏览器上的页面 它会忘记所有内容 我的会话cookie肯定是一样的 所以不是那样的
  • 在更新面板中提交表单后运行javascript?

    这真让我抓狂 我在这里阅读了至少 5 个与我的问题密切相关的问题 可能还通过谷歌搜索阅读了 5 页左右的内 容 我就是不明白 我试图在用户填写 已提交注册 的表单后出现一个 jqueryui 对话框 然后重定向到另一个页面 但我一生都无法让
  • 如何处理 BrainTree 中的 Webhook

    我正在尝试使用 BrainTree webhooks 进行订阅交易 但无法让我的页面进行验证 来自脑树 https www braintree payments com docs php webhooks destination verif