【问题标题】:Error while integrating Braintree php集成 Braintree php 时出错
【发布时间】:2015-11-23 11:54:15
【问题描述】:

我在我的 codeigniter 项目中使用 Braintree 处理信用卡支付,Braintree_Transaction::sale 抛出 invalid argument exceptioninvalid keys帐单地址参数的消息。但我不认为有任何验证错误。我想要做的可以简化如下:

$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 />

【问题讨论】:

  • 但是没有 billingAddress 数组参数也可以工作......

标签: php codeigniter braintree


【解决方案1】:

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

Ilan Hasanov 是正确的,您需要在交易调用中将计费参数与信用卡详细信息分开传递。另外,你应该替换"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 代替信用卡详细信息。

【讨论】:

    【解决方案2】:

    您需要单独的帐单地址:

        $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

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 1970-01-01
      • 2018-09-30
      • 2016-05-06
      • 2014-12-13
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多