magapp_pay.inc.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. /**
  3. * [超级活动(xj_event.{modulename})] (C)2012-2099 Powered by 逍遥工作室.
  4. * Version: 1.0
  5. * Date: 2012-9-15 10:27
  6. */
  7. if(!defined('IN_DISCUZ')) {
  8. exit('Access Denied');
  9. }
  10. //调用核心类
  11. include 'source/plugin/xj_event/include/core.class.php';
  12. $eventcore = new xj_eventcore();
  13. $applyid = intval($_GET['applyid']);
  14. $apply = DB::fetch_first("SELECT tid,applyid,applynumber FROM ".DB::table('xj_eventapply')." WHERE applyid = $applyid and uid=".$_G['uid']);
  15. $tid = $apply['tid'];
  16. $items = DB::fetch_first("SELECT A.*,B.subject FROM ".DB::table('xj_event')." A,".DB::table('forum_thread')." B WHERE A.tid = $tid and A.tid=B.tid");
  17. $setting = unserialize($items['setting']);
  18. $pay_subject = $items['subject'];
  19. $pay_price = $items['use_cost'];
  20. $pay_number = DB::result_first("SELECT sum(applynumber) FROM ".DB::table('xj_eventapply')." WHERE tid = '$tid' and uid=".$_G['uid']);
  21. //判断报名名额是否够,不够就不让支付
  22. if($items['event_number']>0){
  23. $applycountnumber = DB::result_first("SELECT SUM(applynumber) FROM ".DB::table('xj_eventapply')." WHERE tid='$tid' and verify=1");
  24. if($pay_number > ($items['event_number']-$applycountnumber)){
  25. showmessage(lang('plugin/xj_event','baomrsym'));
  26. exit();
  27. }
  28. }
  29. $pay_totalprice = $pay_price * $pay_number;
  30. if($_G['charset']=='gbk'){
  31. $pay_subject = cutstr($pay_subject,20,'');
  32. $pay_subject = iconv('GBK','UTF-8',$pay_subject);
  33. }
  34. //如果是多种报名
  35. if($setting['cost']){
  36. if($setting['nodaibaoming']){
  37. $capply = DB::fetch_first("SELECT * FROM ".DB::table('xj_eventapply')." WHERE tid = '$tid' and uid=".$_G['uid']);
  38. $capply['ufielddata'] = unserialize($capply['ufielddata']);
  39. $price = 0;
  40. $paytext = '';
  41. foreach($setting['cost'] as $value){
  42. $paytext = $paytext.$value['cost_name'].' '.$capply['ufielddata']['cost'.$value['id']].' x &yen;'.$value['cost_price'].'<br>';
  43. $price = $price+$capply['ufielddata']['cost'.$value['id']]*$value['cost_price'];
  44. }
  45. }else{
  46. $capply = DB::fetch_all("SELECT * FROM ".DB::table('xj_eventapply')." WHERE tid = '$tid' and uid=".$_G['uid']);
  47. $price = 0;
  48. $paytext = '';
  49. foreach($capply as $value){
  50. $value['ufielddata'] = unserialize($value['ufielddata']);
  51. $paytext = $paytext.$setting['cost'][$value['ufielddata']['costclass']]['cost_name'].' 1 x &yen;'.$setting['cost'][$value['ufielddata']['costclass']]['cost_price'].'<br>';
  52. $price = $price + $setting['cost'][$value['ufielddata']['costclass']]['cost_price'];
  53. }
  54. }
  55. $pay_totalprice = $price;
  56. }
  57. //VIP折扣
  58. if(file_exists(DISCUZ_ROOT.'./source/plugin/xj_event/module/vip/wxpay.php')) {
  59. @include 'module/vip/wxpay.php';
  60. }
  61. if($setting['app_benefit']>0){
  62. $pay_totalprice = $pay_totalprice - $setting['app_benefit'];
  63. }
  64. if(file_exists($xj_event_wxset = DISCUZ_ROOT.'./data/sysdata/cache_xj_event_wxset.php')) {
  65. @include $xj_event_wxset;
  66. }
  67. $magappsecret = $wxset['magapp_secret'];
  68. $tradeno = getRandChar(20);
  69. $callback = $_G['siteurl'].'source/plugin/xj_event/event_pay_magapp_notify.php?tradeNo='.$tradeno; //回调地址
  70. $res = get('http'.($_G['isHTTPS']?'s':'').'://'.$wxset['magapp_siteurl'].'/core/pay/pay/unifiedOrder?trade_no='.$tradeno.'&amount='.$pay_totalprice.'&title='.$pay_subject.'&user_id='.$_G['uid'].'&des='.$pay_subject.'&remark='.$pay_subject.'&secret='.$magappsecret.'&callback='.urlencode($callback));
  71. $res = json_decode($res,true);
  72. if(!$res['success']){
  73. echo 'http'.($_G['isHTTPS']?'s':'').'://'.$wxset['magapp_siteurl'].'/core/pay/pay/unifiedOrder?trade_no='.$tradeno.'&amount='.$pay_totalprice.'&title='.$pay_subject.'&user_id='.$_G['uid'].'&des='.$pay_subject.'&remark=&secret='.$magappsecret.'&callback='.urlencode($callback);
  74. echo $_G['charset'] == 'gbk'?iconv('utf-8','gbk',$res['msg']):$res['msg'];
  75. exit;
  76. }
  77. //数据库生成支付记录
  78. $paylog = array();
  79. $paylog['applyid'] = $apply['applyid'];
  80. $paylog['uid'] = $_G['uid'];
  81. $paylog['tid'] = $tid;
  82. $paylog['tradeno'] = $tradeno;
  83. $paylog['paytype'] = 'magapppay';
  84. $paylog['subject'] = $items['subject'];
  85. $paylog['price'] = $pay_price;
  86. $paylog['buyer_email'] = '';
  87. $paylog['total_fee'] = $pay_totalprice;
  88. $paylog['create_time'] = $_G['timestamp'];
  89. $paylog['paystate'] = 1;
  90. DB::insert("xj_eventpay_log",$paylog);
  91. $result['full'] = 1;
  92. $result['unionOrderNum'] = $res['data']['unionOrderNum'];
  93. $result['price'] = $pay_totalprice;
  94. $result['tradeno'] = $tradeno;
  95. $result['pay_subject'] = $pay_subject;
  96. echo json_encode($result);
  97. exit;
  98. function get($url) {
  99. $ch = curl_init();
  100. curl_setopt($ch, CURLOPT_URL, $url);
  101. # curl_setopt($ch, CURLOPT_HEADER, 1);
  102. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  103. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  104. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  105. if (!curl_exec($ch)) {
  106. error_log(curl_error($ch));
  107. $data = '';
  108. } else {
  109. $data = curl_multi_getcontent($ch);
  110. }
  111. curl_close($ch);
  112. return $data;
  113. }
  114. function getRandChar($length){
  115. $str = null;
  116. $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
  117. $max = strlen($strPol)-1;
  118. for($i=0;$i<$length;$i++){
  119. $str.=$strPol[rand(0,$max)];//rand($min,$max)生成介于min和max两个数之间的一个随机整数
  120. }
  121. return $str;
  122. }
  123. ?>