5242880)//大于5M自动切换 { rename($notify_file, $log_base_dir.'sandpay_notify_'.date('Y_m_d_H_i_s').'.txt'); } if(!file_exists($notify_file)) { @touch($notify_file); @chmod($notify_file, 0770); } }*/ //vip用的,创建订单废弃 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('请选择会员套餐'); } //赋值money $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'] = 'miniapp'; $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(){ $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){ // $this->error('请选择充值金额'); // } //赋值money 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.money_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() { //$input_post_data = json_encode($_POST); //filePut('[wallet][paySucc]充值参数 recharge money post'.$input_post_data); $postData = isset($_POST['data']) ? $_POST['data'] : []; $sign = isset($_POST['sign']) ? $_POST['sign'] : ''; filePut('[wallet][paySucc]充值参数 recharge money data:'.$postData."\n".' sign:'.$sign); /*$dataArr = [ "head"=>[ "version"=>"1.0", "respTime"=>"20230913093602", "respCode"=>"000000", "respMsg"=>"成功", ], "body"=>[ "mid"=>"6888806122762", "orderCode"=>"P23091309351693000123", "tradeNo"=>"P23091309351693000123", "clearDate"=>"20230913", "totalAmount"=>"000000000001", "orderStatus"=>"1", "payTime"=>"20230913093602", "settleAmount"=>"000000000001", "buyerPayAmount"=>"000000000001", "discAmount"=>"000000000000", "txnCompleteTime"=>"20230913093601", "payOrderCode"=>"20230913001224810000000000018593", "accLogonNo"=>"odk6K6wzq1m0sKwDD98Vv0xzYsIo", "accNo"=>"", "midFee"=>"000000000000", "extraFee"=>"000000000000", "specialFee"=>"000000000000", "plMidFee"=>"000000000000", "bankserial"=>"4200001938202309134493832643", "externalProductCode"=>"00002021", "cardNo"=>"", "creditFlag"=>"", "bid"=>"", "benefitAmount"=>"000000000000", "remittanceCode"=>"", "respTime"=>"20230912141303", "extend"=>[ "type" => "gold", ] ], ]; $data = ["extend"=>"", "charset"=>"UTF-8", "data"=>$dataArr, "sign"=>"hoCYCLfEmbHjoXg8KHLYU+TCwAh8HrilFUfk7x9GoXAHidKRGu+\/5CkUlC1AqY0OeD3EJKu3ckyqLFUZF4G5PbzFbV27DYNeaRNnbU8htmwCV06a9SgOumv79EJGZ78x2FmNcPL8xu8IhPoOzorLtG5uIifSbsPK4283X09ikb8wTeNFGMMEy+MioftEoOv892kFs5wbNaazJNp8IdAjRwB5wYeMJc28hfnSQfg9SsR5zpqTsMkbiQoybyVdF8msWjlXC1TD5+y33zj77If\/bOK5obSUCrdHZt7S3V5bN2HqyNtFPEK3Ipn2p\/lu3yyo9fFKC5WtgO8G20OVYCu7dQ==", "signType"=>"01", ]; $plainText = json_encode($dataArr);*/ //$plainText = '{"extend":"","charset":"UTF-8","data":"{\"head\":{\"version\":\"1.0\",\"respTime\":\"20230913093602\",\"respCode\":\"000000\",\"respMsg\":\"\u6210\u529f\"},\"body\":{\"mid\":\"6888806122762\",\"orderCode\":\"P23091309351693000123\",\"tradeNo\":\"P23091309351693000123\",\"clearDate\":\"20230913\",\"totalAmount\":\"000000000001\",\"orderStatus\":\"1\",\"payTime\":\"20230913093602\",\"settleAmount\":\"000000000001\",\"buyerPayAmount\":\"000000000001\",\"discAmount\":\"000000000000\",\"txnCompleteTime\":\"20230913093601\",\"payOrderCode\":\"20230913001224810000000000018593\",\"accLogonNo\":\"odk6K6wzq1m0sKwDD98Vv0xzYsIo\",\"accNo\":\"\",\"midFee\":\"000000000000\",\"extraFee\":\"000000000000\",\"specialFee\":\"000000000000\",\"plMidFee\":\"000000000000\",\"bankserial\":\"4200001938202309134493832643\",\"externalProductCode\":\"00002021\",\"cardNo\":\"\",\"creditFlag\":\"\",\"bid\":\"\",\"benefitAmount\":\"000000000000\",\"remittanceCode\":\"\",\"extend\":\"{\\\"type\\\":\\\"gold\\\"}\"}}","sign":"hoCYCLfEmbHjoXg8KHLYU+TCwAh8HrilFUfk7x9GoXAHidKRGu+\/5CkUlC1AqY0OeD3EJKu3ckyqLFUZF4G5PbzFbV27DYNeaRNnbU8htmwCV06a9SgOumv79EJGZ78x2FmNcPL8xu8IhPoOzorLtG5uIifSbsPK4283X09ikb8wTeNFGMMEy+MioftEoOv892kFs5wbNaazJNp8IdAjRwB5wYeMJc28hfnSQfg9SsR5zpqTsMkbiQoybyVdF8msWjlXC1TD5+y33zj77If\/bOK5obSUCrdHZt7S3V5bN2HqyNtFPEK3Ipn2p\/lu3yyo9fFKC5WtgO8G20OVYCu7dQ==","signType":"01"}'; //echo '
';var_dump($plainText);exit;

        //提取数据
        $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'] : '';
        }
        //验签 1是正确
        $sandpay = new \app\common\library\Sandpay();
        /*$plainText = '{"head":{"version":"1.0","respTime":"20230913110455","respCode":"000000","respMsg":"成功"},"body":{"mid":"6888806122762","orderCode":"P23091311040769547523","tradeNo":"P23091311040769547523","clearDate":"20230913","totalAmount":"000000000001","orderStatus":"1","payTime":"20230913110455","settleAmount":"000000000001","buyerPayAmount":"000000000001","discAmount":"000000000000","txnCompleteTime":"20230913110455","payOrderCode":"20230913001241710000000000029923","accLogonNo":"odk6K6wzq1m0sKwDD98Vv0xzYsIo","accNo":"","midFee":"000000000000","extraFee":"000000000000","specialFee":"000000000000","plMidFee":"000000000000","bankserial":"4200001942202309131368220541","externalProductCode":"00002021","cardNo":"","creditFlag":"","bid":"","benefitAmount":"000000000000","remittanceCode":"","extend":"{\"type\":\"gold\"}"}}';
        $sign = 'Vs2JTo57FwdeT78Lxi7Sgj3XLw48+XxUZblSpVnAQkpgvPqai3m4rkobG8hfuUnYCU/yXxDbYU8hEEfc9rDryT5sFPmmTYjOISJnc6jNDBs6SpeDQhAvnpiiXgZ3/hDWp8ehsgPJbHv5nqlbzLsJM1+WhfW86sfJt70oMiffQ5v9G192zerJWXF3jL9dyLM0WmG2icr9qHz12ZPFyYYonUWRIVc+jcZ0R0qrHD7wAPx+JzbK9crXnTWu1lHjOwcVUrYtMcVDv84wSxl8NnofNUCSMSxVSYHh8ZvgPis7WtgwBcy9XfD30Jux/a/V5oIbN+7yzTlEBIL9pHZb31O4fg==';*/
        $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['transaction_id'] = isset($data['body']['payOrderCode']) ? $data['body']['payOrderCode'] : ''; //因为文档说不一定有,所以不填了
        $_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;
        }

    }


}