如何在 Authorize.net PHP SDK 中设置客户 ip 地址?

how to set customer ip address in Authorize.net PHP SDK?

我在我们的网站上使用 Authorize.net PHP SDK 进行信用卡支付。目前我正在将客户账单发送到客户名字、姓氏、地址、邮编、城市、州、国家和电子邮件等信息。 我还需要发送客户 IP 地址。请提出解决方案。 当前代码的一部分如下所示:

public function authorize_card($data) {
  // Create the payment data for a credit card
  $creditCard = new AnetAPI\CreditCardType();
  $creditCard->setCardNumber($data['card_no']);
  $creditCard->setExpirationDate($data['card_exp']);
  $creditCard->setCardCode($data['card_cvc']);
  
  $paymentCreditCard = new AnetAPI\PaymentType();
  $paymentCreditCard->setCreditCard($creditCard);
  
  //create a transaction
  $transactionRequestType = new AnetAPI\TransactionRequestType();
  $transactionRequestType->setTransactionType("authCaptureTransaction"); 
  $transactionRequestType->setAmount($data['amount']);
  $transactionRequestType->setPayment($paymentCreditCard);
  
  
  $billto = new AnetAPI\CustomerAddressType();
  $billto->setFirstName($data['bill_fname']);
  $billto->setLastName($data['bill_lname']);
  $billto->setAddress($data['bill_address']);
  $billto->setCity($data['bill_city']);
  $billto->setState($data['bill_state']);
  $billto->setZip($data['bill_zip']);
  $billto->setCountry($data['bill_country']);
  
  $bill_response = $transactionRequestType->setBillTo($billto);

  $request = new AnetAPI\CreateTransactionRequest();
  $request->setMerchantAuthentication($this->auth);
  $request->setRefId($this->refId);
  $request->setTransactionRequest($transactionRequestType);
  $controller = new AnetController\CreateTransactionController($request);
  $response = $controller->executeWithApiResponse($this->api_mode);
 
  if ($response != null) {
   $tresponse = $response->getTransactionResponse();
   
   if ($tresponse != null && ($tresponse->getResponseCode() == 1 ||      $tresponse->getResponseCode() == 253)) {
    $response_array = array();
    $response_array['auth_code'] = $tresponse->getAuthCode();
    $response_array['auth_transaction_id'] = $tresponse->getTransId();
    return $response_array;
   } else {
    $errors = $tresponse->geterrors();
    
    if (is_array($errors) && !empty($errors)) {
     return $errors[0]->geterrorText();
    } else {
     $message = $response->getMessages()->getMessage();
     return $message[0]->getText();
    }
   }
   
  } else {
   return "Charge Credit card Null response returned";
  }
}

其实我已经想通了。 autorizeNet php sdk 中提供了一种设置客户 ip 地址的方法。 方法是 setCustomerIP() 需要与 TransactionRequestType class 一起使用。 最终代码如下所示:

public function authorize_card($data) {
  // Create the payment data for a credit card
  $creditCard = new AnetAPI\CreditCardType();
  $creditCard->setCardNumber($data['card_no']);
  $creditCard->setExpirationDate($data['card_exp']);
  $creditCard->setCardCode($data['card_cvc']);
  
  $paymentCreditCard = new AnetAPI\PaymentType();
  $paymentCreditCard->setCreditCard($creditCard);
  
  //create a transaction
  $transactionRequestType = new AnetAPI\TransactionRequestType();
  $transactionRequestType->setTransactionType("authCaptureTransaction"); 
  $transactionRequestType->setAmount($data['amount']);
  $transactionRequestType->setPayment($paymentCreditCard);
    
    //Setting customer ip address
    $transactionRequestType->setCustomerIP($data['ip']);
  
  
  $billto = new AnetAPI\CustomerAddressType();
  $billto->setFirstName($data['bill_fname']);
  $billto->setLastName($data['bill_lname']);
  $billto->setAddress($data['bill_address']);
  $billto->setCity($data['bill_city']);
  $billto->setState($data['bill_state']);
  $billto->setZip($data['bill_zip']);
  $billto->setCountry($data['bill_country']);
  
  $bill_response = $transactionRequestType->setBillTo($billto);

  $request = new AnetAPI\CreateTransactionRequest();
  $request->setMerchantAuthentication($this->auth);
  $request->setRefId($this->refId);
  $request->setTransactionRequest($transactionRequestType);
  $controller = new AnetController\CreateTransactionController($request);
  $response = $controller->executeWithApiResponse($this->api_mode);
 
  if ($response != null) {
   $tresponse = $response->getTransactionResponse();
   
   if ($tresponse != null && ($tresponse->getResponseCode() == 1 || $tresponse->getResponseCode() == 253)) {
    $response_array = array();
    $response_array['auth_code'] = $tresponse->getAuthCode();
    $response_array['auth_transaction_id'] = $tresponse->getTransId();
    return $response_array;
   } else {
    $errors = $tresponse->geterrors();
    
    if (is_array($errors) && !empty($errors)) {
     return $errors[0]->geterrorText();
    } else {
     $message = $response->getMessages()->getMessage();
     return $message[0]->getText();
    }
   }
   
  } else {
   return "Charge Credit card Null response returned";
  }
}