【问题标题】:Braintree Sale Error (PHP)Braintree 销售错误 (PHP)
【发布时间】:2024-01-18 19:01:01
【问题描述】:

尝试使用 Braintree 创建事务时出现以下错误。在沙盒中它工作得很好。我的服务器是一个带有 SSL (TLS 1.2) 负载均衡器的 AWS Beanstalk 设置。

这是来自 error_log 的错误:

[Mon Mar 20 11:32:31.816499 2017] [:error] [pid 11335] [client XX] PHP Fatal error:  Uncaught Braintree\\Exception\\Authorization in /var/app/current/scripts/lib/Braintree/Util.php:61\nStack trace:\n#0 /var/app/current/scripts/lib/Braintree/Http.php(47): Braintree\\Util::throwStatusCodeException(403)\n#1 /var/app/current/scripts/lib/Braintree/TransactionGateway.php(477): Braintree\\Http->post('/merchants/jtd9...', Array)\n#2 /var/app/current/scripts/lib/Braintree/TransactionGateway.php(49): Braintree\\TransactionGateway->_doCreate('/transactions', Array)\n#3 /var/app/current/scripts/lib/Braintree/TransactionGateway.php(289): Braintree\\TransactionGateway->create(Array)\n#4 /var/app/current/scripts/lib/Braintree/Transaction.php(502): Braintree\\TransactionGateway->sale(Array)\n#5 /var/app/current/ajax/add_points.php(23): Braintree\\Transaction::sale(Array)\n#6 {main}\n  thrown in /var/app/current/scripts/lib/Braintree/Util.php on line 61, referer: https://XX.com/dashboard

这是实际的服务器端 PHP 代码:

require_once('../scripts/lib/Braintree.php');
Braintree_Configuration::environment('production');
Braintree_Configuration::merchantId('xx');
Braintree_Configuration::publicKey('xx');
Braintree_Configuration::privateKey('xx');
$pym = $_POST["payment_method_nonce"];
$points = 10*1.5;

        $result = Braintree_Transaction::sale([
            'amount' => $points,
            'currency' => 'EUR',
            'paymentMethodNonce' => $pym,
            'options' => [
                'submitForSettlement' => true
            ]
        ]);

上面代码的 ::sale 部分给了我上面的错误。我试着做一个 exit();在包含 Braintree.php 文件和所有配置选项后,它按预期退出,因此错误肯定是由代码的 ::sale 部分引起的。

在 Sandbox 中一切正常,nonce 似乎在客户端正确生成,然后发送。

我什至不确定从哪里开始调试。任何建议都会有所帮助!

【问题讨论】:

  • braintree 的问题是,当您将其置于生产模式时,您需要从头开始遵循您在沙盒中所做的所有事情(即以编程方式创建商家帐户等)以进行交易。你在关注这个吗?
  • 是的 - 看起来授权正在通过(API 密钥很好并且可以正常工作)。当我没有正确设置这些键时,错误很清楚地告诉我。现在,看来我面临另一个问题:/
  • 是的 .. 检查您的商家 id .. 应该在您的生产模式下生成并在您进行交易时使用它,所有的东西都应该在生产模式下生成。如果有任何问题,请告诉我。
  • 商户 ID 与 Braintree API 屏幕上提供的商户 ID 相同。我只是复制粘贴了 Braintree 在其 API 屏幕旁边提供的配置选项。从我的角度来看,商家 ID 和 API 似乎是正确的......
  • 全面披露:我为 Braintree 工作。由于您收到与授权异常相关的错误,如上所述:github.com/braintree/braintree_php/blob/master/lib/Braintree/…,我建议您联系支持:articles.braintreepayments.com,以便他们可以使用您的商家 ID 检查您的配置、设置和服务器日志。

标签: php payment braintree amazon-elastic-beanstalk elastic-load-balancer


【解决方案1】:

原来我的客户申请被拒绝了。

这里的关键术语是 authorization - 它不同于 authentication(与 API 密钥相关,是正确的)。

【讨论】: