2015-11-23 4 views
2

Я использую Braintree для обработки платежа по кредитной карте в моем CodeIgniter проекте и Braintree_Transaction :: продажи бросает недопустимое исключение аргумента говоря недействительных ключи сообщения для параметров биллинга адреса. Но я не думаю, что есть ошибки проверки. Что я пытаюсь сделать, может быть упрощена, как показано ниже:Ошибка при интеграции Braintree PHP

$card_info = [ 
     'cardholderName' =>mysql_real_escape_string($_POST['full_name']), 
     'number' =>mysql_real_escape_string($_POST['number']), 
     'expirationMonth' =>mysql_real_escape_string($_POST['expiry_month']), 
     'expirationYear' =>mysql_real_escape_string($_POST['expiry_year']), 
     'cvv' =>mysql_real_escape_string($_POST['card_cvv']), 
     'billingAddress' =[ 
       'firstName' =>mysql_real_escape_string($_POST['first_name']), 
       'lastName'=>mysql_real_escape_string($_POST['last_name']), 
       'streetAddress'=>mysql_real_escape_string($_POST['user_address']), 
       'city'=>mysql_real_escape_string($_POST['user_city']), 
       'state'=>mysql_real_escape_string($_POST['user_state']), 
       'country' =>mysql_real_escape_string($_POST['user_country']), 

       ] 
     ] 
     $result = Braintree_Transaction::sale(['amount'=>'4.99', 
               'creditCard'=>$card_info, 
               'options'=>['submitForSettlement' => true] 
               ]) 

Но когда я запускаю следующий код, я получаю следующее сообщение об ошибке:

<br /> 
<b>Fatal error</b>: Uncaught exception 'InvalidArgumentException' with  message 'invalid keys: creditCard[billingAddress][city], creditCard[billingAddress][country], creditCard[billingAddress][firstName], creditCard[billingAddress][lastName], creditCard[billingAddress][state], creditCard[billingAddress][streetAddress]' in C:\xampp\htdocs\naya_admin\application\third_party\braintree\lib\Braintree\Util.php:343 
Stack trace: 
    #0 C:\xampp\htdocs\naya_admin\application\third_party\braintree\lib\Braintree\TransactionGateway.php(48): Braintree\Util::verifyKeys(Array, Array) 
     #1 C:\xampp\htdocs\naya_admin\application\third_party\braintree\lib\Braintree\TransactionGateway.php(251): Braintree\TransactionGateway-&gt;create(Array) 
     #2 C:\xampp\htdocs\naya_admin\application\third_party\braintree\lib\Braintree\Transaction.php(480): Braintree\TransactionGateway-&gt;sale(Array) 
     #3 C:\xampp\htdocs\naya_admin\application\modules\brain_tree\controllers\brain_tree .php(67): Braintree\Transaction::sale(Array) 
     #4 [internal function]: Brain_tree-&gt;transaction() 
     #5 in 
<b>C:\xampp\htdocs\naya_admin\application\third_party\braintree\lib\Braintree\Ut il.php</b> on line 
    <b>343</b> 
     <br /> 
+0

Но он работает без биллинга. Параметры массива адресов ........ – rdkrosan

ответ

3

Полное раскрытие: я работаю в Брейнтри. Если у вас есть дополнительные вопросы, не стесняйтесь contact support.

Илан Гасанов прав, что вам необходимо передать параметры оплаты отдельно от данных кредитной карты в транзакционном вызове. Кроме того, вы должны заменить "city" with "locality", "state" with "region" и "country" with whichever country field you are storing in your database

$billing =[ 
    'firstName' =>mysql_real_escape_string($_POST['first_name']), 
    'lastName'=>mysql_real_escape_string($_POST['last_name']), 
    'streetAddress'=>mysql_real_escape_string($_POST['user_address']), 
    'locality'=>mysql_real_escape_string($_POST['user_city']), 
    'region'=>mysql_real_escape_string($_POST['user_state']), 
    'countryName' =>mysql_real_escape_string($_POST['user_country']), 
]; 

Кроме того, чтобы сохранить ваше бремя соответствия PCI низкий, я рекомендую passing a nonce to your server вместо кредитной карты.

3

Вам нужно отделить платежный адрес:

$card_info = [ 
    'cardholderName' =>mysql_real_escape_string($_POST['full_name']), 
    'number' =>mysql_real_escape_string($_POST['number']), 
    'expirationMonth' =>mysql_real_escape_string($_POST['expiry_month']), 
    'expirationYear' =>mysql_real_escape_string($_POST['expiry_year']), 
    'cvv' =>mysql_real_escape_string($_POST['card_cvv']), 
]; 

$billing =[ 
    'firstName' =>mysql_real_escape_string($_POST['first_name']), 
    'lastName'=>mysql_real_escape_string($_POST['last_name']), 
    'streetAddress'=>mysql_real_escape_string($_POST['user_address']), 
    'city'=>mysql_real_escape_string($_POST['user_city']), 
    'state'=>mysql_real_escape_string($_POST['user_state']), 
    'country' =>mysql_real_escape_string($_POST['user_country']), 

]; 

$result = Braintree_Transaction::sale(['amount'=>'4.99', 
    'creditCard'=>$card_info, 
    'billing' => $billing, 
    'options'=>['submitForSettlement' => true] 
]); 

См Braintree PHP API

+0

Я боюсь сказать, что это не сработало. – rdkrosan

Смежные вопросы