Xiaoxiaopay_payment.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Fanwe 方维p2p借贷系统
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2011 http://www.fanwe.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: 云淡风轻(1956838968@qq.com)
  8. // +----------------------------------------------------------------------
  9. $payment_lang = array(
  10. 'name' => '小小贝支付',
  11. 'merchantID' => '商户号',
  12. 'appkey'=> '商户私钥',
  13. 'platpkey' => '平台公钥',
  14. );
  15. $config = array(
  16. 'merchantID' => array(
  17. 'INPUT_TYPE' => '0',
  18. ), //商户号
  19. 'appkey' => array(
  20. 'INPUT_TYPE' => '0',
  21. ), //商户私钥
  22. 'platpkey' => array(
  23. 'INPUT_TYPE' => '0',
  24. ), //平台公钥
  25. );
  26. /* 模块的基本信息 */
  27. if (isset($read_modules) && $read_modules == true)
  28. {
  29. $module['class_name'] = 'Xiaoxiaopay';
  30. /* 名称 */
  31. $module['name'] = $payment_lang['name'];
  32. /* 支付方式:1:在线支付;0:线下支付 2:仅wap支付 3:仅app支付 4:兼容wap和app*/
  33. $module['online_pay'] = '4';
  34. /* 配送 */
  35. $module['config'] = $config;
  36. $module['lang'] = $payment_lang;
  37. $module['reg_url'] = 'http://act.life.alipay.com/systembiz/fangwei/';
  38. return $module;
  39. }
  40. // 易宝支付模型
  41. require_once(APP_ROOT_PATH.'system/libs/payment.php');
  42. class Xiaoxiaopay_payment implements payment {
  43. public function get_payment_code($payment_notice_id)
  44. {
  45. $pay = array();
  46. $pay['is_wap'] = 1;//
  47. $pay['is_without'] = 1;//跳转外部浏览器
  48. $pay['class_name'] = "Xiaoxiaopay";
  49. $pay['url'] =SITE_DOMAIN.APP_ROOT.'/mapi/index.php?ctl=pay&act=get_display_code&pay_code=Xiaoxiaopay&notice_id='.$payment_notice_id;
  50. $pay['sdk_code'] = array("pay_sdk_type"=>"yjwap","config"=>
  51. array(
  52. "url"=>SITE_DOMAIN.APP_ROOT.'/mapi/index.php?ctl=pay&act=get_display_code&pay_code=Xiaoxiaopay&notice_id='.$payment_notice_id,
  53. "is_wap"=>1
  54. )
  55. );
  56. return $pay;
  57. }
  58. public function response($request)
  59. {
  60. //log_file('response','Xiaoxiaopay');
  61. //log_file($request,'Xiaoxiaopay');
  62. $payment = $GLOBALS['db']->getRow("select id,config from ".DB_PREFIX."payment where class_name='Xiaoxiaopay'");
  63. $payment_info['config'] = unserialize($payment['config']);
  64. require_once(APP_ROOT_PATH . 'system/payment/xiaoxiaopay/base.php');
  65. //if(!parseRespRsa($request, $payment_info['config']['platpkey'])){
  66. if(1){
  67. echo '<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=0,minimum-scale=0.5"><title></title><script>function close_page(){try{App.close_page();}catch(e){alert("SDK调用失败");}}</script></head><body><div style="width:200px;height:40px;line-height:40px;font-size:14px;text-align:center;background:#ff4d7f;color:#fff;margin:20px auto;border-radius:5px;" >支付结果!返回APP刷新查看</div></body></html>';
  68. exit;
  69. }else{
  70. $request=json_decode($request,1);
  71. if($request['resultCode'] == '20000')
  72. {
  73. $payment_notice_sn = $request['info']['pay_order'];
  74. $outer_notice_sn = $request['info']['transid'];
  75. $payment_notice = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."payment_notice where notice_sn = '".$payment_notice_sn."'");
  76. $user_diamonds = $GLOBALS['db']->getOne("select diamonds from ".DB_PREFIX."user where id = '".$payment_notice['user_id']."'");
  77. require_once APP_ROOT_PATH."system/libs/cart.php";
  78. $rs = payment_paid($payment_notice['notice_sn'],$outer_notice_sn);
  79. if($rs['status']==1)
  80. {
  81. echo '<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=0,minimum-scale=0.5"><title></title><script>function close_page(){try{App.close_page();}catch(e){alert("SDK调用失败");}}</script></head><body><div style="width:120px;height:40px;line-height:40px;font-size:14px;text-align:center;background:#ff4d7f;color:#fff;margin:20px auto;border-radius:5px;" >付款成功!当前余额:'.$user_diamonds.'</div></body></html>';
  82. exit;
  83. }
  84. else
  85. {
  86. echo '<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=0,minimum-scale=0.5"><title></title><script>function close_page(){try{App.close_page();}catch(e){alert("SDK调用失败");}}</script></head><body><div style="width:120px;height:40px;line-height:40px;font-size:14px;text-align:center;background:#ff4d7f;color:#fff;margin:20px auto;border-radius:5px;" >回调失败!关闭当前页面</div></body></html>';
  87. exit;
  88. }
  89. } else{
  90. echo '<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=0,minimum-scale=0.5"><title></title><script>function close_page(){try{App.close_page();}catch(e){alert("SDK调用失败");}}</script></head><body><div style="width:120px;height:40px;line-height:40px;font-size:14px;text-align:center;background:#ff4d7f;color:#fff;margin:20px auto;border-radius:5px;" >'.$request['msg'].'关闭当前页面</div></body></html>';
  91. exit;
  92. }
  93. }
  94. }
  95. public function notify($request)
  96. {
  97. $payment = $GLOBALS['db']->getRow("select id,config from ".DB_PREFIX."payment where class_name='Xiaoxiaopay'");
  98. $payment_info['config'] = unserialize($payment['config']);
  99. require_once(APP_ROOT_PATH . 'system/payment/xiaoxiaopay/base.php');
  100. if(!parseRespRsa($request, $payment_info['config']['platpkey'])&&0){
  101. echo 'failed';
  102. exit;
  103. }else{
  104. $request=json_decode($request,1);
  105. if($request['resultCode'] == '20000')
  106. {
  107. $payment_notice_sn = $request['info']['pay_order'];
  108. $outer_notice_sn = $request['info']['transid'];
  109. $payment_notice = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."payment_notice where notice_sn = '".$payment_notice_sn."'");
  110. require_once APP_ROOT_PATH."system/libs/cart.php";
  111. $rs = payment_paid($payment_notice['notice_sn'],$outer_notice_sn);
  112. if($rs['status']==1)
  113. {
  114. echo 'success';
  115. }
  116. else
  117. {
  118. echo 'fail';
  119. }
  120. }
  121. }
  122. }
  123. function get_display_code(){
  124. }
  125. public function display_code($payment_notice_id)
  126. {
  127. if($payment_notice_id) {
  128. $payment_notice = $GLOBALS['db']->getRow("select * from " . DB_PREFIX . "payment_notice where id = " . $payment_notice_id);
  129. $money = round($payment_notice['money'], 2);
  130. $payment_info = $GLOBALS['db']->getRow("select id,config,logo from " . DB_PREFIX . "payment where id=" . intval($payment_notice['payment_id']));
  131. $payment_info['config'] = unserialize($payment_info['config']);
  132. require_once(APP_ROOT_PATH . 'system/payment/xiaoxiaopay/base.php');
  133. $server = "http://api2.xiaoxiaopay.com:7500"; //小小贝商户后台接入url
  134. $orderUrl = $server . "/order/"; //预下单接口 url
  135. $queryResultUrl = $server . "/query/"; //主动查询订单接口 url
  136. $params = array();
  137. $params['merchantID'] = $payment_info['config']['merchantID'];
  138. $params['waresname'] = $payment_notice['recharge_name'];
  139. $params['cporderid'] = $payment_notice['notice_sn'];
  140. $params['price'] = number_format($payment_notice['money'], 2);
  141. $params['returnurl'] = 'http://live.huangjiaxiuchang.com/callback/payment/Xiaoxiaopay_response.php';
  142. $params['notifyurl'] = 'http://live.huangjiaxiuchang.com/callback/payment/Xiaoxiaopay_notify.php';
  143. $params['paytype'] = '10002';
  144. /*
  145. 10001 微信扫码支付
  146. 10002 微信外WAP支付
  147. 10003 微信内WAP支付
  148. 10004 微信APP支付
  149. 10005 支付宝扫码支付
  150. 10006 支付宝外WAP支付
  151. 10007 支付宝内WAP支付
  152. 10008 支付宝APP支付
  153. 10009 银联PC支付
  154. */
  155. $params['ip'] = get_real_ip();
  156. //$params['ext'] = '';
  157. $reqData = composeRsa($params, $payment_info['config']['appkey']);
  158. $paymentData = HttpPost($orderUrl, $reqData);
  159. $result = array();
  160. //$paymentData = '{"resultCode":20000,"sign":"jUFl2s1 CPpblAxgJTawNExAP33WfmwFpraNkBxLYiq7TAxRR0UmxSvbzmR8DKdG wsGgmTRMpO5voWgYK0qnQeHluu3yzID0igCaIyY87kOljPgcS2DNYXb06FqJdMZifdsXnVW21toJ8R76Xqbr8Y6mqycfHPYFm5G0FhjST0=","signtype":"RSA","info":{"payurl":"http://recharge.tongle.net/mpway/heewappay.aspx?state=104920170526221715258","nonceStr":"9ff062f14a0c9f2cad5163553324a696"}}';
  161. //$paymentData = {"msg":"Signature error","resultCode":10012}
  162. if (!parseRespRsa($paymentData, $payment_info['config']['platpkey'])) { //MD5的验签方法为 parseRespMd5
  163. if (isset($paymentData)) {
  164. $callback = json_decode($paymentData);
  165. $return['errcode'] = 10000;
  166. //$return['errcode'] = $callback->resultCode;
  167. $return['message'] = $callback->msg;
  168. } else {
  169. $return['errcode'] = 10000;
  170. $return['message'] = "验签失败";
  171. }
  172. } else {
  173. //解析返回报文
  174. $callback = json_decode($paymentData);
  175. //支付调起成功之后获取支付参数
  176. $url = $callback->info->payurl;
  177. //获取到支付参数后针对不同支付方式做不同处理。
  178. $return['errcode'] = 0;
  179. $return['message'] = $url;
  180. }
  181. if($return['errcode']!=0) {
  182. echo $return['message'];
  183. }else{
  184. header('Location:'.$return['message']);
  185. }
  186. }
  187. }
  188. }
  189. ?>