25 require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
40 $head[$h][0] = DOL_URL_ROOT.
"/paypal/admin/paypal.php";
41 $head[$h][1] = $langs->trans(
"PayPal");
42 $head[$h][2] =
'paypalaccount';
45 $object =
new stdClass();
74 global $API_Endpoint, $API_Url, $API_version, $USE_PROXY, $PROXY_HOST, $PROXY_PORT;
75 global $PAYPAL_API_USER, $PAYPAL_API_PASSWORD, $PAYPAL_API_SIGNATURE;
77 global $shipToName, $shipToStreet, $shipToCity, $shipToState, $shipToCountryCode, $shipToZip, $shipToStreet2, $phoneNum;
85 if (empty($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY)) $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY =
'integral';
87 $solutionType =
'Sole';
88 $landingPage =
'Billing';
90 if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY ==
'paypalonly')
92 $solutionType =
'Mark';
93 $landingPage =
'Login';
96 if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY ==
'integral')
98 $solutionType =
'Sole';
99 $landingPage =
'Billing';
102 if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY ==
'cconly')
104 $solutionType =
'Sole';
105 $landingPage =
'Billing';
108 dol_syslog(
"print_paypal_redirect expresscheckout redirect with callSetExpressCheckout $paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $tag, $solutionType, $landingPage, $shipToName, $shipToStreet, $shipToCity, $shipToState, $shipToCountryCode, $shipToZip, $shipToStreet2, $phoneNum");
130 dol_syslog(
"print_paypal_redirect resArray=".var_export($resArray,
true), LOG_DEBUG);
132 $ack = strtoupper($resArray[
"ACK"]);
133 if ($ack ==
"SUCCESS" || $ack ==
"SUCCESSWITHWARNING")
135 $token = $resArray[
"TOKEN"];
138 $payPalURL = $API_Url.$token;
139 dol_syslog(
"Redirect to ".$payPalURL, LOG_INFO);
140 header(
"Location: ".$payPalURL);
144 $ErrorCode = urldecode($resArray[
"L_ERRORCODE0"]);
145 $ErrorShortMsg = urldecode($resArray[
"L_SHORTMESSAGE0"]);
146 $ErrorLongMsg = urldecode($resArray[
"L_LONGMESSAGE0"]);
147 $ErrorSeverityCode = urldecode($resArray[
"L_SEVERITYCODE0"]);
149 if ($ErrorCode == 10729)
151 $mesg .=
"PayPal can't accept payments for this thirdparty. An address is defined but is not complete (missing State).<br>Ask system administrator to fix address or to setup Paypal module to accept payments even on not complete addresses (remove option PAYPAL_REQUIRE_VALID_SHIPPING_ADDRESS).<br>\n";
153 $mesg = $langs->trans(
'SetExpressCheckoutAPICallFailed').
"<br>\n";
154 $mesg .= $langs->trans(
'DetailedErrorMessage').
": ".$ErrorLongMsg.
"<br>\n";
155 $mesg .= $langs->trans(
'ShortErrorMessage').
": ".$ErrorShortMsg.
"<br>\n";
156 $mesg .= $langs->trans(
'ErrorCode').
": ".$ErrorCode.
"<br>\n";
157 $mesg .= $langs->trans(
'ErrorSeverityCode').
": ".$ErrorSeverityCode.
"<br>\n";
205 function callSetExpressCheckout($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $tag, $solutionType, $landingPage, $shipToName, $shipToStreet, $shipToCity, $shipToState, $shipToCountryCode, $shipToZip, $shipToStreet2, $phoneNum, $email =
'', $desc =
'')
211 global $conf, $langs, $mysoc;
212 global $API_Endpoint, $API_Url, $API_version, $USE_PROXY, $PROXY_HOST, $PROXY_PORT;
213 global $PAYPAL_API_USER, $PAYPAL_API_PASSWORD, $PAYPAL_API_SIGNATURE;
217 $nvpstr = $nvpstr.
"&RETURNURL=".urlencode($returnURL);
218 $nvpstr = $nvpstr.
"&CANCELURL=".urlencode($cancelURL);
219 if (!empty($conf->global->PAYPAL_ALLOW_NOTES))
221 $nvpstr = $nvpstr.
"&ALLOWNOTE=0";
223 if (empty($conf->global->PAYPAL_REQUIRE_VALID_SHIPPING_ADDRESS))
225 $nvpstr = $nvpstr.
"&NOSHIPPING=1";
227 $nvpstr = $nvpstr.
"&NOSHIPPING=0";
229 $nvpstr = $nvpstr.
"&SOLUTIONTYPE=".urlencode($solutionType);
230 $nvpstr = $nvpstr.
"&LANDINGPAGE=".urlencode($landingPage);
231 if (!empty($conf->global->PAYPAL_CUSTOMER_SERVICE_NUMBER))
233 $nvpstr = $nvpstr.
"&CUSTOMERSERVICENUMBER=".urlencode($conf->global->PAYPAL_CUSTOMER_SERVICE_NUMBER);
236 $paypalprefix =
'PAYMENTREQUEST_0_';
238 if (!empty($paypalprefix) && $paymentType ==
'Sole') $paymentType =
'Sale';
240 $nvpstr = $nvpstr.
"&AMT=".urlencode($paymentAmount);
242 $nvpstr = $nvpstr.
"&".$paypalprefix.
"INVNUM=".urlencode($tag);
243 $nvpstr = $nvpstr.
"&".$paypalprefix.
"AMT=".urlencode($paymentAmount);
244 $nvpstr = $nvpstr.
"&".$paypalprefix.
"ITEMAMT=".urlencode($paymentAmount);
245 $nvpstr = $nvpstr.
"&".$paypalprefix.
"PAYMENTACTION=".urlencode($paymentType);
246 $nvpstr = $nvpstr.
"&".$paypalprefix.
"CURRENCYCODE=".urlencode($currencyCodeType);
248 $nvpstr = $nvpstr.
"&".$paypalprefix.
"L_PAYMENTREQUEST_0_QTY0=1";
249 $nvpstr = $nvpstr.
"&".$paypalprefix.
"L_PAYMENTREQUEST_0_AMT0=".urlencode($paymentAmount);
250 $nvpstr = $nvpstr.
"&".$paypalprefix.
"L_PAYMENTREQUEST_0_NAME0=".urlencode($desc);
251 $nvpstr = $nvpstr.
"&".$paypalprefix.
"L_PAYMENTREQUEST_0_NUMBER0=0";
253 $nvpstr = $nvpstr.
"&".$paypalprefix.
"SHIPTONAME=".urlencode($shipToName);
254 $nvpstr = $nvpstr.
"&".$paypalprefix.
"SHIPTOSTREET=".urlencode($shipToStreet);
255 $nvpstr = $nvpstr.
"&".$paypalprefix.
"SHIPTOSTREET2=".urlencode($shipToStreet2);
256 $nvpstr = $nvpstr.
"&".$paypalprefix.
"SHIPTOCITY=".urlencode($shipToCity);
257 $nvpstr = $nvpstr.
"&".$paypalprefix.
"SHIPTOSTATE=".urlencode($shipToState);
258 $nvpstr = $nvpstr.
"&".$paypalprefix.
"SHIPTOCOUNTRYCODE=".urlencode($shipToCountryCode);
259 $nvpstr = $nvpstr.
"&".$paypalprefix.
"SHIPTOZIP=".urlencode($shipToZip);
260 $nvpstr = $nvpstr.
"&".$paypalprefix.
"PHONENUM=".urlencode($phoneNum);
261 if (!empty($email)) $nvpstr = $nvpstr.
"&".$paypalprefix.
"EMAIL=".urlencode($email);
262 if (!empty($desc)) $nvpstr = $nvpstr.
"&".$paypalprefix.
"DESC=".urlencode($desc);
264 if (!empty($conf->global->PAYPAL_LOGOIMG) && $mysoc->logo)
266 global $dolibarr_main_url_root;
269 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
270 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
273 $urllogo = $urlwithroot.
"/viewimage.php?modulepart=mycompany&file=".urlencode(
'logos/'.$mysoc->logo);
274 $nvpstr = $nvpstr.
"&LOGOIMG=".urlencode($urllogo);
276 if (!empty($conf->global->PAYPAL_BRANDNAME))
278 $nvpstr = $nvpstr.
"&BRANDNAME=".urlencode($conf->global->PAYPAL_BRANDNAME);
280 if (!empty($conf->global->PAYPAL_NOTETOBUYER))
282 $nvpstr = $nvpstr.
"&NOTETOBUYER=".urlencode($conf->global->PAYPAL_NOTETOBUYER);
285 $_SESSION[
"FinalPaymentAmt"] = $paymentAmount;
286 $_SESSION[
"currencyCodeType"] = $currencyCodeType;
287 $_SESSION[
"PaymentType"] = $paymentType;
295 $resArray =
hash_call(
"SetExpressCheckout", $nvpstr);
296 $ack = strtoupper($resArray[
"ACK"]);
297 if ($ack ==
"SUCCESS" || $ack ==
"SUCCESSWITHWARNING")
299 $token = urldecode($resArray[
"TOKEN"]);
300 $_SESSION[
'TOKEN'] = $token;
324 global $conf, $langs;
325 global $API_Endpoint, $API_Url, $API_version, $USE_PROXY, $PROXY_HOST, $PROXY_PORT;
326 global $PAYPAL_API_USER, $PAYPAL_API_PASSWORD, $PAYPAL_API_SIGNATURE;
332 $nvpstr =
"&TOKEN=".$token;
340 $resArray =
hash_call(
"GetExpressCheckoutDetails", $nvpstr);
341 $ack = strtoupper($resArray[
"ACK"]);
342 if ($ack ==
"SUCCESS" || $ack ==
"SUCCESSWITHWARNING")
344 $_SESSION[
'payer_id'] = $resArray[
'PAYERID'];
362 function confirmPayment($token, $paymentType, $currencyCodeType, $payerID, $ipaddress, $FinalPaymentAmt, $tag)
370 global $conf, $langs;
371 global $API_Endpoint, $API_Url, $API_version, $USE_PROXY, $PROXY_HOST, $PROXY_PORT;
372 global $PAYPAL_API_USER, $PAYPAL_API_PASSWORD, $PAYPAL_API_SIGNATURE;
375 $nvpstr .=
'&TOKEN='.urlencode($token);
376 $nvpstr .=
'&PAYERID='.urlencode($payerID);
377 $nvpstr .=
'&PAYMENTACTION='.urlencode($paymentType);
378 $nvpstr .=
'&AMT='.urlencode($FinalPaymentAmt);
379 $nvpstr .=
'&CURRENCYCODE='.urlencode($currencyCodeType);
380 $nvpstr .=
'&IPADDRESS='.urlencode($ipaddress);
381 $nvpstr .=
'&INVNUM='.urlencode($tag);
386 $resArray =
hash_call(
"DoExpressCheckoutPayment", $nvpstr);
392 $ack = strtoupper($resArray[
"ACK"]);
459 global $conf, $langs;
460 global $API_Endpoint, $API_Url, $API_version, $USE_PROXY, $PROXY_HOST, $PROXY_PORT, $PROXY_USER, $PROXY_PASS;
461 global $PAYPAL_API_USER, $PAYPAL_API_PASSWORD, $PAYPAL_API_SIGNATURE;
464 $API_version =
"98.0";
465 if (!empty($conf->global->PAYPAL_API_SANDBOX) ||
GETPOST(
'forcesandbox',
'alpha'))
467 $API_Endpoint =
"https://api-3t.sandbox.paypal.com/nvp";
468 $API_Url =
"https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token=";
470 $API_Endpoint =
"https://api-3t.paypal.com/nvp";
471 $API_Url =
"https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=";
475 $PAYPAL_API_USER =
"";
476 if (!empty($conf->global->PAYPAL_API_USER)) $PAYPAL_API_USER = $conf->global->PAYPAL_API_USER;
477 $PAYPAL_API_PASSWORD =
"";
478 if (!empty($conf->global->PAYPAL_API_PASSWORD)) $PAYPAL_API_PASSWORD = $conf->global->PAYPAL_API_PASSWORD;
479 $PAYPAL_API_SIGNATURE =
"";
480 if (!empty($conf->global->PAYPAL_API_SIGNATURE)) $PAYPAL_API_SIGNATURE = $conf->global->PAYPAL_API_SIGNATURE;
481 $PAYPAL_API_SANDBOX =
"";
482 if (!empty($conf->global->PAYPAL_API_SANDBOX)) $PAYPAL_API_SANDBOX = $conf->global->PAYPAL_API_SANDBOX;
485 dol_syslog(
"Paypal API endpoint ".$API_Endpoint);
494 curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
495 curl_setopt($ch, CURLOPT_VERBOSE, 1);
497 curl_setopt($ch, CURLOPT_SSLVERSION, (empty($conf->global->PAYPAL_SSLVERSION) ? 1 : $conf->global->PAYPAL_SSLVERSION));
500 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,
false);
501 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,
false);
503 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, empty($conf->global->MAIN_USE_CONNECT_TIMEOUT) ? 5 : $conf->global->MAIN_USE_CONNECT_TIMEOUT);
504 curl_setopt($ch, CURLOPT_TIMEOUT, empty($conf->global->MAIN_USE_RESPONSE_TIMEOUT) ? 30 : $conf->global->MAIN_USE_RESPONSE_TIMEOUT);
506 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
507 curl_setopt($ch, CURLOPT_POST, 1);
512 dol_syslog(
"Paypal API hash_call set proxy to ".$PROXY_HOST.
":".$PROXY_PORT.
" - ".$PROXY_USER.
":".$PROXY_PASS);
514 curl_setopt($ch, CURLOPT_PROXY, $PROXY_HOST.
":".$PROXY_PORT);
515 if ($PROXY_USER) curl_setopt($ch, CURLOPT_PROXYUSERPWD, $PROXY_USER.
":".$PROXY_PASS);
519 $nvpreq =
"METHOD=".urlencode($methodName).
"&VERSION=".urlencode($API_version).
"&PWD=".urlencode($PAYPAL_API_PASSWORD).
"&USER=".urlencode($PAYPAL_API_USER).
"&SIGNATURE=".urlencode($PAYPAL_API_SIGNATURE).$nvpStr;
520 $nvpreq .=
"&LOCALECODE=".strtoupper($langs->getDefaultLang(1));
525 dol_syslog(
"Paypal API hash_call nvpreq=".$nvpreq);
528 curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
531 $response = curl_exec($ch);
534 $_SESSION[
'nvpReqArray'] = $nvpReqArray;
537 dol_syslog(
"Paypal API hash_call Response nvpresp=".$response);
540 if (curl_errno($ch)) {
542 $_SESSION[
'curl_error_no'] = curl_errno($ch);
543 $_SESSION[
'curl_error_msg'] = curl_error($ch);
567 while (strlen($nvpstr))
570 $keypos = strpos($nvpstr,
'=');
572 $valuepos = strpos($nvpstr,
'&') ? strpos($nvpstr,
'&') : strlen($nvpstr);
575 $keyval = substr($nvpstr, $intial, $keypos);
576 $valval = substr($nvpstr, $keypos + 1, $valuepos - $keypos - 1);
578 $nvpArray[urldecode($keyval)] = urldecode($valval);
579 $nvpstr = substr($nvpstr, $valuepos + 1, strlen($nvpstr));
593 $resArray = $_SESSION[
'reshash'];
595 if (isset($_SESSION[
'curl_error_no']))
597 $errors[] = $_SESSION[
'curl_error_no'].
'-'.$_SESSION[
'curl_error_msg'];
600 foreach ($resArray as $key => $value)
602 $errors[] = $key.
'-'.$value;
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
getUserRemoteIP()
Return the IP of remote user.
getApiError()
Get API errors.
confirmPayment($token, $paymentType, $currencyCodeType, $payerID, $ipaddress, $FinalPaymentAmt, $tag)
Validate payment.
callSetExpressCheckout($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $tag, $solutionType, $landingPage, $shipToName, $shipToStreet, $shipToCity, $shipToState, $shipToCountryCode, $shipToZip, $shipToStreet2, $phoneNum, $email= '', $desc= '')
Purpose: Prepares the parameters for the SetExpressCheckout API Call.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
deformatNVP($nvpstr)
This function will take NVPString and convert it to an Associative Array and it will decode the respo...
hash_call($methodName, $nvpStr)
This function makes a DoDirectPayment API call.
getDetails($token)
Prepares the parameters for the GetExpressCheckoutDetails API Call.
complete_head_from_modules($conf, $langs, $object, &$head, &$h, $type, $mode= 'add')
Complete or removed entries into a head array (used to build tabs).
paypaladmin_prepare_head()
Define head array for tabs of paypal tools setup pages.
print_paypal_redirect($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $tag)
Send redirect to paypal to browser.