分享

Thinkphp各大支付平台在线支付集成源码

 quasiceo 2018-01-24

用Thinkphp给客户开发网站的时候需要用到各大平台付款功能,下面就免费分享给大家,此类是个成熟类,网上下载的经过修改,亲测了(可以直接拿来使用,附带使用方法,有需要的朋友请拿走。),如果有需要安装的演示请登陆“二当家的”查看:http://www./php/524.html


目前包含了支付宝pc版、支付宝wap版、palpay、yeepay、unionpay、kuaiqian、财付通tenpay等,这几个常用的支付平台,支付方式均为即时到账,不包含担保支付。


  1. 支付配置ThinkPay\Application\Common\Conf\config.php  
  2.   
  3. array(  
  4. /* 支付设置 */  
  5. 'payment' => array(  
  6. 'tenpay' => array(  
  7. // 加密key,开通财付通账户后给予  
  8. 'key' => 'e82573dc7e6136ba414f2e2affbe39fa',  
  9. // 合作者ID,财付通有该配置,开通财付通账户后给予  
  10. 'partner' => '1900000113'  
  11. ),  
  12. 'alipay' => array(  
  13. // 收款账号邮箱  
  14. 'email' => 'chenf003@yahoo.cn',  
  15. // 加密key,开通支付宝账户后给予  
  16. 'key' => 'aaa',  
  17. // 合作者ID,支付宝有该配置,开通易宝账户后给予  
  18. 'partner' => '2088101000137799'  
  19. ),  
  20. 'aliwappay' => array(  
  21. // 收款账号邮箱  
  22. 'email' => 'chenf003@yahoo.cn',  
  23. // 加密key,开通支付宝账户后给予  
  24. 'key' => 'aaa',  
  25. // 合作者ID,支付宝有该配置,开通易宝账户后给予  
  26. 'partner' => '2088101000137799'  
  27. ),  
  28. 'palpay' => array(  
  29. 'business' => 'zyj@qq.com'  
  30. ),  
  31. 'yeepay' => array(  
  32. 'key' => '69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl',  
  33. 'partner' => '10001126856'  
  34. ),  
  35. 'kuaiqian' => array(  
  36. 'key' => '1234567897654321',  
  37. 'partner' => '1000300079901'  
  38. ),  
  39. 'unionpay' => array(  
  40. 'key' => '88888888',  
  41. 'partner' => '105550149170027'  
  42. )  
  43. )  
  44. );  
  45.   
  46. 支付生成订单 ThinkPay\ThinkPHP\Library\Think\Pay.class.php  
  47.   
  48. function buildRequestForm(Pay\PayVo $vo) {  
  49. $this->payer->check();  
  50. //生成本地记录数据  
  51. $check = M("Pay")->add(array(  
  52. 'out_trade_no' => $vo->getOrderNo(),  
  53. 'money' => $vo->getFee(),  
  54. 'status' => 0,  
  55. 'callback' => $vo->getCallback(),  
  56. 'url' => $vo->getUrl(),  
  57. 'param' => serialize($vo->getParam()),  
  58. 'create_time' => time(),  
  59. 'update_time' => time()  
  60. ));  
  61.   
  62. if ($check !== false) {  
  63. return $this->payer->buildRequestForm($vo);  
  64. } else {  
  65. E(M("Pay")->getDbError());  
  66. }  
  67. }  
  68.   
  69. 支付订单表  
  70.   
  71. /** 
  72. 数据库 
  73. CREATE TABLE `think_pay` ( 
  74. `out_trade_no` varchar(100) NOT NULL, 
  75. `money` decimal(10,2) NOT NULL, 
  76. `status` tinyint(1) NOT NULL DEFAULT '0', 
  77. `callback` varchar(255) NOT NULL, 
  78. `url` varchar(255) NOT NULL, 
  79. `param` text NOT NULL, 
  80. `create_time` int(11) NOT NULL, 
  81. `update_time` int(11) NOT NULL, 
  82. PRIMARY KEY (`out_trade_no`) 
  83. ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
  84. */  
  85.   
  86. alipay配置ThinkPay\ThinkPHP\Library\Think\Pay\Driver\Alipay.class.php  
  87.   
  88. protected $gateway = 'https://mapi.alipay.com/gateway.do';  
  89. protected $verify_url = 'http://notify.alipay.com/trade/notify_query.do';  
  90. protected $config = array(  
  91. 'email' => '',  
  92. 'key' => '',  
  93. 'partner' => ''  
  94. );  
  95.   
  96. md5加密  
  97.   
  98. public function buildRequestForm(\Think\Pay\PayVo $vo) {  
  99. $param = array(  
  100. 'service' => 'create_direct_pay_by_user',  
  101. 'payment_type' => '1',  
  102. '_input_charset' => 'utf-8',  
  103. 'seller_email' => $this->config['email'],  
  104. 'partner' => $this->config['partner'],  
  105. 'notify_url' => $this->config['notify_url'],  
  106. 'return_url' => $this->config['return_url'],  
  107. 'out_trade_no' => $vo->getOrderNo(),  
  108. 'subject' => $vo->gettitle(),  
  109. 'body' => $vo->getBody(),  
  110. 'total_fee' => $vo->getFee()  
  111. );  
  112.   
  113. ksort($param);  
  114. reset($param);  
  115.   
  116. $arg = '';  
  117. foreach ($param as $key => $value) {  
  118. if ($value) {  
  119. $arg .= "$key=$value&";  
  120. }  
  121. }  
  122.   
  123. $param['sign'] = md5(substr($arg, 0, -1) . $this->config['key']);  
  124. $param['sign_type'] = 'MD5';  
  125.   
  126. $sHtml = $this->_buildForm($param, $this->gateway, 'get');  
  127.   
  128. return $sHtml;  
  129. }  
  130.   
  131. 支付成功后回调地址ThinkPay\Application\Home\Controller\PublicController.class.php  
  132.   
  133. public function notify() {  
  134. $apitype = I('get.apitype');  
  135.   
  136. $pay = new \Think\Pay($apitype, C('payment.' . $apitype));  
  137. if (IS_POST && !empty($_POST)) {  
  138. $notify = $_POST;  
  139. } elseif (IS_GET && !empty($_GET)) {  
  140. $notify = $_GET;  
  141. unset($notify['method']);  
  142. unset($notify['apitype']);  
  143. } else {  
  144. exit('Access Denied');  
  145. }  
  146. //验证  
  147. if ($pay->verifyNotify($notify)) {  
  148. //获取订单信息  
  149. $info = $pay->getInfo();  
  150.   
  151. if ($info['status']) {  
  152. $payinfo = M("Pay")->field(true)->where(array('out_trade_no' => $info['out_trade_no']))->find();  
  153. if ($payinfo['status'] == 0 && $payinfo['callback']) {  
  154. session("pay_verify", true);  
  155. $check = R($payinfo['callback'], array('money' => $payinfo['money'], 'param' => unserialize($payinfo['param'])));  
  156. if ($check !== false) {  
  157. M("Pay")->where(array('out_trade_no' => $info['out_trade_no']))->setField(array('update_time' => time(), 'status' => 1));  
  158. }  
  159. }  
  160. if (I('get.method') == "return") {  
  161. redirect($payinfo['url']);  
  162. } else {  
  163. $pay->notifySuccess();  
  164. }  
  165. } else {  
  166. $this->error("支付失败!");  
  167. }  
  168. } else {  
  169. E("Access Denied");  
  170. }  
  171. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约