site.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. <?php
  2. /**
  3. * [WeEngine System] Copyright (c) 2014 WE7.CC
  4. * WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details.
  5. */
  6. defined('IN_IA') or exit('Access Denied');
  7. class RechargeModuleSite extends WeModuleSite {
  8. public function doMobilePay() {
  9. global $_W, $_GPC;
  10. checkauth();
  11. $type = !empty($_GPC['type']) ? safe_gpc_string($_GPC['type']) : 'credit';
  12. if ('credit' == $type) {
  13. if (checksubmit()) {
  14. $fee = floatval($_GPC['fee']);
  15. $backtype = safe_gpc_string($_GPC['backtype']);
  16. $back = floatval($_GPC['back']);
  17. if (empty($fee) || $fee <= 0) {
  18. message('请选择充值金额', referer(), 'error');
  19. }
  20. $chargerecord = array(
  21. 'uid' => $_W['member']['uid'],
  22. 'openid' => $_W['openid'],
  23. 'uniacid' => $_W['uniacid'],
  24. 'tid' => date('YmdHi') . random(8, 1),
  25. 'fee' => $fee,
  26. 'type' => 'credit',
  27. 'tag' => $back,
  28. 'backtype' => $backtype,
  29. 'status' => 0,
  30. 'createtime' => TIMESTAMP,
  31. );
  32. if (!table('mc_credits_recharge')->fill($chargerecord)->save()) {
  33. message('创建充值订单失败,请重试!', url('entry', array('m' => 'recharge', 'do' => 'pay')), 'error');
  34. }
  35. $params = array(
  36. 'tid' => $chargerecord['tid'],
  37. 'ordersn' => $chargerecord['tid'],
  38. 'title' => '会员余额充值',
  39. 'fee' => $chargerecord['fee'],
  40. 'user' => $_W['member']['uid'],
  41. );
  42. $mine = array();
  43. if (empty($backtype)) {
  44. $condition = $fee;
  45. $mine = array(
  46. 'name' => "充{$condition}送{$back}元",
  47. 'value' => $fee,
  48. );
  49. } elseif ('1' == $backtype) {
  50. $condition = $fee;
  51. $mine = array(
  52. 'name' => "充{$condition}送{$back}积分",
  53. 'value' => $fee,
  54. );
  55. } elseif ('2' == $backtype) {
  56. $condition = $fee;
  57. }
  58. $this->pay($params, $mine);
  59. exit();
  60. }
  61. $member = mc_fetch($_W['member']['uid']);
  62. $name = $member['mobile'];
  63. if (empty($name)) {
  64. $name = $member['realname'];
  65. }
  66. if (empty($name)) {
  67. $name = $member['uid'];
  68. }
  69. include $this->template('recharge');
  70. } else {
  71. $fee = floatval($_GPC['fee']);
  72. if (!$fee) {
  73. message('充值金额不能为0', referer(), 'error');
  74. }
  75. if ($fee <= 0) {
  76. message('请输入充值的金额', referer(), 'error');
  77. }
  78. $setting = table('mc_card')->getByStatus(1, $_W['uniacid']);
  79. if (empty($setting)) {
  80. message('会员卡未开启,请联系商家', referer(), 'error');
  81. }
  82. if ('card_nums' == $type) {
  83. if (!$setting['nums_status']) {
  84. message("会员卡未开启{$setting['nums_text']}充值,请联系商家", referer(), 'error');
  85. }
  86. $setting['nums'] = iunserializer($setting['nums']);
  87. $num_keys = array_keys($setting['nums']);
  88. if (!in_array($fee, $num_keys)) {
  89. message('充值金额错误,请联系商家', referer(), 'error');
  90. }
  91. foreach ($setting['nums'] as $key => $val) {
  92. if ($fee == $val['recharge']) {
  93. $num_back = $val['num'];
  94. }
  95. }
  96. $mine = array(
  97. 'name' => "充{$fee}送{$num_back}次",
  98. 'value' => "送{$num_back}次",
  99. );
  100. $tag = $num_back;
  101. }
  102. if ('card_times' == $type) {
  103. if (!$setting['times_status']) {
  104. message("会员卡未开启{$setting['times_text']}充值,请联系商家", referer(), 'error');
  105. }
  106. $setting['times'] = iunserializer($setting['times']);
  107. $time_keys = array_keys($setting['times']);
  108. if (!in_array($fee, $time_keys)) {
  109. message('充值金额错误,请联系商家', referer(), 'error');
  110. }
  111. foreach ($setting['times'] as $key => $val) {
  112. if ($fee == $val['recharge']) {
  113. $time_back = $val['time'];
  114. }
  115. }
  116. $member_card = table('mc_card_members')->getByUid($_W['member']['uid'], $_W['uniacid']);
  117. if ($member_card['endtime'] > TIMESTAMP) {
  118. $endtime = $member_card['endtime'] + time_back * 86400;
  119. } else {
  120. $endtime = strtotime($time_back . 'days');
  121. }
  122. $mine = array(
  123. 'name' => "充{$fee}送{$time_back}天",
  124. 'value' => date('Y-m-d', $endtime) . '到期',
  125. );
  126. $tag = $time_back;
  127. }
  128. $chargerecord = table('mc_credits_recharge')
  129. ->where(array(
  130. 'uniacid' => $_W['uniacid'],
  131. 'uid' => $_W['member']['uid'],
  132. 'fee' => $fee,
  133. 'type' => $type,
  134. 'status' => 0,
  135. 'tag' => $tag,
  136. ))
  137. ->get();
  138. if (empty($chargerecord)) {
  139. $chargerecord = array(
  140. 'uid' => $_W['member']['uid'],
  141. 'openid' => $_W['openid'],
  142. 'uniacid' => $_W['uniacid'],
  143. 'tid' => date('YmdHi') . random(8, 1),
  144. 'fee' => $fee,
  145. 'type' => $type,
  146. 'tag' => $tag,
  147. 'status' => 0,
  148. 'createtime' => TIMESTAMP,
  149. );
  150. if (!table('mc_credits_recharge')->fill($chargerecord)->save()) {
  151. message('创建充值订单失败,请重试!', url('mc/card/mycard'), 'error');
  152. }
  153. }
  154. $types = array(
  155. 'card_nums' => $setting['nums_text'],
  156. 'card_times' => $setting['times_text'],
  157. );
  158. $params = array(
  159. 'tid' => $chargerecord['tid'],
  160. 'ordersn' => $chargerecord['tid'],
  161. 'title' => "会员卡{$types[$type]}充值",
  162. 'fee' => $chargerecord['fee'],
  163. 'user' => $_W['member']['uid'],
  164. );
  165. $this->pay($params, $mine);
  166. exit();
  167. }
  168. }
  169. public function payResult($params) {
  170. global $_W;
  171. load()->model('mc');
  172. load()->model('card');
  173. $order = table('mc_credits_recharge')->where(array('tid' => $params['tid']))->get();
  174. if ('success' == $params['result'] && 'notify' == $params['from']) {
  175. $fee = $params['fee'];
  176. $total_fee = $fee;
  177. $data = array('status' => 'success' == $params['result'] ? 1 : -1);
  178. if ('wechat' == $params['type']) {
  179. $data['transid'] = $params['tag']['transaction_id'];
  180. $params['user'] = mc_openid2uid($params['user']);
  181. }
  182. table('mc_credits_recharge')->where(array('tid' => $params['tid']))->fill($data)->save();
  183. $paydata = array('wechat' => '微信', 'alipay' => '支付宝', 'baifubao' => '百付宝', 'unionpay' => '银联');
  184. if (empty($order['type']) || 'credit' == $order['type']) {
  185. $setting = uni_setting($_W['uniacid'], array('creditbehaviors', 'recharge'));
  186. $credit = $setting['creditbehaviors']['currency'];
  187. $we7_coupon_info = module_fetch('we7_coupon');
  188. if (!empty($we7_coupon_info)) {
  189. $recharge_settings = card_params_setting('cardRecharge');
  190. $recharge_params = $recharge_settings['params'];
  191. } else {
  192. $recharge_params = array(
  193. 'recharge_type' => '',
  194. 'recharges' => ''
  195. );
  196. }
  197. if (empty($credit)) {
  198. message('站点积分行为参数配置错误,请联系服务商', '', 'error');
  199. } else {
  200. if ('1' == $recharge_params['recharge_type']) {
  201. $recharges = $recharge_params['recharges'];
  202. }
  203. if ('2' == $order['backtype']) {
  204. $total_fee = $fee;
  205. } else {
  206. foreach ($recharges as $key => $recharge) {
  207. if ($recharge['backtype'] == $order['backtype'] && $recharge['condition'] == $order['fee']) {
  208. if ('1' == $order['backtype']) {
  209. $total_fee = $fee;
  210. $add_credit = $recharge['back'];
  211. } else {
  212. $total_fee = $fee + $recharge['back'];
  213. }
  214. }
  215. }
  216. }
  217. if ('1' == $order['backtype']) {
  218. $add_str = ",充值成功,返积分{$add_credit}分,本次操作共增加余额{$total_fee}元,积分{$add_credit}分";
  219. $remark = '用户通过' . $paydata[$params['type']] . '充值' . $fee . $add_str;
  220. $record[] = $params['user'];
  221. $record[] = $remark;
  222. mc_credit_update($order['uid'], 'credit1', $add_credit, $record);
  223. mc_credit_update($order['uid'], 'credit2', $total_fee, $record);
  224. mc_notice_recharge($order['openid'], $order['uid'], $total_fee, '', $remark);
  225. } else {
  226. $add_str = ",充值成功,本次操作共增加余额{$total_fee}元";
  227. $remark = '用户通过' . $paydata[$params['type']] . '充值' . $fee . $add_str;
  228. $record[] = $params['user'];
  229. $record[] = $remark;
  230. mc_credit_update($order['uid'], 'credit2', $total_fee, $record);
  231. mc_notice_recharge($order['openid'], $order['uid'], $total_fee, '', $remark);
  232. }
  233. }
  234. }
  235. if ('card_nums' == $order['type']) {
  236. $member_card = table('mc_card_members')->getByUid($order['uid'], $_W['uniacid']);
  237. $total_num = $member_card['nums'] + $order['tag'];
  238. table('mc_card_members')
  239. ->where(array(
  240. 'uniacid' => $order['uniacid'],
  241. 'uid' => $order['uid']
  242. ))
  243. ->fill( array('nums' => $total_num))
  244. ->save();
  245. $log = array(
  246. 'uniacid' => $order['uniacid'],
  247. 'uid' => $order['uid'],
  248. 'type' => 'nums',
  249. 'fee' => $params['fee'],
  250. 'model' => '1',
  251. 'tag' => $order['tag'],
  252. 'note' => date('Y-m-d H:i') . "通过{$paydata[$params['type']]}充值{$params['fee']}元,返{$order['tag']}次,总共剩余{$total_num}次",
  253. 'addtime' => TIMESTAMP,
  254. );
  255. table('mc_card_record')->fill($log)->save();
  256. $type = table('mc_card')->where(array('uniacid' => $order['uniacid']))->getcolumn('nums_text');
  257. $total_num = $member_card['nums'] + $order['tag'];
  258. mc_notice_nums_plus($order['openid'], $type, $order['tag'], $total_num);
  259. }
  260. if ('card_times' == $order['type']) {
  261. $member_card = table('mc_card_members')->getByUid($order['uid'], $_W['uniacid']);
  262. if ($member_card['endtime'] > TIMESTAMP) {
  263. $endtime = $member_card['endtime'] + $order['tag'] * 86400;
  264. } else {
  265. $endtime = strtotime($order['tag'] . 'days');
  266. }
  267. table('mc_card_members')
  268. ->where(array(
  269. 'uniacid' => $order['uniacid'],
  270. 'uid' => $order['uid']
  271. ))
  272. ->fill(array('endtime' => $endtime))
  273. ->save();
  274. $log = array(
  275. 'uniacid' => $order['uniacid'],
  276. 'uid' => $order['uid'],
  277. 'type' => 'times',
  278. 'model' => '1',
  279. 'fee' => $params['fee'],
  280. 'tag' => $order['tag'],
  281. 'note' => date('Y-m-d H:i') . "通过{$paydata[$params['type']]}充值{$params['fee']}元,返{$order['tag']}天,充值后到期时间:" . date('Y-m-d', $endtime),
  282. 'addtime' => TIMESTAMP,
  283. );
  284. table('mc_card_record')->fill($log)->save();
  285. $type = table('mc_card')->where(array('uniacid' => $order['uniacid']))->getcolumn('times_text');
  286. $endtime = date('Y-m-d', $endtime);
  287. mc_notice_times_plus($order['openid'], $member_card['cardsn'], $type, $fee, $order['tag'], $endtime);
  288. }
  289. }
  290. if ('credit' == $order['type'] || '' == $order['type']) {
  291. $url = murl('mc/home');
  292. } else {
  293. $url = murl('mc/card/mycard');
  294. }
  295. if ('return' == $params['from']) {
  296. if ('success' == $params['result']) {
  297. message('支付成功!', $_W['siteroot'] . 'app/' . $url, 'success');
  298. } else {
  299. message('支付失败!', $_W['siteroot'] . 'app/' . $url, 'error');
  300. }
  301. }
  302. }
  303. protected function pay($params = array(), $mine = array()) {
  304. global $_W;
  305. $params['module'] = $this->module['name'];
  306. $log = table('core_paylog')
  307. ->where(array(
  308. 'uniacid' => $_W['uniacid'],
  309. 'module' => $params['module'],
  310. 'tid' => $params['tid'],
  311. ))
  312. ->get();
  313. if (!empty($log) && '1' == $log['status']) {
  314. itoast('这个订单已经支付成功, 不需要重复支付.', '', 'info');
  315. }
  316. $setting = uni_setting($_W['uniacid'], array('payment', 'creditbehaviors'));
  317. if (!is_array($setting['payment'])) {
  318. itoast('没有有效的支付方式, 请联系网站管理员.', '', 'error');
  319. }
  320. if (empty($log)) {
  321. $log = array(
  322. 'uniacid' => $_W['uniacid'],
  323. 'acid' => $_W['acid'],
  324. 'openid' => $_W['member']['uid'],
  325. 'module' => $this->module['name'],
  326. 'tid' => $params['tid'],
  327. 'fee' => $params['fee'],
  328. 'card_fee' => $params['fee'],
  329. 'status' => '0',
  330. 'is_usecard' => '0',
  331. );
  332. table('core_paylog')->fill($log)->save();
  333. }
  334. $pay = $setting['payment'];
  335. foreach ($pay as &$value) {
  336. $value['switch'] = $value['recharge_switch'];
  337. }
  338. unset($value);
  339. $pay['credit']['switch'] = false;
  340. $pay['delivery']['switch'] = false;
  341. include $this->template('common/paycenter');
  342. }
  343. }