33 if($this->currency ==
'')
37 $this->domain =
"sandbox.";
44 $dbSite = CSite::GetByID(
SITE_ID);
45 $arSite = $dbSite->Fetch();
46 $this->serverName = $arSite[
"SERVER_NAME"];
47 if ($this->serverName ==
'')
49 if (defined(
"SITE_SERVER_NAME") && SITE_SERVER_NAME <>
'')
50 $this->serverName = SITE_SERVER_NAME;
52 $this->serverName = COption::GetOptionString(
"main",
"server_name",
"www.bitrixsoft.com");
55 $this->serverName = (CMain::IsHTTPS() ?
"https" :
"http").
"://".$this->serverName;
57 if($this->username ==
'' || $this->username ==
'' || $this->username ==
'')
59 $GLOBALS[
"APPLICATION"]->ThrowException(
"CSalePaySystempaypal: init error",
"CSalePaySystempaypal_init_error");
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";
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;'>";
79 if (array_key_exists(
'paypalbutton_x', $_POST) && array_key_exists(
'paypalbutton_y', $_POST))
81 $url =
"https://api-3t.".$this->domain.
"paypal.com/nvp";
84 "METHOD" =>
"SetExpressCheckout",
86 "USER" => $this->username,
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",
99 if(!empty($orderData[
"BASKET_ITEMS"]))
101 $arFields[
"PAYMENTREQUEST_0_ITEMAMT"] = number_format($orderData[
"AMOUNT"], 2,
".",
"");
102 foreach($orderData[
"BASKET_ITEMS"] as
$k =>
$val)
105 $arFields[
"L_PAYMENTREQUEST_0_AMT".$k] = number_format(
$val[
"PRICE"], 2,
".",
"");
110 $arFields[
"RETURNURL"] .= ((mb_strpos(
$arFields[
"RETURNURL"],
"?") ===
false) ?
"?" :
"&").
"paypal=Y";
112 $ht = new \Bitrix\Main\Web\HttpClient(
array(
"version" =>
"1.1"));
119 $url =
"https://www.".$this->domain.
"paypal.com/webscr?cmd=_express-checkout&token=".
$result[
"TOKEN"];
120 if($orderData[
"ORDER_REQUEST"] ==
"Y")
126 $GLOBALS[
"APPLICATION"]->ThrowException(
$result[
'L_SHORTMESSAGE0'].
' : '.
$result[
'L_LONGMESSAGE0'],
"CSalePaySystemPrePayment_action_error");
132 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"PPL_ERROR"),
"CSalePaySystemPrePayment_action_error");
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).
"\">
148 if($this->token <>
'')
149 $result .=
"<span style='color: green'>".GetMessage(
"PPL_PREAUTH_TEXT").
"<br /><br /></span>";
155 if(
$_REQUEST[
"paypal"] ==
"Y" && $this->token <>
'')
165 $res1= explode(
"&",
$data);
166 foreach($res1 as $res2)
168 list(
$key,
$val) = explode(
"=", $res2);
169 $keyarray[urldecode(
$key)] = urldecode(
$val);
170 if($this->encoding <>
'')
179 if($this->token <>
'')
181 $url =
"https://api-3t.".$this->domain.
"paypal.com/nvp";
183 "METHOD" =>
"GetExpressCheckoutDetails",
185 "USER" => $this->username,
187 "SIGNATURE" => $this->signature,
188 "TOKEN" => $this->token,
189 "buttonsource" =>
"Bitrix_Cart",
192 $ht = new \Bitrix\Main\Web\HttpClient(
array(
"version" =>
"1.1"));
196 if(
$result[
"ACK"] ==
"Success")
202 "ADDRESS" =>
$result[
"SHIPTOSTREET"].
" ".
$result[
"SHIPTOSTREET2"],
203 "COUNTRY" =>
$result[
"SHIPTOCOUNTRYNAME"],
204 "STATE" =>
$result[
"SHIPTOSTATE"],
205 "CITY" =>
$result[
"SHIPTOCITY"],
206 "LOCATION" =>
$result[
"SHIPTOCITY"],
215 function payOrder($orderData =
array())
217 if($this->token <>
'')
220 $url =
"https://api-3t.".$this->domain.
"paypal.com/nvp";
222 "METHOD" =>
"GetExpressCheckoutDetails",
224 "USER" => $this->username,
226 "SIGNATURE" => $this->signature,
227 "TOKEN" => $this->token,
228 "buttonsource" =>
"Bitrix_Cart",
231 $ht = new \Bitrix\Main\Web\HttpClient(
array(
"version" =>
"1.1"));
235 if(
$result[
"ACK"] ==
"Success" && in_array(
$result[
"CHECKOUTSTATUS"],
array(
"PaymentActionNotInitiated")))
237 $arFields[
"METHOD"] =
"DoExpressCheckoutPayment";
240 $arFields[
"PAYMENTREQUEST_0_AMT"] = number_format($this->orderAmount, 2,
".",
"");
242 $arFields[
"PAYMENTREQUEST_0_DESC"] =
"Order #".$this->orderId;
243 $arFields[
"PAYMENTREQUEST_0_NOTETEX"] =
"Order #".$this->orderId;
245 $arFields[
"PAYMENTREQUEST_0_CUSTOM"] = $this->paymentId;
247 if(DoubleVal($this->deliveryAmount) > 0)
249 $arFields[
"PAYMENTREQUEST_0_SHIPPINGAMT"] = number_format($this->deliveryAmount, 2,
".",
"");
253 if(!empty($orderProps))
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");
264 if(!empty($orderData[
"BASKET_ITEMS"]))
266 $arFields[
"PAYMENTREQUEST_0_ITEMAMT"] = number_format($this->orderAmount-$this->deliveryAmount, 2,
".",
"");
267 foreach($orderData[
"BASKET_ITEMS"] as
$k =>
$val)
270 $arFields[
"L_PAYMENTREQUEST_0_AMT".$k] = number_format(
$val[
"PRICE"], 2,
".",
"");
272 $arFields[
"L_PAYMENTREQUEST_0_NUMBER".$k] =
$val[
"PRODUCT_ID"];
276 if($this->notifyUrl <>
'')
284 $order = Order::load($this->orderId);
285 $payment =
$order->getPaymentCollection()->getItemById($this->paymentId);
287 if($result2[
"ACK"] ==
"Success" && in_array($result2[
"PAYMENTINFO_0_PAYMENTSTATUS"],
array(
"Completed")))
290 $strPS_STATUS_MESSAGE =
"";
291 $strPS_STATUS_MESSAGE .=
"Name: ".$result[
"FIRSTNAME"].
" ".
$result[
"LASTNAME"].
"; ";
292 $strPS_STATUS_MESSAGE .=
"Email: ".$result[
"EMAIL"].
"; ";
294 $strPS_STATUS_DESCRIPTION =
"";
295 $strPS_STATUS_DESCRIPTION .=
"Payment status: ".$result2[
"PAYMENTINFO_0_PAYMENTSTATUS"].
"; ";
296 $strPS_STATUS_DESCRIPTION .=
"Payment sate: ".$result2[
"PAYMENTINFO_0_ORDERTIME"].
"; ";
298 $arOrderFields =
array(
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,
312 $strPS_STATUS_MESSAGE =
"";
313 $strPS_STATUS_MESSAGE .=
"Name: ".$result[
"FIRSTNAME"].
" ".
$result[
"LASTNAME"].
"; ";
314 $strPS_STATUS_MESSAGE .=
"Email: ".$result[
"EMAIL"].
"; ";
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"].
"; ";
321 $arOrderFields =
array(
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,
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)