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 服务器实现和托管字段的文档以获得详细的理解。
*没有添加评论,因为我没有足够的声誉。
完全披露:我在 Braintree 工作。如果您有任何其他问题,请随时联系 support.
就像@mfahadi 提到的那样,一个潜在的问题可能是您的代码在 Braintree_Configuration
调用中没有您的密钥,但您永远不应该 post 您的 Whosebug 密钥,即使是沙盒帐户。因此,如果它被有意过滤:做得好。如果没有,请查看 get your client keys.
指南
第二个问题是您没有用实际的客户端随机数替换下面行中的 'nonceFromTheClient':
'paymentMethodNonce' => 'nonceFromTheClient',
你可以找到一个测试随机数in the testing reference guide.
并将上面的行替换为下面的行以解决您的第二个问题:
'paymentMethodNonce' => 'fake-valid-nonce',
我在 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 服务器实现和托管字段的文档以获得详细的理解。
*没有添加评论,因为我没有足够的声誉。
完全披露:我在 Braintree 工作。如果您有任何其他问题,请随时联系 support.
就像@mfahadi 提到的那样,一个潜在的问题可能是您的代码在 Braintree_Configuration
调用中没有您的密钥,但您永远不应该 post 您的 Whosebug 密钥,即使是沙盒帐户。因此,如果它被有意过滤:做得好。如果没有,请查看 get your client keys.
第二个问题是您没有用实际的客户端随机数替换下面行中的 'nonceFromTheClient':
'paymentMethodNonce' => 'nonceFromTheClient',
你可以找到一个测试随机数in the testing reference guide.
并将上面的行替换为下面的行以解决您的第二个问题:
'paymentMethodNonce' => 'fake-valid-nonce',