123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- <?php
- namespace app\api\controller;
- use app\common\controller\Api;
- use think\Db;
- use bsn\Bsn;
- use app\common\library\Sms as Smslib;
- class Sandpay extends Api
- {
- protected $noNeedLogin = ['*'];
- protected $noNeedRight = ['*'];
-
-
-
- public function sand_vip_recharge(){
- $rc_id = input('rc_id',0);
- $pay_type = input('pay_type','wechat');
- $uid = $this->auth->id;
- if(!$rc_id){
- $this->error('请选择会员套餐');
- }
-
- $recharge_config = Db::name('payvip_config')->where('id',$rc_id)->find();
- $money = $recharge_config['money'];
- if($money<=0)
- {
- $this->error('支付金额必须大于0');
- }
- if($money > 10000){
- $this->error('支付金额太大');
- }
-
-
-
- $wallet_info = model('wallet')->getWallet($this->auth->id);
- if($wallet_info['vip_endtime'] > time() && $recharge_config['vip_level'] < $wallet_info['vip_level']){
- $this->error('当前会员没有过期,不能续费');
- }
-
- $data = [];
- $data['status'] = 0;
- $pay_no = createUniqueNo('V',$uid);
- $data['pay_no'] = $pay_no;
- $data['money'] = $money;
- $data['payment_class'] = $pay_type;
- $data['user_id'] = $uid;
- $data['ext_info'] = json_encode(['subject'=>'充值vip支付']);
- $data['memo'] = '充值会员支付';
- $data['createtime'] = time();
-
- $data['payment'] = 'app';
- $orderid = Db::name('pay_order')->insertGetId($data);
-
- $even_data = [];
- $even_data['event'] = 'success';
- $even_data['class'] = 'app\common\model\Recharge';
- $even_data['method'] = 'sandvippaysucc';
- $even_data['args'] = json_encode(['user_id'=>$uid,'days'=>$recharge_config['days'],'vip_level'=>$recharge_config['vip_level'],'gold_num'=>$recharge_config['gold_num'],'money'=>$money]);
- $even_data['pay_no'] = $pay_no;
- Db::name('pay_event')->insertGetId($even_data);
-
- $sandpay = new \app\common\library\Sandpay();
- $sandpayParams = [
- 'order_no' => $pay_no,
- 'goods_name' => '充值会员',
- 'money' => $money,
- 'type' => 'vip',
- ];
- $res = $sandpay->wechat($sandpayParams);
- if ($res['status'] == 1) {
- $this->success('成功', $res['data']);
- }else {
- $this->error('失败', $res['data']);
- }
- }
-
- public function sand_gold_recharge(){
- exit;
- $rc_id = input_post('rc_id',0);
- $pay_type = input_post('pay_type','wechat');
- $freemoney = input_post('freemoney', 0, 'intval');
- $uid = $this->auth->id;
- if(!$rc_id && !$freemoney){
- $this->error('请选择或填写充值金额');
- }
-
- if($rc_id){
- $recharge_config = Db::name('paygold_config')->where('id',$rc_id)->find();
- $money = $recharge_config ? $recharge_config['money']: 0;
- $gold = $recharge_config ? $recharge_config['gold'] : 0;
- $first_gold = $recharge_config ? $recharge_config['first_gold'] : 0;
- $first_vipdays = $recharge_config ? $recharge_config['first_vipdays'] : 0;
- $vip_gold = $recharge_config ? $recharge_config['vip_gold'] : 0;
- }
-
- if(!empty($freemoney)){
- $rc_id = 0;
- $money = floatval($freemoney);
- $bili = config('site.rmb_to_gold') ?: 10;
- $gold = bcmul($money,$bili,0);
- $first_gold = 0;
- $first_vipdays = 0;
- $vip_gold = 0;
- }
-
- if($money<=0)
- {
- $this->error('支付金额必须大于0');
- }
- if($money > 10000){
- $this->error('支付金额太大');
- }
-
- $vip_endtime = Db::name('user_wallet')->where('user_id',$this->auth->id)->value('vip_endtime');
- if ($vip_endtime < time()) {
- $vip_gold = 0;
- }
-
- $data = [];
- $data['status'] = 0;
- $pay_no = createUniqueNo('P',$uid);
- $data['pay_no'] = $pay_no;
- $data['money'] = $money;
- $data['payment_class'] = $pay_type;
- $data['user_id'] = $uid;
- $data['ext_info'] = json_encode(['subject'=>'充值金币支付']);
- $data['memo'] = '充值金币支付';
- $data['createtime'] = time();
- $data['payment'] = 'app';
- $orderid = Db::name('pay_order')->insertGetId($data);
-
- $even_data = [];
- $even_data['event'] = 'success';
- $even_data['class'] = 'app\common\model\Recharge';
- $even_data['method'] = 'sandgoldpaysucc';
- $even_data['args'] = json_encode(['user_id'=>$uid,'gold'=>$gold,'money'=>$money,'pg_id'=>$rc_id,'first_gold'=>$first_gold,'first_vipdays'=>$first_vipdays, 'intro_uid' => $this->auth->intro_uid, 'vip_gold' => $vip_gold]);
- $even_data['pay_no'] = $pay_no;
- Db::name('pay_event')->insertGetId($even_data);
-
- $sandpay = new \app\common\library\Sandpay();
- $sandpayParams = [
- 'order_no' => $pay_no,
- 'goods_name' => '充值金币',
- 'money' => $money,
- 'type' => 'gold',
- ];
- $res = $sandpay->wechat($sandpayParams);
- if ($res['status'] == 1) {
- $this->success('成功', $res['data']);
- }else {
- $this->error('失败', $res['data']);
- }
- }
-
- public function notify()
- {
-
-
- $postData = isset($_POST['data']) ? $_POST['data'] : [];
- $sign = isset($_POST['sign']) ? $_POST['sign'] : '';
- filePut('[wallet][paySucc]充值参数 recharge money data:'.$postData."\n".' sign:'.$sign);
-
-
-
-
- $plainText = $postData;
- $dataArray = json_decode($postData,true);
- $head = isset($dataArray['head']) ? $dataArray['head'] : [];
- $body = isset($dataArray['body']) ? $dataArray['body'] : [];
- $respCode = isset($head['respCode']) ? $head['respCode'] : '000001';
- $orderStatus = isset($body['orderStatus']) ? $body['orderStatus'] : '0';
- $orderCode = isset($body['orderCode']) ? $body['orderCode'] : '';
- $extend = isset($body['extend']) ? $body['extend'] : '';
- $extendType = '';
- if (!empty($extend)) {
- $extendArr = json_decode($extend,true);
- $extendType = isset($extendArr['type']) ? $extendArr['type'] : '';
- }
-
- $sandpay = new \app\common\library\Sandpay();
-
- $encrypt_str = $sandpay->verify($plainText, $sign);
- if($encrypt_str != 1){
- filePut('[wallet][paySucc]充值入账更新余额失败 recharge money fail'.$orderCode."\n".' data:'.$postData."\n".' sign:'.$sign);
- echo 'Fail';exit;
- }
-
- if($respCode != '000000'){
- filePut('[wallet][paySucc]验证回调状态失败 respCode'.$orderCode);
- echo 'Fail';exit;
- }
- if($orderStatus != '1'){
- filePut('[wallet][paySucc]验证回调订单状态 recharge money fail orderStatus'.$orderCode);
- echo 'Fail';exit;
- }
-
- $PayResult = Db::name('pay_order');
- $where['pay_no'] = $orderCode;
- $order_info = $PayResult->where($where)->find();
- if ($order_info['status'] == 1) {
- filePut('[wallet][paySucc]充值入账更新余额失败 recharge money fail status已更新过'.$orderCode);
- echo 'respCode=000000';exit;
- }
-
-
- $_data['status'] = 2;
- $result = $PayResult->where($where)->setField($_data);
- if ($result || 1) {
-
- $payEventWhere['pay_no'] = $orderCode;
- $payEvent = Db::name('pay_event')->where($payEventWhere)->find();
- $args = isset($payEvent['args']) ? $payEvent['args'] : '';
- $args = json_decode($args,true);
- $rechargeM = new \app\common\model\Recharge();
- if ($extendType == 'gold') {
- $payRes = $rechargeM->goldpaysucc($orderCode,$args);
- $payTypeStr = '充值';
- } elseif($extendType == 'vip') {
- $payRes = $rechargeM->vippaysucc($orderCode,$args);
- $payTypeStr = 'vip';
- } else {
- $payRes = false;
- $payTypeStr = '未知支付类型';
- }
- if(!$payRes){
- filePut('[wallet][paySucc]'.$payTypeStr.'更新失败请查看问题'.$orderCode);
- exit;
- }
- filePut('[wallet][paySucc]回调成功'.$orderCode);
- echo 'respCode=000000';exit;
- }
- }
- }
|