<?php namespace app\api\controller; use app\admin\model\Company; use app\admin\model\LaveMonth; use app\admin\model\WechatPlan; use app\admin\model\WechatPlanRecord; use app\common\controller\Api; use app\common\model\{Category, Lave as LaveModel, User}; use app\common\model\LaveMonth as LaveMonthModel; use liuniu\repositories\LaveRepository; use liuniu\UtilService; use liuniu\WechatService; use think\Request; class Lave extends Api { protected $noNeedLogin = ['*']; protected $noNeedRight = ['*']; public function lst(Request $request) { $where = UtilService::getMore( [ ['page', 1], ['limit', 10], ['cid', $this->cid], ['paid', 1], ['category_id', 0], ['order', ''], ['key', ''], ], $request ); $this->success('获取成功', LaveModel::lst($where)); } public function ify() { $this->success('获取成功', Category::getCategoryArray('lave', null, $this->cid)); } public function create(Request $request) { $where = UtilService::postMore( [ ['cid', $this->cid], ['user_id', $this->auth->getUserinfo()['id']], ['order_name', ''], ['category_id', 0], ['amount', 0], ['name', ''], ['contact', ''], ['tel', 0], ['address', ''], ['is_open', '0'], ['is_ticket', '0'], ['pay_type', '0'], ['type', '0'], ['help_id', 0], ['from', 'weixin'], ], $request ); $where1 = $where; unset($where1['from']); $where1['order_id'] = LaveModel::getNewOrderId(); if (cache('lave_' . $where['user_id'])) $this->error('正在处理中'); @file_put_contents("lave.txt", json_encode($where1)); $order = LaveModel::create($where1); cache('lave_' . $where['user_id'], '1', 10); if (!$order) $this->error(LaveModel::getErrorInfo()); $orderId = $order['order_id']; $info = compact('orderId'); if ($orderId) { $orderInfo = LaveModel::where('order_id', $orderId)->find(); if (!$orderInfo || !isset($orderInfo['paid'])) $this->error('支付订单不存在!'); if ($orderInfo['paid']) $this->error('支付已支付!'); try { if ($where['from'] == 'routine') { $jsConfig = LaveRepository::jsPay($this->cid, $orderId); //创建订单jspay } else if ($where['from'] == 'weixinh5') { $jsConfig = LaveRepository::h5Pay($this->cid, $orderId); } else { $jsConfig = LaveRepository::wxPay($this->cid, $orderId); } } catch (\Exception $e) { return $this->error($e->getMessage()); } $info['jsConfig'] = $jsConfig; return $this->success('订单创建成功', $info); } else $this->error(LaveModel::getErrorInfo()); } public function mylst(Request $request) { $where = UtilService::getMore( [ ['page', 1], ['limit', 10], ['cid', $this->cid], ['user_id', $this->auth->getUserinfo()['id']], ['paid', -1], ['category_id', 0], ], $request ); $this->success('获取成功', LaveModel::lst($where)); } /** * 订单支付 * @param Request $request * @return mixed */ public function pay(Request $request) { list($uni, $paytype, $from) = UtilService::postMore([ ['uni', ''], ['paytype', '0'], ['from', 'weixin'] ], $request, true); if (!$uni) $this->error('参数错误!'); $order = LaveModel::where('cid', $this->cid)->where('order_id', $uni)->find(); if (!$order) $this->error('订单不存在!'); if ($order['paid']) $this->error('该订单已支付!'); $order['pay_type'] = $paytype; //重新支付选择支付方式 switch ($order['pay_type']) { case '0': try { if ($from == 'routine') { $jsConfig = LaveRepository::jsPay($this->cid, $order); //订单列表发起支付 } else if ($from == 'weixinh5') { $jsConfig = LaveRepository::h5Pay($this->cid, $order); } else { $jsConfig = LaveRepository::wxPay($this->cid, $order); } } catch (\Exception $e) { $this->error($e->getMessage()); } $this->success('获取成功', $jsConfig); break; } return $this->error('支付方式错误'); } // 支付中签约 public function createSign(Request $request) { // var_dump(123);die(); $where = UtilService::postMore( [ ['cid', $this->cid], // ['user_id', $this->auth->getUserinfo()['id']], // ['user_id', 0], ['order_name', ''], // ['category_id', 0], ['amount', 0], ['name', ''], ['contact', ''], ['tel', 0], ['address', ''], ['is_open', '0'], ['is_ticket', '0'], ['pay_type', '0'], ['type', '0'], // ['help_id', 0], ['plan_id', 0], ['from', 'weixin'], ], $request ); if (!$this->auth->isLogin()) { $this->error(__('Please login first'), null, 401); } $where['user_id']=$this->auth->getUserinfo()['id']; $where1 = $where; unset($where1['from']); $where1['order_id'] = LaveMonthModel::getNewOrderId(); // $contract_display_account = User::where('id', $where1['user_id'])->value('nickname'); // if (empty($contract_display_account)){ // $this->error('用户不存在!'); // } if ($where['amount'] > 500) { $this->error('捐款金额不能大于500'); } $sign = WechatPlanRecord::where('uid', $where1['user_id'])->where('plan_id', $where1['plan_id'])->where('is_signing', 0)->find(); if (!empty($sign)) { $this->error('您已签约,请勿重复签约!'); } if (cache('lave_' . $where['user_id'])) $this->error('正在处理中'); $plan_id = $where1['plan_id']; @file_put_contents("quanju.txt", $plan_id . "-签约模版编号\r\n", 8); // unset($where1['plan_id']); $where1['contract_code'] = WechatPlanRecord::getNewCode(); $order = LaveMonthModel::create($where1); $where1['contract_display_account'] = $where1['name']; cache('lave_' . $where['user_id'], '1', 10); if (!$order) $this->error(LaveMonthModel::getErrorInfo()); $orderId = $order['order_id']; $info = compact('orderId'); $order['plan_id'] = $plan_id; if ($orderId) { $orderInfo = LaveMonthModel::where('order_id', $orderId)->find(); if (!$orderInfo || !isset($orderInfo['paid'])) { $this->error('支付订单不存在!'); } if ($orderInfo['paid']) $this->error('支付已支付!'); // 创建签约 $plan_record = [ 'plan_id' => $plan_id, 'cid' => $where['cid'], 'uid' => $where['user_id'], 'price' => $where['amount'], 'is_signing' => 2, 'contract_code' => $where1['contract_code'], 'contract_display_account' => $where1['contract_display_account'], 'is_open' => $where1['is_open'], 'tel' => $where1['tel'], // 'category_id'=>$where1['category_id'], 'order_name' => $where1['order_name'], ]; $count = WechatPlanRecord::where('uid', $where1['user_id'])->where('plan_id', $plan_id)->count(); $record = WechatPlanRecord::create($plan_record); @file_put_contents("quanju.txt", json_encode($record) . "-签约模版记录\r\n", 8); LaveMonthModel::where('order_id', $orderId)->update(['record_id' => $record['id']]); $plan_record['spbill_create_ip'] = User::where('id', $where1['user_id'])->value('loginip'); $plan_record['contract_notify_url'] = Request::instance()->domain() . "/api/wechat/notify/" . $where['cid']; try { if ($where['from'] == 'routine') { $jsConfig = LaveRepository::jsPaySign($this->cid, $orderId, $plan_record); //创建订单jspay } else if ($where['from'] == 'weixinh5') { $jsConfig = LaveRepository::h5PaySign($this->cid, $orderId, $plan_record); } else { $jsConfig = LaveRepository::wxPaySign($this->cid, $orderId, $plan_record); } } catch (\Exception $e) { return $this->error($e->getMessage()); } $info['jsConfig'] = $jsConfig; // 增加参与人数 // @file_put_contents("quanju.txt", $count."-参与次数\r\n", 8); if ($count == 0) { $num = WechatPlan::where('plan_id', $plan_id)->value('num'); // @file_put_contents("quanju.txt", $num."-参与人数\r\n", 8); WechatPlan::where('plan_id', $plan_id)->update(['num' => $num + 1]); } return $this->success('订单创建成功', $info); } else $this->error(LaveMonthModel::getErrorInfo()); } // 申请扣款 public function payPap(Request $request) { // @file_put_contents("quanju.txt", "测试申请扣款-\r\n", 8); // die(); $list = WechatPlanRecord::where('is_signing', 0)->select(); // $cid=$this->cid; // $arr=[]; // $arr['body']='月捐款'; foreach ($list as $k => $v) { $day = intval(date('d', $v['createtime'])); $date = date('Y-m', $v['createtime']); $last = intval(date("t", time())); //当月最后一天 // @file_put_contents("quanju.txt", $day."-日期\r\n", 8); $today = intval(date('d')); $now_date = date('Y-m', time()); $tf = false; if ($day == 1 && $today == $last) { //签约时间是第一天,且今天是这个月的最后一天 $tf = true; } if ($day - 1 > $last && $today == $last) { //签约时间的前一天日期依然比这个月的最后一天大,且今天是这个月的最后一天 $tf = true; } if ($date != $now_date) { //先确定月份不同 if ($today == $day - 1 || $tf) { //再确定是不是今天是不是签约日期的前一天 // var_dump(789456132);die(); @file_put_contents("quanju.txt", json_encode($v)."-月捐数据\r\n", 8); $cid = $v['cid']; $mch_id = Company::where('id', $cid)->value('pay_weixin_mchid'); $where1['cid'] = $cid; $where1['user_id'] = $v['uid']; $where1['order_name'] = $v['order_name']; $where1['order_id'] = LaveMonthModel::getNewOrderId();; // $where1['category_id']=$v['category_id']; $where1['amount'] = $v['price']; $where1['name'] = $v['contract_display_account']; $where1['contact'] = ''; $where1['tel'] = $v['tel']; $where1['address'] = '用户未填写联系地址'; $where1['is_open'] = $v['is_open']; $where1['is_ticket'] = '0'; $where1['type'] = '0'; $where1['record_id'] = $v['id']; $where1['contract_code'] = $v['contract_code']; $where1['plan_id'] = $v['plan_id']; $where1['nonce_str'] = uniqid(); // $where1['help_id']='0'; // @file_put_contents("quanju.txt", json_encode($where1)."测试申请扣款-\r\n", 8); $order = LaveMonthModel::create($where1); // } // var_dump(988745613);die(); $rs = WechatService::papPayApply($mch_id, $where1['order_id'], $where1['amount'], "lave", '月捐款', 'PAP', [], $cid, $v['contract_id'], $where1['order_name'], $where1['nonce_str']); @file_put_contents("quanju.txt", json_encode($rs)."-月捐汇报\r\n", 8); } } } // die(); $this->success('扣款完成'); // } } // 检查签约用户是否有符合签约月份数量的扣款记录 public function check_pay_pap(){ $list = WechatPlanRecord::where('is_signing', 0)->select(); //签约中 @file_put_contents("quanju2.txt", "补漏每月扣款-\r\n", 8); foreach ($list as $k => $v) { // 查找对应签约协议号的月捐记录 // $count = LaveMonthModel::where('contract_code', $v['contract_code'])->count(); // $createDate = new \DateTime('@'.$v['createtime']); // $currentDate = new \DateTime(); // $interval = $currentDate->diff($createDate); // $monthsDiff = $interval->y * 12 + $interval->m; // if ($interval->d > 0) { // $monthsDiff += $interval->d / $currentDate->format('t'); // } // $monthsDiff = floor($monthsDiff); // if ($monthsDiff > 0&&$monthsDiff > $count+1) { //相差月数大于月捐记录数量 @file_put_contents("quanju2.txt", $v['contract_code']."签约协议号-\r\n", 8); // @file_put_contents("quanju2.txt", $monthsDiff."相差月份-\r\n", 8); // @file_put_contents("quanju2.txt", $count."统计次数-\r\n", 8); // 查找上个月是否有扣款记录 // 获取当前时间的时间戳 $currentTimestamp = time(); // 获取一个月前的时间戳 $last_month = strtotime("-1 month", $currentTimestamp); $count = LaveMonthModel::where('contract_code', $v['contract_code'])->where('createtime','>', $last_month)->count(); if ($count == 0){ @file_put_contents("quanju2.txt", "没有上个月的扣款记录-\r\n", 8); $cid = $v['cid']; $mch_id = Company::where('id', $cid)->value('pay_weixin_mchid'); $where1['cid'] = $cid; $where1['user_id'] = $v['uid']; $where1['order_name'] = $v['order_name']; $where1['order_id'] = LaveMonthModel::getNewOrderId();; // $where1['category_id']=$v['category_id']; $where1['amount'] = $v['price']; $where1['name'] = $v['contract_display_account']; $where1['contact'] = ''; $where1['tel'] = $v['tel']; $where1['address'] = '用户未填写联系地址'; $where1['is_open'] = $v['is_open']; $where1['is_ticket'] = '0'; $where1['type'] = '0'; $where1['record_id'] = $v['id']; $where1['contract_code'] = $v['contract_code']; $where1['plan_id'] = $v['plan_id']; $where1['nonce_str'] = uniqid(); $order = LaveMonthModel::create($where1); $rs = WechatService::papPayApply($mch_id, $where1['order_id'], $where1['amount'], "lave", '月捐款', 'PAP', [], $cid, $v['contract_id'], $where1['order_name'], $where1['nonce_str']); // } @file_put_contents("quanju2.txt", json_encode($rs)."-补偿月捐汇报\r\n", 8); } } $this->success('获取成功'); } // 解除签约 public function deleteSign(Request $request) { $where = UtilService::postMore( [ ['id', 0], ['cid', $this->cid], ['user_id', $this->auth->getUserinfo()['id']], ], $request ); if ($where['id'] == 0) { $sign_info = WechatPlanRecord::where('cid', $where['cid'])->where('uid', $where['user_id'])->where('is_signing', 0)->find(); } else { $sign_info = WechatPlanRecord::where('id', $where['id'])->where('is_signing', 0)->find(); } if (!$sign_info) { $this->error('未找到签约信息!'); } $mch_id = Company::where('id', $where['cid'])->value('pay_weixin_mchid'); $plan_id = $sign_info['plan_id']; $contract_code = $sign_info['contract_code']; // $mch_id,$contract_code,$pan_id,$version='1.0',$options=[],$cid=0) $rs = WechatService::deleteSign($mch_id, $contract_code, $plan_id, '1.0', [], $where['cid']); // @file_put_contents("quanju.txt", json_encode($rs)."-解除签约返回结果\r\n", 8); $this->success('解除签约成功!'); // if ($rs){ // WechatPlanRecord::where('cid', $where['cid'])->where('uid', $where['user_id'])->where('is_signing',0)->update(['is_signing'=>1]); // $this->success('解除签约成功!'); // }else{ // $this->error('解除签约失败!'); // } } public function plan_lst(Request $request) { $where = UtilService::getMore( [ ['page', 1], ['limit', 10], ['cid', $this->cid], // ['paid', 1], // ['category_id', 0], // ['order', ''], // ['key', ''], ], $request ); $this->success('获取成功', WechatPlan::lst($where)); } public function plan_read(Request $request) { $where = UtilService::getMore( [ ['id', 0], ['cid', $this->cid], ], $request ); @file_put_contents("quanju.txt", $where['cid']."-cid是多少\r\n", 8); if (!$where['id']) $this->error('参数错误'); $this->success('获取成功', WechatPlan::read($where)); } // 签约列表 public function user_plan_lst(Request $request) { $where = UtilService::getMore( [ // ['cid', 0], ['cid', $this->cid], ['uid', $this->auth->getUserinfo()['id']], // ['uid', 0], ], $request ); if (!isset($where['uid'])) $this->error('用户不存在'); if (!isset($where['cid'])) $this->error('请选择正确的城市的红十字会'); $this->success('获取成功', WechatPlanRecord::record_lst($where)); } // 签约记录详情 public function user_record_info(Request $request) { $where = UtilService::getMore( [ ['id', 0], // ['cid', 0], ['cid', $this->cid], ['user_id', $this->auth->getUserinfo()['id']], // ['user_id', 0], ], $request ); $this->success('获取成功', WechatPlanRecord::record_info($where)); } // 签约记录详情 public function query_sign_order(Request $request) { $where = UtilService::getMore( [ ['order_id', 0], ['cid', 0], ], $request ); $this->success('获取成功', WechatService::querySignOrder($where['order_id'],$where['cid'])); } // public function day_query_sign_order(Request $request) { // 改成搜索三天内的未支付订单 $threeDaysAgo = strtotime('-3 days'); @file_put_contents("quanju2.txt", $threeDaysAgo . "-三天前时间戳\r\n", 8); $list = LaveMonth::where('paid',0)->where('cid', '>',1)->where('createtime','>', $threeDaysAgo)->select(); foreach ($list as $k => $v) { WechatService::querySignOrder($v['order_id'],$v['cid']); } $this->success('修改成功!'); } public function querycontract(Request $request) { $where = UtilService::getMore( [ ['contract_id', 0], ['cid', 0], ], $request ); $mch_id = Company::where('id', $where['cid'])->value('pay_weixin_mchid'); $this->success('获取成功', WechatService::querycontract($mch_id,$where['contract_id'],'1.0',[],$where['cid'])); } } ?>