1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
handler.php
См. документацию.
1<?php
2
3namespace Sale\Handlers\PaySystem;
4
5use Bitrix\Main\Application;
6use Bitrix\Main\Error;
7use Bitrix\Main\Localization\Loc;
8use Bitrix\Main\Request;
9use Bitrix\Main\Type\DateTime;
10use Bitrix\Main\Web\HttpClient;
11use Bitrix\Sale\PaySystem;
12use Bitrix\Sale\Payment;
13use Bitrix\Sale\PaySystem\ServiceResult;
14
15Loc::loadMessages(__FILE__);
16
17class AuthorizeHandler extends PaySystem\BaseServiceHandler
18{
24 public function initiatePay(Payment $payment, Request $request = null)
25 {
26 if ($request === null)
27 {
28 $instance = Application::getInstance();
29 $context = $instance->getContext();
30 $request = $context->getRequest();
31 }
32
33 if ($request->get('ccard_num') !== null)
34 {
35 $serviceResult = new ServiceResult();
37 $paymentCollection = $payment->getCollection();
38
40 $order = $paymentCollection->getOrder();
41
43
44 $queryString = "x_version=3.1";
45 $queryString .= "&x_login=".urlencode($params["AUTHORIZE_LOGIN"]);
46 $queryString .= "&x_tran_key=".urlencode($params["AUTHORIZE_TRANSACTION_KEY"]);
47 $queryString .= "&x_test_request=".($this->isTestMode($payment) ? "TRUE" : "FALSE");
48
49 $queryString .= "&x_delim_data=True";
50 $queryString .= "&x_relay_response=False";
51 $queryString .= "&x_delim_char=,";
52 $queryString .= "&x_encap_char=|";
53
54 $arTmp = array(
55 "x_first_name" => "BUYER_PERSON_NAME_FIRST", "x_last_name" => "BUYER_PERSON_LAST_NAME",
56 "x_company" => "BUYER_PERSON_COMPANY", "x_address" => "BUYER_PERSON_ADDRESS", "x_city" => "BUYER_PERSON_CITY",
57 "x_state" => "BUYER_PERSON_STATE", "x_zip" => "BUYER_PERSON_ZIP", "x_country" => "BUYER_PERSON_COUNTRY",
58 "x_phone" => "BUYER_PERSON_PHONE", "x_fax" => "BUYER_PERSON_FAX"
59 );
60 foreach ($arTmp as $key => $value)
61 {
62 if (array_key_exists($value, $params))
63 $queryString .= "&".$key."=".urlencode($params[$key]);
64 }
65
66 $queryString .= "&x_cust_id=".urlencode($GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["USER_ID"]);
67 $queryString .= "&x_customer_ip=".urlencode($_SERVER["REMOTE_ADDR"]);
68
69 if (array_key_exists('BUYER_PERSON_EMAIL', $params))
70 $queryString .= "&x_email=".urlencode($params['BUYER_PERSON_EMAIL']);
71
72 $queryString .= "&x_email_customer=FALSE";
73 $queryString .= "&x_merchant_email=".urlencode(\COption::GetOptionString("sale", "order_email", ""));
74
75 $queryString .= "&x_invoice_num=".urlencode($params['PAYMENT_ID']);
76 $queryString .= "&x_description=".urlencode($payment->getField('DATE_BILL'));
77
78 $arTmp = array(
79 "x_ship_to_first_name" => "SHIP_BUYER_PERSON_NAME_FIRST", "x_ship_to_last_name" => "SHIP_BUYER_PERSON_NAME_LAST",
80 "x_ship_to_company" => "SHIP_BUYER_PERSON_COMPANY", "x_ship_to_address" => "SHIP_BUYER_PERSON_ADDRESS",
81 "x_ship_to_city" => "SHIP_BUYER_PERSON_CITY", "x_ship_to_state" => "SHIP_BUYER_PERSON_STATE",
82 "x_ship_to_zip" => "SHIP_BUYER_PERSON_ZIP", "x_ship_to_country" => "SHIP_BUYER_PERSON_COUNTRY"
83 );
84 foreach ($arTmp as $key => $value)
85 {
86 if (array_key_exists($value, $params))
87 $queryString .= "&".$key."=".urlencode($params[$key]);
88 }
89
90 $queryString .= "&x_amount=".urlencode($params["PAYMENT_SHOULD_PAY"]);
91 $queryString .= "&x_currency_code=".urlencode($payment->getField("CURRENCY"));
92 $queryString .= "&x_method=CC";
93 $queryString .= "&x_type=AUTH_CAPTURE";
94 $queryString .= "&x_recurring_billing=NO";
95 $queryString .= "&x_card_num=".urlencode($request->get('ccard_num'));
96 $queryString .= "&x_exp_date=".urlencode($request->get('ccard_date1').$request->get('ccard_date2'));
97 $queryString .= "&x_card_code=".urlencode($request->get('ccard_code'));
98
99 $queryString .= "&x_tax=".urlencode($order->getTaxValue());
100 $queryString .= "&x_freight=".urlencode($order->getDeliveryPrice());
101
102 $http = new HttpClient();
103 $result = $http->post($this->getUrl($payment, 'pay'), $queryString);
104 if ($result)
105 {
106 $mass = explode("|,|", "|,".$result);
107
108 $hashValue = $params["AUTHORIZE_SECRET_KEY"];
109 if ($hashValue <> '')
110 {
111 if (md5($hashValue.($params["AUTHORIZE_LOGIN"]).$mass[7].sprintf("%.2f", $params["PAYMENT_SHOULD_PAY"])) != mb_strtolower($mass[38]))
112 {
113 $mass = array();
114 $mass[1] = 3;
115 $mass[4] = "MD5 transaction signature is incorrect!";
116 $mass[3] = 0;
117 $mass[2] = 0;
118 }
119 }
120
121 $psStatus = ((int)$mass[1] == 1) ? "Y" : "N";
122 $psStatusCode = $mass[3];
123 if ($psStatus == "Y")
124 {
125 $psStatusDescription = "Approval Code: ".$mass[5].(!empty($mass[7]) ? "; Transaction ID: ".$mass[7] : "");
126 }
127 else
128 {
129 $psStatusDescription = (int)($mass[1]) == 2 ? "Declined" : "Error";
130 $psStatusDescription .= ": ".$mass[4]." (Reason Code ".$mass[3]." / Sub ".$mass[2].")";
131
132 $errorMsg = ((int)$mass[1] == 2) ? "Transaction was declined" : "Error while processing transaction";
133 $errorMsg .= ": ".$mass[4]." (".$mass[3]."/".$mass[2].")";
134
135 $serviceResult->addError(new Error($errorMsg));
136 }
137
138 $psStatusMsg = "";
139 if (!empty($mass[6]))
140 $psStatusMsg .= "\nAVS Result: [".$mass[6]."] ".Loc::getMessage("AN_AVS_".$mass[6]).";";
141
142 if (!empty($mass[39]))
143 $psStatusMsg .= "\nCard Code Result: [".$mass[39]."] ".Loc::getMessage('AN_CVV_'.$mass[39]).";";
144
145 if (!empty($mass[40]))
146 $psStatusMsg .= "\nCAVV: [".$mass[40]."] ".Loc::getMessage('AN_CAVV_'.$mass[40]).";";
147
148 $psData = array(
149 "PS_STATUS" => $psStatus,
150 "PS_STATUS_CODE" => $psStatusCode,
151 "PS_STATUS_DESCRIPTION" => $psStatusDescription,
152 "PS_STATUS_MESSAGE" => $psStatusMsg,
153 "PS_SUM" => $mass[10],
154 "PS_CURRENCY" => $GLOBALS["SALE_INPUT_PARAMS"]["ORDER"]["CURRENCY"],
155 "PS_RESPONSE_DATE" => new DateTime()
156 );
157 $serviceResult->setPsData($psData);
158
159 foreach ($http->getError() as $code => $error)
160 {
161 $serviceResult->addError(new Error($error, $code));
162 }
163 }
164
165 return $serviceResult;
166 }
167
168 $this->setExtraParams([
169 'PAYMENT_ID' => $payment->getId(),
170 'PAYSYSTEM_ID' => $this->service->getField('ID'),
171 ]);
172 return $this->showTemplate($payment, "template");
173 }
174
178 public function getCurrencyList()
179 {
180 return array();
181 }
182
186 protected function getUrlList()
187 {
188 return array(
189 'pay' => 'https://secure.authorize.net/gateway/transact.dll'
190 );
191 }
192
193}
194
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
getUrl(Payment $payment=null, $action)
Определения baseservicehandler.php:343
initiatePay(Payment $payment, Request $request=null)
showTemplate(Payment $payment=null, $template='')
Определения baseservicehandler.php:59
getParamsBusValue(Payment $payment=null)
Определения baseservicehandler.php:157
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
$context
Определения csv_new_setup.php:223
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
$GLOBALS['____1690880296']
Определения license.php:1
trait Error
Определения error.php:11
$payment
Определения payment.php:14
$order
Определения payment.php:8
$paymentCollection
Определения payment.php:11
if(intval($iTestTransaction) > 0) $arTmp
Определения payment.php:22
$instance
Определения ps_b24_final.php:14
if(empty($signedUserToken)) $key
Определения quickway.php:257
$errorMsg
Определения refund.php:16
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$error
Определения subscription_card_product.php:20