1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
pre_payment.php
См. документацию.
1<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();?><?
2
3use Bitrix\Sale\Order;
4
5include(GetLangFileName(dirname(__FILE__)."/", "/payment.php"));
6
8{
9 var $username = "";
10 var $pwd = "";
11 var $signature = "";
12 var $currency = "";
13 var $serverName = "";
14 var $testMode = true;
15 var $domain = "";
16 var $token = "";
17 var $payerId = "";
18 var $encoding = "";
19 var $version = "";
20 var $notifyUrl = "";
21 var $taxAmount = "";
23
24 function init()
25 {
26 $this->username = CSalePaySystemAction::GetParamValue("PAYPAL_USER");
27 $this->pwd = CSalePaySystemAction::GetParamValue("PAYPAL_PWD");
28 $this->signature = CSalePaySystemAction::GetParamValue("PAYPAL_SIGNATURE");
29 $this->currency = CSalePaySystemAction::GetParamValue("PAYMENT_CURRENCY");
30 $this->testMode = (CSalePaySystemAction::GetParamValue("PS_IS_TEST") == "Y");
31 $this->notifyUrl = CSalePaySystemAction::GetParamValue("PAYPAL_NOTIFY_URL");
32
33 if($this->currency == '')
34 $this->currency = CSaleLang::GetLangCurrency(SITE_ID);
35
36 if($this->testMode)
37 $this->domain = "sandbox.";
38 if($_REQUEST["token"] <> '')
39 $this->token = $_REQUEST["token"];
40 if($_REQUEST["PayerID"] <> '')
41 $this->payerId = $_REQUEST["PayerID"];
42 $this->version = "98.0";
43
44 $dbSite = CSite::GetByID(SITE_ID);
45 $arSite = $dbSite->Fetch();
46 $this->serverName = $arSite["SERVER_NAME"];
47 if ($this->serverName == '')
48 {
49 if (defined("SITE_SERVER_NAME") && SITE_SERVER_NAME <> '')
50 $this->serverName = SITE_SERVER_NAME;
51 else
52 $this->serverName = COption::GetOptionString("main", "server_name", "www.bitrixsoft.com");
53 }
54
55 $this->serverName = (CMain::IsHTTPS() ? "https" : "http")."://".$this->serverName;
56
57 if($this->username == '' || $this->username == '' || $this->username == '')
58 {
59 $GLOBALS["APPLICATION"]->ThrowException("CSalePaySystempaypal: init error", "CSalePaySystempaypal_init_error");
60 return false;
61 }
62 return true;
63 }
64
66 {
67 if(LANGUAGE_ID == "ru")
68 $imgSrc = "//www.1c-bitrix.ru/download/sale/paypal.jpg";
69 elseif(LANGUAGE_ID == "de")
70 $imgSrc = "//www.paypal.com/de_DE/i/btn/btn_xpressCheckout.gif";
71 else
72 $imgSrc = "//www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif";
73 return "<input name=\"paypalbutton\" style=\"padding-top:7px;\" type=\"image\" src=\"".$imgSrc."\" value=\"".GetMessage("PPL_BUTTON")."\" onclick='var cp=BX(\"coupon\"); if (cp) cp.disabled=true;'>";
74 }
75
76 function BasketButtonAction($orderData = array())
77 {
78 global $APPLICATION;
79 if (array_key_exists('paypalbutton_x', $_POST) && array_key_exists('paypalbutton_y', $_POST))
80 {
81 $url = "https://api-3t.".$this->domain."paypal.com/nvp";
82
84 "METHOD" => "SetExpressCheckout",
85 "VERSION" => "98.0",
86 "USER" => $this->username,
87 "PWD" => $this->pwd,
88 "SIGNATURE" => $this->signature,
89 "PAYMENTREQUEST_0_AMT" => number_format($orderData["AMOUNT"], 2, ".", ""),
90 "PAYMENTREQUEST_0_CURRENCYCODE" => $this->currency,
91 "RETURNURL" => $this->serverName.$orderData["PATH_TO_ORDER"],
92 "CANCELURL" => $this->serverName.$APPLICATION->GetCurPageParam("paypal=Y&paypal_error=Y", array("paypal", "paypal_error")),
93 "PAYMENTREQUEST_0_PAYMENTACTION" => "Authorization",
94 "PAYMENTREQUEST_0_DESC" => "Order payment for ".$this->serverName,
95 "LOCALECODE" => ToUpper(LANGUAGE_ID),
96 "buttonsource" => "Bitrix_Cart",
97 );
98
99 if(!empty($orderData["BASKET_ITEMS"]))
100 {
101 $arFields["PAYMENTREQUEST_0_ITEMAMT"] = number_format($orderData["AMOUNT"], 2, ".", "");
102 foreach($orderData["BASKET_ITEMS"] as $k => $val)
103 {
104 $arFields["L_PAYMENTREQUEST_0_NAME".$k] = $APPLICATION->ConvertCharset($val["NAME"], SITE_CHARSET, "utf-8");
105 $arFields["L_PAYMENTREQUEST_0_AMT".$k] = number_format($val["PRICE"], 2, ".", "");
106 $arFields["L_PAYMENTREQUEST_0_QTY".$k] = $val["QUANTITY"];
107 }
108 }
109
110 $arFields["RETURNURL"] .= ((mb_strpos($arFields["RETURNURL"], "?") === false) ? "?" : "&")."paypal=Y";
111
112 $ht = new \Bitrix\Main\Web\HttpClient(array("version" => "1.1"));
113 if($res = @$ht->post($url, $arFields))
114 {
115 $result = $this->parseResult($res);
116
117 if($result["TOKEN"] <> '')
118 {
119 $url = "https://www.".$this->domain."paypal.com/webscr?cmd=_express-checkout&token=".$result["TOKEN"];
120 if($orderData["ORDER_REQUEST"] == "Y")
121 return $url;
123 }
124 else
125 {
126 $GLOBALS["APPLICATION"]->ThrowException($result['L_SHORTMESSAGE0'].' : '.$result['L_LONGMESSAGE0'], "CSalePaySystemPrePayment_action_error");
127 return false;
128 }
129 }
130 else
131 {
132 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("PPL_ERROR"), "CSalePaySystemPrePayment_action_error");
133 return false;
134 }
135 }
136
137 return true;
138 }
139
141 {
142 $result = "
143 <input type=\"hidden\" name=\"paypal\" value=\"Y\">
144 <input type=\"hidden\" name=\"token\" value=\"".htmlspecialcharsbx($this->token)."\">
145 <input type=\"hidden\" name=\"PayerID\" value=\"".htmlspecialcharsbx($this->payerId)."\">
146 ";
147
148 if($this->token <> '')
149 $result .= "<span style='color: green'>".GetMessage("PPL_PREAUTH_TEXT")."<br /><br /></span>";
150 return $result;
151 }
152
153 function isAction()
154 {
155 if($_REQUEST["paypal"] == "Y" && $this->token <> '')
156 return true;
157 return false;
158 }
159
161 {
162 global $APPLICATION;
163
164 $keyarray = array();
165 $res1= explode("&", $data);
166 foreach($res1 as $res2)
167 {
168 list($key,$val) = explode("=", $res2);
169 $keyarray[urldecode($key)] = urldecode($val);
170 if($this->encoding <> '')
171 $keyarray[urldecode($key)] = $APPLICATION->ConvertCharset($keyarray[urldecode($key)], $this->encoding, SITE_CHARSET);
172 }
173 return $keyarray;
174
175 }
176
177 function getProps()
178 {
179 if($this->token <> '')
180 {
181 $url = "https://api-3t.".$this->domain."paypal.com/nvp";
183 "METHOD" => "GetExpressCheckoutDetails",
184 "VERSION" => $this->version,
185 "USER" => $this->username,
186 "PWD" => $this->pwd,
187 "SIGNATURE" => $this->signature,
188 "TOKEN" => $this->token,
189 "buttonsource" => "Bitrix_Cart",
190 );
191
192 $ht = new \Bitrix\Main\Web\HttpClient(array("version" => "1.1"));
193 if($res = $ht->post($url, $arFields))
194 {
195 $result = $this->parseResult($res);
196 if($result["ACK"] == "Success")
197 {
199 "FIO" => $result["FIRSTNAME"]." ".$result["LASTNAME"],
200 "EMAIL" => $result["EMAIL"],
201 "ZIP" => $result["SHIPTOZIP"],
202 "ADDRESS" => $result["SHIPTOSTREET"]." ".$result["SHIPTOSTREET2"],
203 "COUNTRY" => $result["SHIPTOCOUNTRYNAME"],
204 "STATE" => $result["SHIPTOSTATE"],
205 "CITY" => $result["SHIPTOCITY"],
206 "LOCATION" => $result["SHIPTOCITY"],
207 "PP_SOURCE" => $result,
208 );
209 return $arResult;
210 }
211 }
212 }
213 }
214
215 function payOrder($orderData = array())
216 {
217 if($this->token <> '')
218 {
219 global $APPLICATION;
220 $url = "https://api-3t.".$this->domain."paypal.com/nvp";
222 "METHOD" => "GetExpressCheckoutDetails",
223 "VERSION" => $this->version,
224 "USER" => $this->username,
225 "PWD" => $this->pwd,
226 "SIGNATURE" => $this->signature,
227 "TOKEN" => $this->token,
228 "buttonsource" => "Bitrix_Cart",
229 );
230
231 $ht = new \Bitrix\Main\Web\HttpClient(array("version" => "1.1"));
232 if($res = $ht->post($url, $arFields))
233 {
234 $result = $this->parseResult($res);
235 if($result["ACK"] == "Success" && in_array($result["CHECKOUTSTATUS"], array("PaymentActionNotInitiated")))
236 {
237 $arFields["METHOD"] = "DoExpressCheckoutPayment";
238 $arFields["PAYERID"] = $this->payerId;
239 $arFields["PAYMENTACTION"] = "Sale";
240 $arFields["PAYMENTREQUEST_0_AMT"] = number_format($this->orderAmount, 2, ".", "");
241 $arFields["PAYMENTREQUEST_0_CURRENCYCODE"] = $this->currency;
242 $arFields["PAYMENTREQUEST_0_DESC"] = "Order #".$this->orderId;
243 $arFields["PAYMENTREQUEST_0_NOTETEX"] = "Order #".$this->orderId;
244 $arFields["PAYMENTREQUEST_0_INVNUM"] = $this->orderId;
245 $arFields["PAYMENTREQUEST_0_CUSTOM"] = $this->paymentId;
246
247 if(DoubleVal($this->deliveryAmount) > 0)
248 {
249 $arFields["PAYMENTREQUEST_0_SHIPPINGAMT"] = number_format($this->deliveryAmount, 2, ".", "");
250 }
251 $orderProps = $this->getProps();
252
253 if(!empty($orderProps))
254 {
255 $arFields["PAYMENTREQUEST_0_SHIPTONAME"] = $APPLICATION->ConvertCharset($orderProps["PP_SOURCE"]["PAYMENTREQUEST_0_SHIPTONAME"], SITE_CHARSET, "utf-8");
256 $arFields["PAYMENTREQUEST_0_SHIPTOSTREET"] = $APPLICATION->ConvertCharset($orderProps["PP_SOURCE"]["PAYMENTREQUEST_0_SHIPTOSTREET"], SITE_CHARSET, "utf-8");
257 $arFields["PAYMENTREQUEST_0_SHIPTOSTREET2"] = $APPLICATION->ConvertCharset($orderProps["PP_SOURCE"]["PAYMENTREQUEST_0_SHIPTOSTREET2"], SITE_CHARSET, "utf-8");
258 $arFields["PAYMENTREQUEST_0_SHIPTOCITY"] = $APPLICATION->ConvertCharset($orderProps["PP_SOURCE"]["PAYMENTREQUEST_0_SHIPTOCITY"], SITE_CHARSET, "utf-8");
259 $arFields["PAYMENTREQUEST_0_SHIPTOSTATE"] = $APPLICATION->ConvertCharset($orderProps["PP_SOURCE"]["PAYMENTREQUEST_0_SHIPTOSTATE"], SITE_CHARSET, "utf-8");
260 $arFields["PAYMENTREQUEST_0_SHIPTOZIP"] = $orderProps["PP_SOURCE"]["PAYMENTREQUEST_0_SHIPTOZIP"];
261 $arFields["PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE"] = $APPLICATION->ConvertCharset($orderProps["PP_SOURCE"]["PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE"], SITE_CHARSET, "utf-8");
262 }
263
264 if(!empty($orderData["BASKET_ITEMS"]))
265 {
266 $arFields["PAYMENTREQUEST_0_ITEMAMT"] = number_format($this->orderAmount-$this->deliveryAmount, 2, ".", "");
267 foreach($orderData["BASKET_ITEMS"] as $k => $val)
268 {
269 $arFields["L_PAYMENTREQUEST_0_NAME".$k] = $APPLICATION->ConvertCharset($val["NAME"], SITE_CHARSET, "utf-8");
270 $arFields["L_PAYMENTREQUEST_0_AMT".$k] = number_format($val["PRICE"], 2, ".", "");
271 $arFields["L_PAYMENTREQUEST_0_QTY".$k] = $val["QUANTITY"];
272 $arFields["L_PAYMENTREQUEST_0_NUMBER".$k] = $val["PRODUCT_ID"];
273 }
274 }
275
276 if($this->notifyUrl <> '')
277 $arFields["PAYMENTREQUEST_0_NOTIFYURL"] = $this->notifyUrl;
278
279 if($res2 = $ht->Post($url, $arFields))
280 {
281 $result2 = $this->parseResult($res2);
282
284 $order = Order::load($this->orderId);
285 $payment = $order->getPaymentCollection()->getItemById($this->paymentId);
286
287 if($result2["ACK"] == "Success" && in_array($result2["PAYMENTINFO_0_PAYMENTSTATUS"], array("Completed")))
288 {
289 $payment->setField('PAID', 'Y');
290 $strPS_STATUS_MESSAGE = "";
291 $strPS_STATUS_MESSAGE .= "Name: ".$result["FIRSTNAME"]." ".$result["LASTNAME"]."; ";
292 $strPS_STATUS_MESSAGE .= "Email: ".$result["EMAIL"]."; ";
293
294 $strPS_STATUS_DESCRIPTION = "";
295 $strPS_STATUS_DESCRIPTION .= "Payment status: ".$result2["PAYMENTINFO_0_PAYMENTSTATUS"]."; ";
296 $strPS_STATUS_DESCRIPTION .= "Payment sate: ".$result2["PAYMENTINFO_0_ORDERTIME"]."; ";
297
298 $arOrderFields = array(
299 "PS_STATUS" => "Y",
300 "PS_STATUS_CODE" => "-",
301 "PS_STATUS_DESCRIPTION" => $strPS_STATUS_DESCRIPTION,
302 "PS_STATUS_MESSAGE" => $strPS_STATUS_MESSAGE,
303 "PS_SUM" => $result2["PAYMENTINFO_0_AMT"],
304 "PS_CURRENCY" => $result2["PAYMENTINFO_0_CURRENCYCODE"],
305 "PS_RESPONSE_DATE" => new \Bitrix\Main\Type\DateTime,
306 "PAY_VOUCHER_NUM" => $result2["PAYMENTINFO_0_TRANSACTIONID"],
307 "PAY_VOUCHER_DATE" => new \Bitrix\Main\Type\DateTime,
308 );
309 }
310 else
311 {
312 $strPS_STATUS_MESSAGE = "";
313 $strPS_STATUS_MESSAGE .= "Name: ".$result["FIRSTNAME"]." ".$result["LASTNAME"]."; ";
314 $strPS_STATUS_MESSAGE .= "Email: ".$result["EMAIL"]."; ";
315
316 $strPS_STATUS_DESCRIPTION = "";
317 $strPS_STATUS_DESCRIPTION .= "Payment status: ".$result2["PAYMENTINFO_0_PAYMENTSTATUS"]."; ";
318 $strPS_STATUS_DESCRIPTION .= "Pending reason: ".$result2["PAYMENTINFO_0_PENDINGREASON"]."; ";
319 $strPS_STATUS_DESCRIPTION .= "Payment sate: ".$result2["PAYMENTINFO_0_ORDERTIME"]."; ";
320
321 $arOrderFields = array(
322 "PS_STATUS" => "N",
323 "PS_STATUS_CODE" => $result2["PAYMENTINFO_0_PAYMENTSTATUS"],
324 "PS_STATUS_DESCRIPTION" => $strPS_STATUS_DESCRIPTION,
325 "PS_STATUS_MESSAGE" => $strPS_STATUS_MESSAGE,
326 "PS_SUM" => $result2["PAYMENTINFO_0_AMT"],
327 "PS_CURRENCY" => $result2["PAYMENTINFO_0_CURRENCYCODE"],
328 "PS_RESPONSE_DATE" => new \Bitrix\Main\Type\DateTime,
329 "PAY_VOUCHER_NUM" => $result2["PAYMENTINFO_0_TRANSACTIONID"],
330 "PAY_VOUCHER_DATE" => new \Bitrix\Main\Type\DateTime,
331 );
332 }
333
334 $result = $payment->setFields($arOrderFields);
335 if ($result->isSuccess())
336 $order->save();
337 }
338 }
339 }
340 }
341 }
342}
343?>
global $APPLICATION
Определения include.php:80
xml version
Определения yandex.php:67
$arResult
Определения generate_coupon.php:16
static GetParamValue($key, $defaultValue=null)
Определения pay_system_action.php:76
static GetLangCurrency($siteId)
Определения settings.php:52
BasketButtonAction($orderData=array())
Определения pre_payment.php:76
getHiddenInputs()
Определения pre_payment.php:140
BasketButtonShow()
Определения pre_payment.php:65
parseResult($data)
Определения pre_payment.php:160
$arFields
Определения dblapprove.php:5
$data['IS_AVAILABLE']
Определения .description.php:13
$orderId
Определения payment.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
$result
Определения get_property_values.php:14
const SITE_CHARSET
Определения include.php:62
ToUpper($str)
Определения tools.php:2247
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
GetMessage($name, $aReplace=null)
Определения tools.php:3397
GetLangFileName($before, $after, $lang=false)
Определения tools.php:3428
LocalRedirect($url, $skip_security_check=false, $status="302 Found")
Определения tools.php:4005
$payment
Определения payment.php:14
$order
Определения payment.php:8
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
die
Определения quickway.php:367
$val
Определения options.php:1793
const SITE_ID
Определения sonet_set_content_view.php:12
$k
Определения template_pdf.php:567
$GLOBALS['_____370096793']
Определения update_client.php:1
$url
Определения iframe.php:7