PageRenderTime 48ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/php/includes_bak/modules/payment/paypal_ec.php

https://github.com/matthewxu/doc
PHP | 268 lines | 168 code | 59 blank | 41 comment | 11 complexity | 0961f205ec076649b573530bc8ad96a8 MD5 | raw file
  1. <?php
  2. /**
  3. * ECSHOP paypal快速结帐
  4. * ============================================================================
  5. * 版权所有 2005-2010 上海商派网络科技有限公司,并保留所有权利。
  6. * 网站地址: http://www.ecshop.com;
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * $Author: liuhui $
  12. * $Id: paypal_ec.php 16489 2009-08-03 10:14:03Z liuhui $
  13. */
  14. define('API_ENDPOINT', 'https://api-3t.paypal.com/nvp');
  15. define('USE_PROXY',FALSE);
  16. define('PROXY_HOST', '127.0.0.1');
  17. define('PROXY_PORT', '808');
  18. define('PAYPAL_URL', 'https://www.paypal.com/cgi-bin/webscr&cmd=_express-checkout&token=');
  19. $API_Endpoint =API_ENDPOINT;
  20. $version=VERSION;
  21. if (!defined('IN_ECS'))
  22. {
  23. die('Hacking attempt');
  24. }
  25. $payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/paypal_ec.php';
  26. if (file_exists($payment_lang))
  27. {
  28. global $_LANG;
  29. include_once($payment_lang);
  30. }
  31. /* 模块的基本信息 */
  32. if (isset($set_modules) && $set_modules == TRUE)
  33. {
  34. $i = isset($modules) ? count($modules) : 0;
  35. /* 代码 */
  36. $modules[$i]['code'] = basename(__FILE__, '.php');
  37. /* 描述对应的语言项 */
  38. $modules[$i]['desc'] = 'paypal_ec_desc';
  39. /* 是否支持货到付款 */
  40. $modules[$i]['is_cod'] = '0';
  41. /* 是否支持在线支付 */
  42. $modules[$i]['is_online'] = '1';
  43. /* 作者 */
  44. $modules[$i]['author'] = 'ECSHOP TEAM';
  45. /* 网址 */
  46. $modules[$i]['website'] = 'http://www.paypal.com';
  47. /* 版本号 */
  48. $modules[$i]['version'] = '1.0.0';
  49. /* 配置信息 */
  50. $modules[$i]['config'] = array(
  51. array('name' => 'paypal_ec_username', 'type' => 'text', 'value' => ''),
  52. array('name' => 'paypal_ec_password', 'type' => 'text', 'value' => ''),
  53. array('name' => 'paypal_ec_signature', 'type' => 'text', 'value' => ''),
  54. array('name' => 'paypal_ec_currency', 'type' => 'select', 'value' => 'USD')
  55. );
  56. return;
  57. }
  58. /**
  59. * 类
  60. */
  61. class paypal_ec
  62. {
  63. /**
  64. * 构造函数
  65. *
  66. * @access public
  67. * @param
  68. *
  69. * @return void
  70. */
  71. function paypal_ec()
  72. {
  73. }
  74. function __construct()
  75. {
  76. $this->paypal_ec();
  77. }
  78. /**
  79. * 生成支付代码
  80. * @param array $order 订单信息
  81. * @param array $payment 支付方式信息
  82. */
  83. function get_code($order, $payment)
  84. {
  85. $token = '';
  86. $serverName = $_SERVER['SERVER_NAME'];
  87. $serverPort = $_SERVER['SERVER_PORT'];
  88. $url=dirname('http://'.$serverName.':'.$serverPort.$_SERVER['REQUEST_URI']);
  89. $paymentAmount=$order['order_amount'];
  90. $currencyCodeType=$payment['paypal_ec_currency'];
  91. $paymentType='Sale';
  92. $data_order_id = $order['log_id'];
  93. $_SESSION['paypal_username']=$payment['paypal_ec_username'];
  94. $_SESSION['paypal_password']=$payment['paypal_ec_password'];
  95. $_SESSION['paypal_signature']=$payment['paypal_ec_signature'];
  96. $returnURL =urlencode($url.'/respond.php?code=paypal_ec&currencyCodeType='.$currencyCodeType.'&paymentType='.$paymentType.'&paymentAmount='.$paymentAmount.'&invoice='.$data_order_id);
  97. $cancelURL =urlencode("$url/SetExpressCheckout.php?paymentType=$paymentType" );
  98. $nvpstr="&Amt=".$paymentAmount."&PAYMENTACTION=".$paymentType."&ReturnUrl=".$returnURL."&CANCELURL=".$cancelURL ."&CURRENCYCODE=".$currencyCodeType ."&ButtonSource=ECSHOP_cart_EC_C2";
  99. $resArray=$this->hash_call("SetExpressCheckout",$nvpstr);
  100. $_SESSION['reshash']=$resArray;
  101. if(isset($resArray["ACK"]))
  102. {
  103. $ack = strtoupper($resArray["ACK"]);
  104. }
  105. if (isset($resArray["TOKEN"]))
  106. {
  107. $token = urldecode($resArray["TOKEN"]);
  108. }
  109. $payPalURL = PAYPAL_URL.$token;
  110. $button = '<div style="text-align:center"><input type="button" onclick="window.open(\''.$payPalURL. '\')" value="' .$GLOBALS['_LANG']['pay_button']. '"/></div>';
  111. return $button;
  112. }
  113. /**
  114. * 响应操作
  115. */
  116. function respond()
  117. {
  118. $order_sn = $_REQUEST['invoice'];
  119. $token =urlencode( $_REQUEST['token']);
  120. $nvpstr="&TOKEN=".$token;
  121. $resArray=$this->hash_call("GetExpressCheckoutDetails",$nvpstr);
  122. $_SESSION['reshash']=$resArray;
  123. $ack = strtoupper($resArray["ACK"]);
  124. if($ack=="SUCCESS")
  125. {
  126. $_SESSION['token']=$_REQUEST['token'];
  127. $_SESSION['payer_id'] = $_REQUEST['PayerID'];
  128. $_SESSION['paymentAmount']=$_REQUEST['paymentAmount'];
  129. $_SESSION['currCodeType']=$_REQUEST['currencyCodeType'];
  130. $_SESSION['paymentType']=$_REQUEST['paymentType'];
  131. $resArray=$_SESSION['reshash'];
  132. $token =urlencode( $_SESSION['token']);
  133. $paymentAmount =urlencode ($_SESSION['paymentAmount']);
  134. $paymentType = urlencode($_SESSION['paymentType']);
  135. $currCodeType = urlencode($_SESSION['currCodeType']);
  136. $payerID = urlencode($_SESSION['payer_id']);
  137. $serverName = urlencode($_SERVER['SERVER_NAME']);
  138. $nvpstr='&TOKEN='.$token.'&PAYERID='.$payerID.'&PAYMENTACTION='.$paymentType.'&AMT='.$paymentAmount.'&CURRENCYCODE='.$currCodeType.'&IPADDRESS='.$serverName ;
  139. $resArray=$this->hash_call("DoExpressCheckoutPayment",$nvpstr);
  140. $ack = strtoupper($resArray["ACK"]);
  141. if($ack=="SUCCESS")
  142. {
  143. /* 改变订单状态 */
  144. order_paid($order_sn, 2);
  145. return true;
  146. }
  147. else
  148. {
  149. return false;
  150. }
  151. }
  152. else
  153. {
  154. return false;
  155. }
  156. }
  157. function hash_call($methodName,$nvpStr)
  158. {
  159. global $API_Endpoint;
  160. $version='53.0';
  161. $API_UserName=$_SESSION['paypal_username'];
  162. $API_Password=$_SESSION['paypal_password'];
  163. $API_Signature=$_SESSION['paypal_signature'];
  164. $nvp_Header;
  165. $ch = curl_init();
  166. curl_setopt($ch, CURLOPT_URL,$API_Endpoint);
  167. curl_setopt($ch, CURLOPT_VERBOSE, 1);
  168. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  169. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  170. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  171. curl_setopt($ch, CURLOPT_POST, 1);
  172. if(USE_PROXY)
  173. {
  174. curl_setopt ($ch, CURLOPT_PROXY, PROXY_HOST.":".PROXY_PORT);
  175. }
  176. $nvpreq="METHOD=".urlencode($methodName)."&VERSION=".urlencode($version)."&PWD=".urlencode($API_Password)."&USER=".urlencode($API_UserName)."&SIGNATURE=".urlencode($API_Signature).$nvpStr;
  177. curl_setopt($ch,CURLOPT_POSTFIELDS,$nvpreq);
  178. $response = curl_exec($ch);
  179. $nvpResArray=$this->deformatNVP($response);
  180. $nvpReqArray=$this->deformatNVP($nvpreq);
  181. $_SESSION['nvpReqArray']=$nvpReqArray;
  182. if (curl_errno($ch))
  183. {
  184. $_SESSION['curl_error_no']=curl_errno($ch) ;
  185. $_SESSION['curl_error_msg']=curl_error($ch);
  186. }
  187. else
  188. {
  189. curl_close($ch);
  190. }
  191. return $nvpResArray;
  192. }
  193. function deformatNVP($nvpstr)
  194. {
  195. $intial=0;
  196. $nvpArray = array();
  197. while(strlen($nvpstr))
  198. {
  199. $keypos= strpos($nvpstr,'=');
  200. $valuepos = strpos($nvpstr,'&') ? strpos($nvpstr,'&'): strlen($nvpstr);
  201. $keyval=substr($nvpstr,$intial,$keypos);
  202. $valval=substr($nvpstr,$keypos+1,$valuepos-$keypos-1);
  203. $nvpArray[urldecode($keyval)] =urldecode( $valval);
  204. $nvpstr=substr($nvpstr,$valuepos+1,strlen($nvpstr));
  205. }
  206. return $nvpArray;
  207. }
  208. }
  209. ?>