PageRenderTime 51ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://gitlab.com/alexprowars/bitrix
PHP | 228 lines | 185 code | 35 blank | 8 comment | 33 complexity | 1b28758ab5542f6011d79825ab090961 MD5 | raw file
  1. <?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();?><?
  2. include_once(GetLangFileName(dirname(__FILE__)."/", "/payment.php"));
  3. include(dirname(__FILE__)."/common.php");
  4. $strErrorMessage = "";
  5. $bCanProcess = False;
  6. $bSuccessProcess = False;
  7. $year = date('Y');
  8. if ($_REQUEST["pay_this_order"] == "Y")
  9. {
  10. $bCanProcess = True;
  11. $INPUT_CARD_NUM = Trim($_REQUEST["ccard_num"]);
  12. if (!isset($INPUT_CARD_NUM) || $INPUT_CARD_NUM == '')
  13. $strErrorMessage .= GetMessage("AN_CC_NUM")." ";
  14. $INPUT_CARD_NUM = preg_replace("/[\D]+/", "", $INPUT_CARD_NUM);
  15. if ($INPUT_CARD_NUM == '')
  16. $strErrorMessage .= GetMessage("AN_CC_NUM")." ";
  17. $INPUT_CARD_EXP_MONTH = intval($_REQUEST["ccard_date1"]);
  18. if ($INPUT_CARD_EXP_MONTH < 1 || $INPUT_CARD_EXP_MONTH > 12)
  19. $strErrorMessage .= GetMessage("AN_CC_MONTH")." ";
  20. elseif (mb_strlen($INPUT_CARD_EXP_MONTH) < 2)
  21. $INPUT_CARD_EXP_MONTH = "0".$INPUT_CARD_EXP_MONTH;
  22. $INPUT_CARD_EXP_YEAR = intval($_REQUEST["ccard_date2"]);
  23. if ($INPUT_CARD_EXP_YEAR < $year)
  24. $strErrorMessage .= GetMessage("AN_CC_YEAR")." ";
  25. $INPUT_CARD_CODE = Trim($_REQUEST["ccard_code"]);
  26. if ($strErrorMessage <> '')
  27. $bCanProcess = False;
  28. }
  29. $ORDER_ID = intval($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["ID"]);
  30. if ($bCanProcess)
  31. {
  32. // Merchant Account Information
  33. $strPostQueryString = "x_version=3.1";
  34. $strPostQueryString .= "&x_login=".urlencode(CSalePaySystemAction::GetParamValue("PS_LOGIN"));
  35. $strPostQueryString .= "&x_tran_key=".urlencode(CSalePaySystemAction::GetParamValue("PS_TRANSACTION_KEY"));
  36. $strPostQueryString .= "&x_test_request=".(CSalePaySystemAction::GetParamValue("TEST_TRANSACTION") ? "TRUE" : "FALSE")."";
  37. // Gateway Response Configuration
  38. $strPostQueryString .= "&x_delim_data=True";
  39. $strPostQueryString .= "&x_relay_response=False";
  40. $strPostQueryString .= "&x_delim_char=,";
  41. $strPostQueryString .= "&x_encap_char=|";
  42. $arTmp = array("x_first_name" => "FIRST_NAME", "x_last_name" => "LAST_NAME",
  43. "x_company" => "COMPANY", "x_address" => "ADDRESS", "x_city" => "CITY",
  44. "x_state" => "STATE", "x_zip" => "ZIP", "x_country" => "COUNTRY",
  45. "x_phone" => "PHONE", "x_fax" => "FAX"
  46. );
  47. foreach ($arTmp as $key => $value)
  48. {
  49. if (($val = CSalePaySystemAction::GetParamValue($value)) !== False)
  50. $strPostQueryString .= "&".$key."=".urlencode($val);
  51. }
  52. // Additional Customer Data
  53. $strPostQueryString .= "&x_cust_id=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["USER_ID"]);
  54. $strPostQueryString .= "&x_customer_ip=".urlencode($_SERVER["REMOTE_ADDR"]);
  55. // Email Settings
  56. if (($val = CSalePaySystemAction::GetParamValue("EMAIL")) !== False)
  57. $strPostQueryString .= "&x_email=".urlencode($val);
  58. $strPostQueryString .= "&x_email_customer=FALSE";
  59. $strPostQueryString .= "&x_merchant_email=".urlencode(COption::GetOptionString("sale", "order_email", ""));
  60. // Invoice Information
  61. $strPostQueryString .= "&x_invoice_num=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["ID"]);
  62. $strPostQueryString .= "&x_description=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["DATE_INSERT"]);
  63. // Customer Shipping Address
  64. $arTmp = array("x_ship_to_first_name" => "SHIP_FIRST_NAME",
  65. "x_ship_to_last_name" => "SHIP_LAST_NAME", "x_ship_to_company" => "SHIP_COMPANY",
  66. "x_ship_to_address" => "SHIP_ADDRESS", "x_ship_to_city" => "SHIP_CITY",
  67. "x_ship_to_state" => "SHIP_STATE", "x_ship_to_zip" => "SHIP_ZIP",
  68. "x_ship_to_country" => "SHIP_COUNTRY"
  69. );
  70. foreach ($arTmp as $key => $value)
  71. {
  72. if (($val = CSalePaySystemAction::GetParamValue($value)) !== False)
  73. $strPostQueryString .= "&".$key."=".urlencode($val);
  74. }
  75. // Transaction Data
  76. $strPostQueryString .= "&x_amount=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["SHOULD_PAY"]);
  77. $strPostQueryString .= "&x_currency_code=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["CURRENCY"]);
  78. $strPostQueryString .= "&x_method=CC";
  79. $strPostQueryString .= "&x_type=AUTH_CAPTURE";
  80. $strPostQueryString .= "&x_recurring_billing=NO";
  81. $strPostQueryString .= "&x_card_num=".urlencode($INPUT_CARD_NUM);
  82. $strPostQueryString .= "&x_exp_date=".urlencode($INPUT_CARD_EXP_MONTH.$INPUT_CARD_EXP_YEAR); // MMYYYY
  83. $strPostQueryString .= "&x_card_code=".urlencode($INPUT_CARD_CODE);
  84. // Level 2 Data
  85. $strPostQueryString .= "&x_tax=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["TAX_VALUE"]);
  86. $strPostQueryString .= "&x_freight=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["PRICE_DELIVERY"]);
  87. $strResult = QueryGetData("secure.authorize.net", 443, "/gateway/transact.dll", $strPostQueryString, $errno, $errstr, "POST", "ssl://");
  88. $mass = explode("|,|", "|,".$strResult);
  89. $strHashValue = CSalePaySystemAction::GetParamValue("HASH_VALUE");
  90. if ($strHashValue <> '')
  91. {
  92. if (md5($strHashValue.(CSalePaySystemAction::GetParamValue("PS_LOGIN")).$mass[7].sprintf("%.2f", $GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["SHOULD_PAY"])) != mb_strtolower($mass[38]))
  93. {
  94. $mass = array();
  95. $mass[1] = 3;
  96. $mass[4] = "MD5 transaction signature is incorrect!";
  97. $mass[3] = 0;
  98. $mass[2] = 0;
  99. }
  100. }
  101. $strPS_STATUS = ((intval($mass[1])==1) ? "Y" : "N");
  102. $strPS_STATUS_CODE = $mass[3];
  103. if ($strPS_STATUS=="Y")
  104. $strPS_STATUS_DESCRIPTION = "Approval Code: ".$mass[5].(!empty($mass[7]) ? "; Transaction ID: ".$mass[7] : "");
  105. else
  106. {
  107. $strPS_STATUS_DESCRIPTION = (intval($mass[1])==2 ? "Declined" : "Error").": ".$mass[4]." (Reason Code ".$mass[3]." / Sub ".$mass[2].")";
  108. $strErrorMessage .= (intval($mass[1])==2 ? "Transaction was declined" : "Error while processing transaction").": ".$mass[4]." (".$mass[3]."/".$mass[2].")";
  109. }
  110. $strPS_STATUS_MESSAGE = "";
  111. if (!empty($mass[6]))
  112. $strPS_STATUS_MESSAGE .= "\nAVS Result: [".$mass[6]."] ".$arAVSErr[$mass[6]].";";
  113. if (!empty($mass[39]))
  114. $strPS_STATUS_MESSAGE .= "\nCard Code Result: [".$mass[39]."] ".$arCVVErr[$mass[39]].";";
  115. if (!empty($mass[40]))
  116. $strPS_STATUS_MESSAGE .= "\nCAVV: [".$mass[40]."] ".$arCAVVErr[$mass[40]].";";
  117. $strPS_SUM = $mass[10];
  118. $arFields = array(
  119. "PS_STATUS" => $strPS_STATUS,
  120. "PS_STATUS_CODE" => $strPS_STATUS_CODE,
  121. "PS_STATUS_DESCRIPTION" => $strPS_STATUS_DESCRIPTION,
  122. "PS_STATUS_MESSAGE" => $strPS_STATUS_MESSAGE,
  123. "PS_SUM" => $strPS_SUM,
  124. "PS_CURRENCY" => $GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["CURRENCY"],
  125. "PS_RESPONSE_DATE" => Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG)))
  126. );
  127. if (CSalePaySystemAction::GetParamValue("AUTO_PAY") === 'Y')
  128. {
  129. $arOrder = CSaleOrder::GetByID($ORDER_ID);
  130. if ($arOrder["PRICE"] == $arFields["PS_SUM"] && $arFields["PS_STATUS"] == "Y")
  131. {
  132. CSaleOrder::PayOrder($arOrder["ID"], "Y");
  133. }
  134. }
  135. CSaleOrder::Update($ORDER_ID, $arFields);
  136. if ($strErrorMessage == '')
  137. $bSuccessProcess = True;
  138. }
  139. if ($bSuccessProcess)
  140. {
  141. ?><div class="alert alert-success" role="alert"><?=GetMessage("AN_SUCC")?></div><?
  142. }
  143. else
  144. {
  145. if ($strErrorMessage <> '')
  146. {
  147. ?><div class="alert alert-danger" role="alert"><?= $strErrorMessage ?></div><?
  148. }
  149. ?>
  150. <form action="" method="post">
  151. <div class="form-group row">
  152. <label for="ccardNumber" class="col-sm-6 col-form-label text-sm-right"><?=GetMessage("AN_CC")?></label>
  153. <div class="col-sm-6">
  154. <input type="text" id="ccardNumber" name="ccard_num" size="30" value="<?= htmlspecialcharsbx($_REQUEST["ccard_num"]) ?>" class="form-control inputtext">
  155. </div>
  156. </div>
  157. <div class="form-group row">
  158. <label for="ccardDate1" class="col-sm-6 col-form-label text-sm-right"><?=GetMessage("AN_CC_DATE")?></label>
  159. <div class="col-auto">
  160. <select name="ccard_date1" class="inputselect form-control" id="ccardDate1">
  161. <?for ($i = 1; $i <= 12; $i++):?>
  162. <option value="<?= $i ?>"<?= (($i==$_REQUEST["ccard_date1"]) ? "selected" : "") ?>><?= $i ?></option>
  163. <?endfor;?>
  164. </select>
  165. </div>
  166. <div class="col-auto col-form-label">/</div>
  167. <div class="col-auto">
  168. <select name="ccard_date2" class="inputselect form-control">
  169. <?for ($i = $year; $i <= $year+5; $i++):?>
  170. <option value="<?= $i ?>"<?= (($i==$_REQUEST["ccard_date2"]) ? "selected" : "") ?>><?= $i ?></option>
  171. <?endfor;?>
  172. </select>
  173. </div>
  174. </div>
  175. <div class="form-group row">
  176. <label for="ccardCode" class="col-sm-6 col-form-label text-sm-right"><?=GetMessage("AN_CC_CVV2")?></label>
  177. <div class="col-auto">
  178. <input type="text" id="ccardCode" name="ccard_code" size="5" value="<?= htmlspecialcharsbx($_REQUEST["ccard_code"]) ?>" class="inputtext form-control">
  179. </div>
  180. </div>
  181. <div class="form-group row">
  182. <div class="col-sm-6 col-form-label text-sm-right"></div>
  183. <div class="col-auto">
  184. <input type="hidden" name="CurrentStep" value="<?= intval($GLOBALS["CurrentStep"]) ?>">
  185. <input type="hidden" name="ORDER_ID" value="<?= $ORDER_ID ?>">
  186. <input type="hidden" name="pay_this_order" value="Y">
  187. <input type="submit" value="<?=GetMessage("AN_CC_BUTTON")?>" class="inputbutton btn btn-primary">
  188. </div>
  189. </div>
  190. </form>
  191. <?
  192. }
  193. ?>