当前位置:首页 > CMS教程 > ecshop > 列表

Ecshop 支付宝手机网页支付免费版

发布:smiling 来源: PHP粉丝网  添加日期:2015-12-24 13:51:59 浏览: 评论:0 

Ecshop手机网页版本支持在网上找了很多需要花钱购买了,在这里小编整理了一个Ecshop 支付宝手机网页支付免费版供大家参考.

Ecshop 支付宝手机网页支付,针对ecshop wap手机版

  1. <?php 
  2.  
  3. /** 
  4. * ECSHOP 支付宝手机网页插件 
  5. */ 
  6.  
  7. if (!defined('IN_ECS')) 
  8. { 
  9. die('Hacking attempt'); 
  10. } 
  11.  
  12. $payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/alipay_wap.php'; 
  13.  
  14. if (file_exists($payment_lang)) 
  15. { 
  16. global $_LANG; 
  17.  
  18. include_once($payment_lang); 
  19. } 
  20.  
  21. /* 模块的基本信息 */ 
  22. if (isset($set_modules) && $set_modules == TRUE) 
  23. { 
  24. $i = isset($modules) ? count($modules) : 0; 
  25.  
  26. /* 代码 */ 
  27. $modules[$i]['code'] = basename(__FILE__, '.php'); 
  28.  
  29. /* 描述对应的语言项 */ 
  30. $modules[$i]['desc'] = 'alipay_wap_desc'; 
  31.  
  32. /* 是否支持货到付款 */ 
  33. $modules[$i]['is_cod'] = '0'; 
  34.  
  35. /* 是否支持在线支付 */ 
  36. $modules[$i]['is_online'] = '1'; 
  37.  
  38. /* 作者 */ 
  39. $modules[$i]['author'] = 'ECSHOP TEAM'; 
  40.  
  41. /* 网址 */ 
  42. $modules[$i]['website'] = 'http://www.alipay.com'; 
  43.  
  44. /* 版本号 */ 
  45. $modules[$i]['version'] = '1.0.2'; 
  46.  
  47. /* 配置信息 共用?? */ 
  48. $modules[$i]['config'] = array( 
  49. array('name' => 'alipay_account', 'type' => 'text', 'value' => ''), 
  50. array('name' => 'alipay_key', 'type' => 'text', 'value' => ''), 
  51. array('name' => 'alipay_partner', 'type' => 'text', 'value' => ''), 
  52. array('name' => 'alipay_pay_method', 'type' => 'select', 'value' => '') 
  53. ); 
  54.  
  55. return; 
  56. } 
  57.  
  58. /** 
  59. * 类 
  60. */ 
  61. class alipay_wap 
  62. { 
  63.  
  64. /** 
  65. * 构造函数 
  66. * 
  67. * @access public 
  68. * @param 
  69. * 
  70. * @return void 
  71. */ 
  72. function alipay() 
  73. { 
  74. } 
  75.  
  76. function __construct() 
  77. { 
  78. $this->alipay(); 
  79. } 
  80.  
  81. /** 
  82. * 生成支付代码 
  83. * @param array $order 订单信息 
  84. * @param array $payment 支付方式信息 
  85. */ 
  86. function get_code($order, $payment) 
  87. { 
  88.  
  89. if (!defined('EC_CHARSET')) 
  90. { 
  91. $charset = 'utf-8'; 
  92. } 
  93. else 
  94. { 
  95. $charset = EC_CHARSET; 
  96. } 
  97.  
  98. //合作身份者id,以2088开头的16位纯数字 
  99. $alipay_config['partner'] = $payment['alipay_partner']; 
  100.  
  101. //签名方式 不需修改 
  102. $alipay_config['sign_type'] = '0001'; 
  103.  
  104. //安全检验码,以数字和字母组成的32位字符 
  105. //如果签名方式设置为“MD5”时,请设置该参数 
  106. //$alipay_config['key'] = $payment['alipay_key']; 
  107.  
  108. //商户的私钥(后缀是.pen)文件相对路径 
  109. //如果签名方式设置为“0001”时,请设置该参数 
  110. $alipay_config['private_key_path'] = dirname(__FILE__)."/alipay_wap/key/rsa_private_key.pem"; 
  111.  
  112. //支付宝公钥(后缀是.pen)文件相对路径 
  113. //如果签名方式设置为“0001”时,请设置该参数 
  114. $alipay_config['ali_public_key_path']= dirname(__FILE__)."/alipay_wap/key/alipay_public_key.pem"; 
  115. //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 
  116.  
  117. //字符编码格式 目前支持 gbk 或 utf-8 
  118. $alipay_config['input_charset']= 'utf-8'; 
  119.  
  120. //ca证书路径地址,用于curl中ssl校验 
  121. //请保证cacert.pem文件在当前文件夹目录中 
  122. $alipay_config['cacert'] = dirname(__FILE__)."/alipay_wap/cacert.pem"; 
  123.  
  124. //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http 
  125. $alipay_config['transport'] = 'http'; 
  126.  
  127. require_once(dirname(__FILE__)."/alipay_wap/lib/alipay_submit.class.php"); 
  128.  
  129. //返回格式 
  130. $format = "xml"; 
  131. //必填,不需要修改 
  132.  
  133. //返回格式 
  134. $v = "2.0"; 
  135. //必填,不需要修改 
  136.  
  137. //请求号 
  138. $req_id = date('Ymdhis'); 
  139. //必填,须保证每次请求都是唯一 
  140.  
  141. //**req_data详细信息** 
  142.  
  143. //服务器异步通知页面路径 
  144. $notify_url = return_url(basename(__FILE__, '.php')); 
  145. //需http://格式的完整路径,不允许加?id=123这类自定义参数 
  146.  
  147. //页面跳转同步通知页面路径 
  148. $call_back_url = return_url(basename(__FILE__, '.php')); 
  149. //需http://格式的完整路径,不允许加?id=123这类自定义参数 
  150.  
  151. //操作中断返回地址 
  152. $merchant_url = $GLOBALS['ecs']->url(); 
  153. //用户付款中途退出返回商户的地址。需http://格式的完整路径,不允许加?id=123这类自定义参数 
  154.  
  155. //卖家支付宝帐户 
  156. $seller_email = $payment['alipay_account']; 
  157. //必填 
  158.  
  159. //商户订单号 
  160. $out_trade_no = $order['order_sn'] . $order['log_id']; 
  161. //商户网站订单系统中唯一订单号,必填 
  162.  
  163. //订单名称 
  164. $subject = $order['order_sn']; 
  165. //必填 
  166.  
  167. //付款金额 
  168. $total_fee = $order['order_amount']; 
  169. //必填 
  170.  
  171. //请求业务参数详细 
  172. $req_data = '<direct_trade_create_req><notify_url>' . $notify_url . '</notify_url><call_back_url>' . $call_back_url . '</call_back_url><seller_account_name>' . $seller_email . '</seller_account_name><out_trade_no>' . $out_trade_no . '</out_trade_no><subject>' . $subject . '</subject><total_fee>' . $total_fee . '</total_fee><merchant_url>' . $merchant_url . '</merchant_url></direct_trade_create_req>'; 
  173. //必填 
  174.  
  175. /************************************************************/ 
  176.  
  177. //构造要请求的参数数组,无需改动 
  178. $para_token = array( 
  179. "service" => "alipay.wap.trade.create.direct", 
  180. "partner" => trim($alipay_config['partner']), 
  181. "sec_id" => trim($alipay_config['sign_type']), 
  182. "format" => $format, 
  183. "v" => $v, 
  184. "req_id" => $req_id, 
  185. "req_data" => $req_data, 
  186. "_input_charset" => trim(strtolower($alipay_config['input_charset'])) 
  187. ); 
  188.  
  189. //建立请求 
  190. $alipaySubmit = new AlipaySubmit($alipay_config); 
  191. $html_text = $alipaySubmit->buildRequestHttp($para_token); 
  192.  
  193. //URLDECODE返回的信息 
  194. $html_text = urldecode($html_text); 
  195.  
  196. //解析远程模拟提交后返回的信息 
  197. $para_html_text = $alipaySubmit->parseResponse($html_text); 
  198.  
  199. //获取request_token 
  200. $request_token = $para_html_text['request_token']; 
  201.  
  202. /**************************根据授权码token调用交易接口alipay.wap.auth.authAndExecute**************************/ 
  203.  
  204. //业务详细 
  205. $req_data = '<auth_and_execute_req><request_token>' . $request_token . '</request_token></auth_and_execute_req>'; 
  206. //必填 
  207.  
  208. //构造要请求的参数数组,无需改动 
  209. $parameter = array( 
  210. "service" => "alipay.wap.auth.authAndExecute", 
  211. "partner" => trim($alipay_config['partner']), 
  212. "sec_id" => trim($alipay_config['sign_type']), 
  213. "format" => $format, 
  214. "v" => $v, 
  215. "req_id" => $req_id, 
  216. "req_data" => $req_data, 
  217. "_input_charset" => trim(strtolower($alipay_config['input_charset'])) 
  218. ); 
  219.  
  220. //建立请求 
  221. $alipaySubmit = new AlipaySubmit($alipay_config); 
  222. $html_text = $alipaySubmit->buildRequestForm($parameter, 'get', '进行付款'); 
  223. return $html_text; 
  224. } 
  225.  
  226. /** 
  227. * 响应操作 
  228. */ 
  229. function respond() 
  230. { 
  231. if (!emptyempty($_POST)) 
  232. { 
  233. foreach($_POST as $key => $data) 
  234. { 
  235. $_GET[$key] = $data; 
  236. } 
  237. } 
  238.  
  239. log_write($_GET, 'alipay_wap'); 
  240. $payment = get_payment($_GET['code']); 
  241. $seller_email = rawurldecode($_GET['seller_email']); 
  242. $order_sn = str_replace($_GET['subject'], '', $_GET['out_trade_no']); 
  243. $order_sn = trim($order_sn); 
  244.  
  245. /* 检查数字签名是否正确 */ 
  246. ksort($_GET); 
  247. reset($_GET); 
  248.  
  249. //合作身份者id,以2088开头的16位纯数字 
  250. $alipay_config['partner'] = $payment['alipay_partner']; 
  251.  
  252. //签名方式 不需修改 
  253. $alipay_config['sign_type'] = '0001'; 
  254.  
  255. //安全检验码,以数字和字母组成的32位字符 
  256. //如果签名方式设置为“MD5”时,请设置该参数 
  257. //$alipay_config['key'] = $payment['alipay_key']; 
  258.  
  259. //商户的私钥(后缀是.pen)文件相对路径 
  260. //如果签名方式设置为“0001”时,请设置该参数 
  261. $alipay_config['private_key_path'] = dirname(__FILE__)."/alipay_wap/key/rsa_private_key.pem"; 
  262.  
  263. //支付宝公钥(后缀是.pen)文件相对路径 
  264. //如果签名方式设置为“0001”时,请设置该参数 
  265. $alipay_config['ali_public_key_path']= dirname(__FILE__)."/alipay_wap/key/alipay_public_key.pem"; 
  266. //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 
  267.  
  268. //字符编码格式 目前支持 gbk 或 utf-8 
  269. $alipay_config['input_charset']= 'utf-8'; 
  270.  
  271. //ca证书路径地址,用于curl中ssl校验 
  272. //请保证cacert.pem文件在当前文件夹目录中 
  273. $alipay_config['cacert'] = dirname(__FILE__)."/alipay_wap/cacert.pem"; 
  274.  
  275. //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http 
  276. $alipay_config['transport'] = 'http'; 
  277.  
  278. require_once(dirname(__FILE__)."/alipay_wap/lib/alipay_notify.class.php"); 
  279.  
  280. //计算得出通知验证结果 
  281. $alipayNotify = new AlipayNotify($alipay_config); 
  282. $verify_result = $alipayNotify->verifyNotify(); 
  283.  
  284. if(!$verify_result) {//验证不成功 
  285. return false; 
  286. } 
  287.  
  288. $notify_data = $alipayNotify->decrypt($_GET['notify_data']); 
  289.  
  290. $doc = new DOMDocument(); 
  291. $doc->loadXML($notify_data); 
  292.  
  293. if( ! emptyempty($doc->getElementsByTagName( "notify" )->item(0)->nodeValue) ) { 
  294. //商户订单号 
  295. $out_trade_no = $doc->getElementsByTagName( "out_trade_no" )->item(0)->nodeValue; 
  296. $out_trade_no = str_replace($_GET['subject'], '', $out_trade_no); 
  297. $out_trade_no = trim($out_trade_no); 
  298. //支付宝交易号 
  299. $trade_no = $doc->getElementsByTagName( "trade_no" )->item(0)->nodeValue; 
  300. //交易状态 
  301. $trade_status = $doc->getElementsByTagName( "trade_status" )->item(0)->nodeValue; 
  302.  
  303. /* 检查支付的金额是否相符 */ 
  304. if (!check_money($out_trade_no, $_GET['total_fee'])) 
  305. { 
  306. return false; 
  307. } 
  308.  
  309. if($_GET['trade_status'] == 'TRADE_FINISHED') { 
  310. /* 改变订单状态 */ 
  311. order_paid($out_trade_no); 
  312. return true; 
  313. }else if ($_GET['trade_status'] == 'TRADE_SUCCESS') { 
  314. /* 改变订单状态 */ 
  315. order_paid($out_trade_no, 2); 
  316. //phpfensi.com 
  317. return true; 
  318. }else{ 
  319. return false; 
  320. } 
  321. } 
  322.  
  323. } 
  324. } 
  325.  
  326. ?> 

Tags: Ecshop支付宝 Ecshop网页支付

分享到: