Pay.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. use addons\epay\library\Service;
  6. /**
  7. * 充值配置与充值订单
  8. */
  9. class Pay extends Api
  10. {
  11. protected $noNeedLogin = [];
  12. protected $noNeedRight = ['*'];
  13. //vip用的
  14. public function vip_config(){
  15. $list = Db::name('payvip_config')->where('is_show',1)->order('weight asc,id asc')->select();
  16. $data['vipconfig'] = $list;
  17. $data['vip_endtime'] = model('wallet')->getWallet($this->auth->id,'vip_endtime');
  18. $this->success('success',$data);
  19. }
  20. //vip用的,创建订单
  21. public function vip_recharge(){
  22. $rc_id = input('rc_id',0);
  23. $pay_type = input('pay_type','wechat');
  24. $uid = $this->auth->id;
  25. if(!$rc_id){
  26. $this->error('请选择会员套餐');
  27. }
  28. //赋值money
  29. $recharge_config = Db::name('payvip_config')->where('id',$rc_id)->find();
  30. $money = $recharge_config['money'];
  31. if($money<=0)
  32. {
  33. $this->error('支付金额必须大于0');
  34. }
  35. if($money > 10000){
  36. $this->error('支付金额太大');
  37. }
  38. //会员等级冲突
  39. //当前是会员,但是却要向下级续费,直接提示报错
  40. //修改等级,向上立刻改,向下不允许
  41. $wallet_info = model('wallet')->getWallet($this->auth->id);
  42. if($wallet_info['vip_endtime'] > time() && $recharge_config['vip_level'] < $wallet_info['vip_level']){
  43. $this->error('当前会员没有过期,不能续费');
  44. }
  45. //创建订单
  46. $data = [];
  47. $data['status'] = 0;
  48. $pay_no = createUniqueNo('V',$uid);
  49. $data['pay_no'] = $pay_no;
  50. $data['money'] = $money;
  51. $data['payment_class'] = $pay_type;
  52. $data['user_id'] = $uid;
  53. $data['ext_info'] = json_encode(['subject'=>'充值vip支付']);
  54. $data['memo'] = '充值会员支付';
  55. $data['createtime'] = time();
  56. //$data['payment'] = 'miniapp';
  57. $data['payment'] = 'app';
  58. $orderid = Db::name('pay_order')->insertGetId($data);
  59. //创建回调
  60. $even_data = [];
  61. $even_data['event'] = 'success';
  62. $even_data['class'] = 'app\common\model\Recharge';
  63. $even_data['method'] = 'vippaysucc';
  64. $even_data['args'] = json_encode(['user_id'=>$uid,'days'=>$recharge_config['days'],'vip_level'=>$recharge_config['vip_level']]);
  65. $even_data['pay_no'] = $pay_no;
  66. Db::name('pay_event')->insertGetId($even_data);
  67. $return = [
  68. 'pay_no'=>$pay_no,
  69. 'title' => '充值vip支付',
  70. ];
  71. /* $this->success('success',$return);
  72. }
  73. public function topay(){*/
  74. //$openid = $this->auth->openid;
  75. /*$pay_no = input('pay_no');
  76. $orderInfo = Db::name('pay_order')->where('pay_no',$pay_no)->find();*/
  77. //下单
  78. $params = [
  79. 'type' => $pay_type,
  80. 'orderid' => $pay_no,
  81. 'title' => $data['memo'],
  82. 'amount' => $data['money'],
  83. //'amount' => 0.01,
  84. //'method' => 'miniapp',
  85. 'method' => 'app',
  86. //'openid' => $openid,
  87. 'notifyurl' => $this->request->root(true) . '/notify.php/paytype/'.$pay_type,
  88. 'returnurl' => '',
  89. ];
  90. $res = Service::submitOrder($params);
  91. if($pay_type == 'wechat'){
  92. $this->success('success',json_decode($res,true));
  93. }else{
  94. $this->success('success',$res);
  95. }
  96. }
  97. //金币充值
  98. public function gold_config(){
  99. $list = Db::name('paygold_webcon')->order('weigh asc,id asc')->select();
  100. $data['goldconfig'] = $list;
  101. $data['gold'] = model('wallet')->getWallet($this->auth->id,'gold');
  102. $data['money_to_gold'] = config('site.money_to_gold');
  103. $this->success('success',$data);
  104. }
  105. //充值金币 创建订单
  106. public function gold_recharge(){
  107. $rc_id = input_post('rc_id',0);
  108. $pay_type = input_post('pay_type','wechat');
  109. $platform = 'app';
  110. $freemoney = input_post('freemoney',0);
  111. $uid = $this->auth->id;
  112. if(!$rc_id && !$freemoney){
  113. $this->error('请选择或填写充值金额');
  114. }
  115. //赋值money
  116. if($rc_id){
  117. $recharge_config = Db::name('paygold_webcon')->where('id',$rc_id)->find();
  118. $money = $recharge_config['money'] ?: 0;
  119. $gold = $recharge_config['gold'] ?: 0;
  120. }
  121. //自由输入覆盖
  122. if(!empty($freemoney)){
  123. $rc_id = 0;
  124. $money = floatval($freemoney);
  125. $bili = config('site.money_to_gold') ?: 10;
  126. $gold = bcmul($money,$bili,0);
  127. }
  128. //
  129. if($money<=0)
  130. {
  131. $this->error('支付金额必须大于0');
  132. }
  133. if($money > 10000){
  134. $this->error('支付金额太大');
  135. }
  136. //创建订单
  137. $data['user_id'] = $uid;
  138. $data['out_trade_no'] = createUniqueNo('P',$uid); // 数据库订单号加密
  139. $data['order_amount'] = $money;
  140. $data['createtime'] = time();
  141. $data['pay_type'] = $pay_type;
  142. $data['platform'] = $platform;
  143. $data['order_status'] = 0;
  144. $data['table_name'] = 'gold_recharge';
  145. $data['table_id'] = 0;
  146. $data['args'] = json_encode(['gold'=>$gold]);
  147. $orderid = Db::name('pay_order')->insertGetId($data);
  148. // $openid = $this->auth->mini_openid;
  149. //下单
  150. $params = [
  151. 'type' => $pay_type,
  152. 'orderid' => $data['out_trade_no'],
  153. 'title' => '支付订单',
  154. 'amount' => $data['order_amount'],
  155. 'method' => $platform,
  156. // 'openid' => $openid,
  157. 'notifyurl' => config('pay_notify_url').'/api/pay/order_notify_base/paytype/'.$pay_type,
  158. 'returnurl' => '',
  159. ];
  160. $res = Service::submitOrder($params);
  161. if($pay_type == 'wechat'){
  162. $this->success('success',json_decode($res,true));
  163. }else{
  164. $this->success('success',$res);
  165. }
  166. }
  167. }