braintreegateway 未捕获的异常

braintreegateway Uncaught exception

我在 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());
}

结果是

Fatal error: Uncaught exception 'Braintree\Exception\Authorization' in /var/www/html/api/braintree/lib/Braintree/Util.php:61 Stack trace: #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} thrown in /var/www/html/api/braintree/lib/Braintree/Util.php on line 61

这是怎么回事?

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

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

在上面的代码中,您必须从 Braintree 控制面板提供您的 merchentid、publikey 和 privatekey。

'paymentMethodNonce' => 'nonceFromTheClient',

然后加上客户端的通知。我建议阅读 PHP 服务器实现和托管字段的文档以获得详细的理解。

Hosted Fileds Docs

PHP Server Docs

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

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

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

指南

第二个问题是您没有用实际的客户端随机数替换下面行中的 'nonceFromTheClient':

'paymentMethodNonce' => 'nonceFromTheClient',

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

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

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