WxApp_payment.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. <?php
  2. $payment_lang = array(
  3. 'name' => '微信支付',
  4. 'wxapp_appid' => '开放平台账号AppID',
  5. 'wxapp_partnerid' =>'商户号Partnerid',
  6. 'wxapp_key' => '密钥KEY',
  7. 'wxapp_secret' => 'AppSecret',
  8. );
  9. $config = array(
  10. 'wxapp_appid' => array(
  11. 'INPUT_TYPE' => '0',
  12. ),
  13. 'wxapp_partnerid' => array(
  14. 'INPUT_TYPE' => '0'
  15. ),
  16. 'wxapp_key' => array(
  17. 'INPUT_TYPE' => '0'
  18. ),
  19. 'wxapp_secret' => array(
  20. 'INPUT_TYPE' => '0'
  21. )
  22. );
  23. /* 模块的基本信息 */
  24. if (isset($read_modules) && $read_modules == true)
  25. {
  26. $module['class_name'] = 'WxApp';
  27. /* 名称 */
  28. $module['name'] = $payment_lang['name'];
  29. /* 支付方式:1:在线支付;0:线下支付 2:仅wap支付 3:仅app支付 4:兼容wap和app*/
  30. $module['online_pay'] = '3';
  31. /* 配送 */
  32. $module['config'] = $config;
  33. $module['lang'] = $payment_lang;
  34. $module['reg_url'] = '';
  35. return $module;
  36. }
  37. // 支付宝手机支付模型
  38. require_once(APP_ROOT_PATH.'system/libs/payment.php');
  39. class WxApp_payment implements payment {
  40. public function get_payment_code($payment_notice_id)
  41. {
  42. $payment_notice = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."payment_notice where id = ".$payment_notice_id);
  43. $money = round($payment_notice['money'],2);
  44. $payment_info = $GLOBALS['db']->getRow("select id,config,logo from ".DB_PREFIX."payment where id=".intval($payment_notice['payment_id']));
  45. $payment_info['config'] = unserialize($payment_info['config']);
  46. $this->init_define($payment_info);
  47. $m_config = load_auto_cache("m_config");
  48. $title_name = $m_config['ticket_name'];
  49. if($title_name=='')
  50. $title_name = '虚拟印币';
  51. if(empty($title_name))
  52. {
  53. $title_name = "充值".round($payment_notice['money'],2)."元";
  54. }
  55. $pay['pay_info'] = $title_name;
  56. $pay['payment_name'] = "微信支付";
  57. $pay['pay_money'] = $money;
  58. $pay['pay_id'] = $payment_notice['id'];
  59. $pay['class_name'] = "WxApp";
  60. $subject = $title_name;
  61. $data_notify_url = SITE_DOMAIN.APP_ROOT.'/callback/payment/wxapp_notify.php';
  62. require_once(APP_ROOT_PATH.'system/payment/Wxapp/WxPay.Api.php');
  63. require_once(APP_ROOT_PATH.'system/payment/Wxapp/WxPay.Notify.php');
  64. require_once(APP_ROOT_PATH.'system/payment/Wxapp/WxPay.Data.php');
  65. //统一下单
  66. $input = new WxPayUnifiedOrder();
  67. $input->SetAppid($payment_info['config']['wxapp_appid']);
  68. $input->SetMch_id($payment_info['config']['wxapp_partnerid']);
  69. $input->SetBody($payment_notice['notice_sn']);
  70. $input->SetOut_trade_no($payment_notice['notice_sn']);
  71. $input->SetTotal_fee($money * 100);
  72. $input->SetNotify_url($data_notify_url);
  73. $input->SetTrade_type("APP");
  74. $result = WxPayApi::unifiedOrder($input);
  75. $nonce_str = WxPayApi::getNonceStr();
  76. $timestamp = get_gmtime();
  77. //调起支付
  78. $wx_pay = new WxPayDataBase();
  79. $wx_pay->Set('appid',$payment_info['config']['wxapp_appid']);
  80. $wx_pay->Set('partnerid',$payment_info['config']['wxapp_partnerid']);
  81. $wx_pay->Set('prepayid',$result['prepay_id']);//预支付交易会话ID
  82. $wx_pay->Set('package','prepay_id='.$result['prepay_id']);//android 写法
  83. $wx_pay->Set('noncestr',$nonce_str);//随机字符串
  84. $wx_pay->Set('timestamp',$timestamp);//时间戳
  85. $wx_pay->SetSign(false);//签名
  86. $pay['config'] = $wx_pay->GetValues();
  87. $wx_pay = new WxPayDataBase();
  88. $wx_pay->Set('appid',$payment_info['config']['wxapp_appid']);
  89. $wx_pay->Set('partnerid',$payment_info['config']['wxapp_partnerid']);
  90. $wx_pay->Set('prepayid',$result['prepay_id']);//预支付交易会话ID
  91. $wx_pay->Set('package','Sign=Wxpay');//ios 写法
  92. $wx_pay->Set('noncestr',$nonce_str);//随机字符串
  93. $wx_pay->Set('timestamp',$timestamp);//时间戳
  94. $wx_pay->SetSign(false);//签名
  95. $pay['config']['ios'] = $wx_pay->GetValues();
  96. $pay['config']['packagevalue'] = 'prepay_id='.$result['prepay_id'];
  97. $pay['config']['subject'] = $subject;
  98. $pay['config']['body'] = $title_name;
  99. $pay['config']['total_fee'] = $money;
  100. $pay['config']['total_fee_format'] = format_price($money);
  101. $pay['config']['out_trade_no'] = $payment_notice['notice_sn'];
  102. $pay['config']['notify_url'] = $data_notify_url;
  103. $pay['config']['key'] = $payment_info['config']['wxapp_key'];
  104. $pay['config']['secret'] = $payment_info['config']['wxapp_secret'];
  105. if(isios())
  106. {
  107. $pay['sdk_code'] = array("pay_sdk_type"=>"wxpay","config"=>
  108. array(
  109. "appid"=>$payment_info['config']['wxapp_appid'],
  110. "partnerid"=>$payment_info['config']['wxapp_partnerid'],
  111. "prepayid"=>$result['prepay_id'],
  112. "noncestr"=>$nonce_str,
  113. "timestamp"=>$timestamp,
  114. "package"=>"Sign=Wxpay",
  115. "sign" => $pay['config']['ios']['sign']
  116. )
  117. );
  118. }else{
  119. $pay['sdk_code'] = array("pay_sdk_type"=>"wxpay","config"=>
  120. array(
  121. "appid"=>$payment_info['config']['wxapp_appid'],
  122. "partnerid"=>$payment_info['config']['wxapp_partnerid'],
  123. "prepayid"=>$result['prepay_id'],
  124. "noncestr"=>$nonce_str,
  125. "timestamp"=>$timestamp,
  126. "packagevalue"=>'prepay_id='.$result['prepay_id'],
  127. "sign"=>$pay['config']['sign']
  128. )
  129. );
  130. }
  131. //支付定时日志 7天以后删除
  132. return $pay;
  133. }
  134. function init_define($payment){
  135. define('WXAPP_APPID',$payment['config']['wxapp_appid']);
  136. define('WXAPP_MCHID',$payment['config']['wxapp_partnerid']);
  137. define('WXAPP_KEY',$payment['config']['wxapp_key']);
  138. define('WXAPP_APPSECRET',$payment['config']['wxapp_secret']);
  139. define('WXAPP_SSLCERT_PATH','');
  140. define('WXAPP_SSLKEY_PATH','');
  141. define('WXAPP_CURL_PROXY_HOST',"0.0.0.0");
  142. define('WXAPP_CURL_PROXY_PORT',0);
  143. define('WXAPP_REPORT_LEVENL',1);
  144. }
  145. public function notify($request)
  146. {
  147. $payment = $GLOBALS['db']->getRow("select id,config from ".DB_PREFIX."payment where class_name='WxApp'");
  148. $payment['config'] = unserialize($payment['config']);
  149. $this->init_define($payment);
  150. require_once(APP_ROOT_PATH.'system/payment/Wxapp/WxPay.Api.php');
  151. require_once(APP_ROOT_PATH.'system/payment/Wxapp/WxPay.Notify.php');
  152. require_once(APP_ROOT_PATH.'system/payment/Wxapp/WxPay.Data.php');
  153. try {
  154. $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
  155. $result = WxPayResults::Init($xml);
  156. $verify = 1;
  157. } catch (WxPayException $e){
  158. //支付定时日志 7天以后删除
  159. log_result_wx_pay_log("充值失败result");
  160. log_result_wx_pay_log($e->errorMessage());
  161. $msg = $e->errorMessage();
  162. $verify = 0;
  163. }
  164. if ($verify == 1)
  165. {
  166. if ($result['return_code'] == 'SUCCESS'){
  167. $payment_notice_sn = $result['out_trade_no'];
  168. $outer_notice_sn = $result['transaction_id'];
  169. $payment_notice = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."payment_notice where notice_sn = '".$payment_notice_sn."'");
  170. //$order_info = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."deal_order where id = ".$payment_notice['order_id']);
  171. require_once APP_ROOT_PATH."system/libs/cart.php";
  172. $rs = payment_paid($payment_notice['notice_sn'],$outer_notice_sn);
  173. if ($rs)
  174. {
  175. //file_put_contents(APP_ROOT_PATH."/alipaylog/1.txt","");
  176. //$GLOBALS['db']->query("update ".DB_PREFIX."payment_notice set outer_notice_sn = '".$outer_notice_sn."' where id = ".$payment_notice['id']);
  177. //order_paid($payment_notice['order_id']);
  178. echo "success";
  179. }else{
  180. //file_put_contents(APP_ROOT_PATH."/alipaylog/2.txt","");
  181. echo "success";
  182. }
  183. }else{
  184. //file_put_contents(APP_ROOT_PATH."/alipaylog/3.txt","");
  185. echo "fail";
  186. }
  187. }
  188. else
  189. {
  190. //file_put_contents(APP_ROOT_PATH."/alipaylog/4.txt","");
  191. echo "fail";
  192. }
  193. exit;
  194. }
  195. //响应通知
  196. function response($request)
  197. {}
  198. //获取接口的显示
  199. function get_display_code()
  200. {
  201. return "微信支付";
  202. }
  203. }
  204. ?>