PageRenderTime 33ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/sale/payment/authorizenet/action.php

https://gitlab.com/alexprowars/bitrix
PHP | 157 lines | 104 code | 28 blank | 25 comment | 22 complexity | c0c55fa8bc065355aaa8c15036703916 MD5 | raw file
  1. <?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();?><?
  2. include_once(GetLangFileName(dirname(__FILE__)."/", "/payment.php"));
  3. // Input:
  4. // $SALE_INPUT_PARAMS - Array of payment parameters
  5. // $INPUT_CARD_TYPE - Type of credit card
  6. // $INPUT_CARD_NUM - Number of credit card
  7. // $INPUT_CARD_EXP_MONTH - Expiration month of credit card
  8. // $INPUT_CARD_EXP_YEAR - Expiration year of credit card
  9. // $INPUT_CARD_CODE - CVC2 of credit card
  10. // $INPUT_SUM - Payment sum
  11. // $INPUT_CURRENCY - Currency of payment sum
  12. // Output:
  13. // $OUTPUT_ERROR_MESSAGE - Error message
  14. // $OUTPUT_STATUS - Payment status
  15. // $OUTPUT_STATUS_CODE - Payment status code
  16. // $OUTPUT_STATUS_DESCRIPTION - Payment status description
  17. // $OUTPUT_STATUS_MESSAGE - Payment system message
  18. // $OUTPUT_SUM - Paid sum
  19. // $OUTPUT_CURRENCY - Currency of paid sum
  20. // $OUTPUT_RESPONSE_DATE - Date
  21. include(dirname(__FILE__)."/common.php");
  22. $strErrorMessage = "";
  23. $INPUT_CARD_NUM = preg_replace("/[\D]+/", "", $INPUT_CARD_NUM);
  24. if ($INPUT_CARD_NUM == '')
  25. $strErrorMessage .= GetMessage("AN_CC_NUM")." ";
  26. $INPUT_CARD_CODE = preg_replace("[\D]+", "", $INPUT_CARD_CODE);
  27. $INPUT_CARD_EXP_MONTH = intval($INPUT_CARD_EXP_MONTH);
  28. if ($INPUT_CARD_EXP_MONTH < 1 || $INPUT_CARD_EXP_MONTH > 12)
  29. $strErrorMessage .= GetMessage("AN_CC_MONTH")." ";
  30. elseif (mb_strlen($INPUT_CARD_EXP_MONTH) < 2)
  31. $INPUT_CARD_EXP_MONTH = "0".$INPUT_CARD_EXP_MONTH;
  32. $INPUT_CARD_EXP_YEAR = intval($INPUT_CARD_EXP_YEAR);
  33. if ($INPUT_CARD_EXP_YEAR < 2005)
  34. $strErrorMessage .= GetMessage("AN_CC_YEAR")." ";
  35. $INPUT_SUM = str_replace(",", ".", $INPUT_SUM);
  36. $INPUT_SUM = DoubleVal($INPUT_SUM);
  37. if ($INPUT_SUM <= 0)
  38. $strErrorMessage .= GetMessage("AN_CC_SUM")." ";
  39. $INPUT_CURRENCY = Trim($INPUT_CURRENCY);
  40. if ($INPUT_CURRENCY == '')
  41. $strErrorMessage .= GetMessage("AN_CC_CURRENCY")." ";
  42. $OUTPUT_ERROR_MESSAGE = $strErrorMessage;
  43. if ($strErrorMessage == '')
  44. {
  45. // Merchant Account Information
  46. $strPostQueryString = "x_version=3.1";
  47. $strPostQueryString .= "&x_login=".urlencode(CSalePaySystemAction::GetParamValue("PS_LOGIN"));
  48. $strPostQueryString .= "&x_tran_key=".urlencode(CSalePaySystemAction::GetParamValue("PS_TRANSACTION_KEY"));
  49. $strPostQueryString .= "&x_test_request=".(CSalePaySystemAction::GetParamValue("TEST_TRANSACTION") ? "TRUE" : "FALSE")."";
  50. // Gateway Response Configuration
  51. $strPostQueryString .= "&x_delim_data=True";
  52. $strPostQueryString .= "&x_relay_response=False";
  53. $strPostQueryString .= "&x_delim_char=,";
  54. $strPostQueryString .= "&x_encap_char=|";
  55. $arTmp = array("x_first_name" => "FIRST_NAME", "x_last_name" => "LAST_NAME",
  56. "x_company" => "COMPANY", "x_address" => "ADDRESS", "x_city" => "CITY",
  57. "x_state" => "STATE", "x_zip" => "ZIP", "x_country" => "COUNTRY",
  58. "x_phone" => "PHONE", "x_fax" => "FAX"
  59. );
  60. foreach ($arTmp as $key => $value)
  61. {
  62. if (($val = CSalePaySystemAction::GetParamValue($value)) !== False)
  63. $strPostQueryString .= "&".$key."=".urlencode($val);
  64. }
  65. // Additional Customer Data
  66. $strPostQueryString .= "&x_cust_id=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["USER_ID"]);
  67. if (($val = CSalePaySystemAction::GetParamValue("REMOTE_ADDR")) !== False)
  68. $strPostQueryString .= "&x_customer_ip=".urlencode($val);
  69. // Email Settings
  70. if (($val = CSalePaySystemAction::GetParamValue("EMAIL")) !== False)
  71. $strPostQueryString .= "&x_email=".urlencode($val);
  72. $strPostQueryString .= "&x_email_customer=FALSE";
  73. $strPostQueryString .= "&x_merchant_email=".urlencode(COption::GetOptionString("sale", "order_email", ""));
  74. // Invoice Information
  75. $strPostQueryString .= "&x_invoice_num=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["ID"]);
  76. $strPostQueryString .= "&x_description=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["DATE_INSERT"]);
  77. // Customer Shipping Address
  78. $arTmp = array("x_ship_to_first_name" => "SHIP_FIRST_NAME",
  79. "x_ship_to_last_name" => "SHIP_LAST_NAME", "x_ship_to_company" => "SHIP_COMPANY",
  80. "x_ship_to_address" => "SHIP_ADDRESS", "x_ship_to_city" => "SHIP_CITY",
  81. "x_ship_to_state" => "SHIP_STATE", "x_ship_to_zip" => "SHIP_ZIP",
  82. "x_ship_to_country" => "SHIP_COUNTRY"
  83. );
  84. foreach ($arTmp as $key => $value)
  85. {
  86. if (($val = CSalePaySystemAction::GetParamValue($value)) !== False)
  87. $strPostQueryString .= "&".$key."=".urlencode($val);
  88. }
  89. // Transaction Data
  90. $strPostQueryString .= "&x_amount=".$INPUT_SUM;
  91. $strPostQueryString .= "&x_currency_code=".$INPUT_CURRENCY;
  92. $strPostQueryString .= "&x_method=CC";
  93. $strPostQueryString .= "&x_type=AUTH_CAPTURE";
  94. $strPostQueryString .= "&x_recurring_billing=NO";
  95. $strPostQueryString .= "&x_card_num=".urlencode($INPUT_CARD_NUM);
  96. $strPostQueryString .= "&x_exp_date=".urlencode($INPUT_CARD_EXP_MONTH.$INPUT_CARD_EXP_YEAR); // MMYYYY
  97. $strPostQueryString .= "&x_card_code=".urlencode($INPUT_CARD_CODE);
  98. $strResult = QueryGetData("secure.authorize.net", 443, "/gateway/transact.dll", $strPostQueryString, $errno, $errstr, "POST", "ssl://");
  99. $mass = explode("\|,\|", "|,".$strResult);
  100. $hashValue = CSalePaySystemAction::GetParamValue("HASH_VALUE");
  101. if ($hashValue <> '')
  102. {
  103. if (md5($hashValue.(CSalePaySystemAction::GetParamValue("PS_LOGIN")).$mass[7].$INPUT_SUM) != mb_strtolower($mass[38]))
  104. {
  105. $mass = array();
  106. $mass[1] = 3;
  107. $mass[4] = "MD5 transaction signature is incorrect!";
  108. $mass[3] = 0;
  109. $mass[2] = 0;
  110. }
  111. }
  112. $OUTPUT_STATUS = ((intval($mass[1])==1) ? "Y" : "N");
  113. $OUTPUT_STATUS_CODE = $mass[3];
  114. if ($OUTPUT_STATUS=="Y")
  115. $OUTPUT_STATUS_DESCRIPTION = "Approval Code: ".$mass[5].(!empty($mass[7]) ? "; Transaction ID: ".$mass[7] : "");
  116. else
  117. $OUTPUT_STATUS_DESCRIPTION = (intval($mass[1])==2 ? "Declined" : "Error").": ".$mass[4]." (Reason Code ".$mass[3]." / Sub ".$mass[2].")";
  118. $OUTPUT_STATUS_MESSAGE = "";
  119. if (!empty($mass[6]))
  120. $OUTPUT_STATUS_MESSAGE .= "\nAVS Result: [".$mass[6]."] ".$arAVSErr[$mass[6]].";";
  121. if (!empty($mass[39]))
  122. $OUTPUT_STATUS_MESSAGE .= "\nCard Code Result: [".$mass[39]."] ".$arCVVErr[$mass[39]].";";
  123. if (!empty($mass[40]))
  124. $OUTPUT_STATUS_MESSAGE .= "\nCAVV: [".$mass[40]."] ".$arCAVVErr[$mass[40]].";";
  125. $OUTPUT_SUM = $mass[10];
  126. $OUTPUT_CURRENCY = $INPUT_CURRENCY;
  127. $OUTPUT_RESPONSE_DATE = Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG)));
  128. }
  129. ?>