Я получаю следующую ошибку при попытке создать транзакцию с помощью Braintree. В песочнице все работало нормально. Мой сервер настроен на AWS Beanstalk с балансировщиком нагрузки с SSL (TLS 1.2).
Вот ошибка из 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, описанная выше, дает мне ошибку выше. Я пытался сделать выход (); после включения файла Braintree.php и всех параметров конфигурации он завершается, как и ожидалось, поэтому ошибка определенно вызвана частью кода :: sale.
Все отлично работает в Sandbox, и nonce, кажется, правильно генерируется на стороне клиента, а затем отправляется.
Я даже не уверен, с чего начать отладку. Любой совет поможет!
Оказывается, моя клиентская заявка была отклонена.
Ключевой термин здесь был авторизация — который отличается от аутентификация (что относится к API-ключам, которые были правильными).
Других решений пока нет …