Braintreegateway 未捕获的异常

Posted

技术标签:

【中文标题】Braintreegateway 未捕获的异常【英文标题】:braintreegateway Uncaught exception 【发布时间】:2016-10-27 03:15:59 【问题描述】:

我在sandbox 模式下使用braintreegateway 和以下代码。

代码来自developer site

require_once 'braintree/lib/Braintree.php';

Braintree_Configuration::environment('sandbox');
Braintree_Configuration::merchantId('marchentid');
Braintree_Configuration::publicKey('publickey');
Braintree_Configuration::privateKey('privatekey');

$result = Braintree_Transaction::sale([
            'amount' => '100.00',
            'orderId' => '123',
            'merchantAccountId' => 'marchentid',
            'paymentMethodNonce' => 'nonceFromTheClient',
            'customer' => [
                'firstName' => 'kapil',
                'lastName' => 'Smith',
                'company' => 'mycompany',
                'phone' => '1234567890',
                'website' => 'http://mywebsite.com',
                'email' => 'myemail'
            ],
            'billing' => [
                'firstName' => 'kapil',
                'lastName' => 'Smith',
                'company' => 'mycompany',
                'streetAddress' => 'address',
                'extendedAddress' => 'Suite 403',
                'locality' => 'India',
                'region' => 'IN',
                'postalCode' => 'zipcode',
                'countryCodeAlpha2' => 'IN'
            ],
            'shipping' => [
                'firstName' => 'kapil',
                'lastName' => 'Smith',
                'company' => 'mycompany',
                'streetAddress' => 'address',
                'extendedAddress' => 'Suite 403',
                'locality' => 'India',
                'region' => 'IN',
                'postalCode' => 'zipcode',
                'countryCodeAlpha2' => 'IN'
            ],
            'options' => [
                'submitForSettlement' => true
            ]
        ]);

if ($result->success) 
    print_r("success!: " . $result->transaction->id);
 else if ($result->transaction) 
    print_r("Error processing transaction:");
    print_r("\n  code: " . $result->transaction->processorResponseCode);
    print_r("\n  text: " . $result->transaction->processorResponseText);
 else 
    print_r("Validation errors: \n");
    print_r($result->errors->deepAll());

结果是

致命错误:未捕获的异常“Braintree\Exception\Authorization”在 /var/www/html/api/braintree/lib/Braintree/Util.php:61 堆栈跟踪:#0 /var/www/html/api/braintree/lib/Braintree/Http.php(47): Braintree\Util::throwStatusCodeException(403) #1 /var/www/html/api/braintree/lib/Braintree/TransactionGateway.php(443): Braintree\Http->post('/merchants/dmmt...', Array) #2 /var/www/html/api/braintree/lib/Braintree/TransactionGateway.php(49): Braintree\TransactionGateway->_doCreate('/transactions', Array) #3 /var/www/html/api/braintree/lib/Braintree/TransactionGateway.php(268): Braintree\TransactionGateway->create(Array) #4 /var/www/html/api/braintree/lib/Braintree/Transaction.php(494): Braintree\TransactionGateway->sale(Array) #5 /var/www/html/api/payment.php(58): Braintree\Transaction::sale(Array)

6 main 在第 61 行的 /var/www/html/api/braintree/lib/Braintree/Util.php 中抛出

这里有什么问题?

【问题讨论】:

请提供您尝试过的代码!在这里我只能看到示例代码中提供的值。 【参考方案1】:

您只是想运行一个示例代码,其中包含您必须提供的信息的占位符。您必须添加该信息才能使其正常工作。

Braintree_Configuration::merchantId('marchentid');
Braintree_Configuration::publicKey('publickey');
Braintree_Configuration::privateKey('privatekey');

在上面的代码中,您必须在 Braintree 控制面板中提供您的商户 ID、publikey 和私钥。

'paymentMethodNonce' => 'nonceFromTheClient',

然后添加来自客户端的通知。我建议阅读有关 PHP 服务器实现和托管字段的文档以进行详细了解。

Hosted Fileds Docs

PHP Server Docs

*没有添加评论,因为我没有足够的声誉。

【讨论】:

【参考方案2】:

全面披露:我在 Braintree 工作。如果您还有任何问题,请随时联系support。

就像@mfahadi 提到的那样,一个潜在的问题可能是您的代码在Braintree_Configuration 调用中没有您的密钥,但您永远不应该将您的密钥发布到 ***,即使对于沙盒帐户也是如此。因此,如果它被有意过滤:做得好。如果没有,请查看get your client keys 的指南。

第二个问题是您没有将下一行中的“nonceFromTheClient”替换为实际的客户端随机数:

'paymentMethodNonce' => 'nonceFromTheClient',

你可以找到一个测试随机数in the testing reference guide.

并将上面的行替换为下面的行以解决您的第二个问题:

'paymentMethodNonce' => 'fake-valid-nonce',

【讨论】:

感谢您的回答。我已经解决了这个问题。你是对的,这是由于nonceFromTheClient。理解这一点需要时间。如果您在 [at] Braintree,我想说一件事来改进您关于 nonceFromTheClient 开发的文档

以上是关于Braintreegateway 未捕获的异常的主要内容,如果未能解决你的问题,请参考以下文章

Celery 任务未捕获的异常未发送到 Sentry

未捕获异常的角度中断/暂停

Android视图:未捕获的处理程序:线程主因未捕获的异常而退出

捕获未处理的异常

如何在 Promise 的回调中捕获未捕获的异常

未捕获 Java 异常