123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <?php
- namespace App\Http\Controllers\Channel\XChengXu;
- use App\Modules\User\Services\UserService;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Channel\BaseController;
- use Redis;
- use GuzzleHttp\Client;
- use Log;
- use App\Modules\User\Models\Xcxuser;
- use App\Modules\Subscribe\Models\Order;
- use App\Modules\User\Models\XcxUserStat;
- use App\Http\Controllers\Channel\XChengXu\Transformers\StasticalTransformer;
- class StasticalController extends BaseController
- {
- /**
- * @apiDefine XCX 小程序
- */
- public function sendLink(){
- $domain = _domain();
- $url = 'https://'.$domain.'/xcx/yun?channel_id='.$this->getChannelId();
- return response()->success(['link'=>$url]);
- }
- public function qrcode(Request $request){
- @ header("Content-Type:image/png");
- $channel_id = $request->get('channel_id');
- $uid = $request->has('uid')?$request->get('uid'):0;
- $u = $request->has('u')?$request->get('u'):0;
- echo $this->getQrcode($channel_id,$uid,$u);
- }
- public function page(Request $request){
- $channel_id = (int)$request->get('channel_id',14);
- $u = (int)$request->get('xcx_send_order_id',0);
- $redirect = $request->has('redirect')?$request->get('redirect'):'';
- $openid = $request->has('openid')?$request->get('openid'):'';
- if(!$redirect && empty($openid)){
- $redirect_url = 'https://'.env('CHANNEL_DOMAIN').'/xcx/yun?redirect=1&channel_id='.$channel_id;
- $appid = env('WECHAT_AUTH_APPID');
- $auth_url = env('AUTH_URL').'?gzh_app_id='.$appid.'&redirect_url='.urlencode($redirect_url);
- return redirect()->to($auth_url);
- }
- if(empty($channel_id)){
- $url = 'https://yueduyun.oss-cn-hangzhou.aliyuncs.com/distribution/xcx/img/qrcode.png';
- }else{
- $uid = $this->user($channel_id,$openid);
- $url = '/xcx/qrcode?channel_id='.$channel_id.'&uid='.$uid.'&u='.$u;
- }
- return view('channel.web.welcome.qrcode',['qrcode'=>$url]);
- }
- /**
- * @apiVersion 1.0.0
- * @apiDescription 今日数据
- * @api {get} xcx/todayData 今日数据
- * @apiGroup XCX
- * @apiName todayData
- * @apiSuccess {int} code 状态码
- * @apiSuccess {String} msg 信息
- * @apiSuccess {object} data 结果集
- * @apiSuccess {Int} data.today_recharge 今日充值
- * @apiSuccess {String} data.new_user_num 今日新增用户
- * @apiSuccess {Int} data.total_recharge 累计充值
- * @apiSuccess {Int} data.total_user_num 累计用户
- * @apiSuccessExample {json} Success-Response:
- * HTTP/1.1 200 OK
- * {
- * "code": 0,
- * "msg": "",
- * "data": {
- * "today_recharge": 5,
- * "new_user_num": "第1240章 不是我",
- * "total_recharge": 1239,
- * "total_user_num": 1,
- * }
- * }
- */
- public function todayData(Request $request){
- $channel_id = $this->getChannelId();
- $recharge = Order::where('status','PAID')
- ->where('pay_merchant_source','XIAOCHENGXU')
- ->where('created_at','>=',date('Y-m-d'))
- ->where('created_at','<=',date('Y-m-d',time()+86400))
- ->where('distribution_channel_id',$channel_id)
- ->sum('price');
- $total_recharge = Order::where('status','PAID')
- ->where('pay_merchant_source','XIAOCHENGXU')
- ->where('created_at','<',date('Y-m-d'))
- ->where('distribution_channel_id',$channel_id)
- ->sum('price');
- $new_user_num = Xcxuser::where('created_at','>=',date('Y-m-d'))
- ->where('created_at','<=',date('Y-m-d',time()+86400))
- ->where('distribution_channel_id',$channel_id)
- ->count();
- $total_user_num = Xcxuser::where('created_at','<',date('Y-m-d'))
- ->where('distribution_channel_id',$channel_id)
- ->count();
- $res = [
- 'recharge'=>$recharge,
- 'new_user_num'=>$new_user_num,
- 'total_recharge'=>$total_recharge,
- 'total_user_num'=>$total_user_num,
- ];
- return response()->success($res);
- }
- /**
- * @apiVersion 1.0.0
- * @apiDescription 统计数据
- * @api {get} xcx/statisticalData 统计数据
- * @apiGroup XCX
- * @apiName statisticalData
- * @apiParam {int} page 页码
- * @apiSuccess {int} code 状态码
- * @apiSuccess {String} msg 信息
- * @apiSuccess {object} data 结果集
- * @apiSuccess {Int} data.date 日期
- * @apiSuccess {Int} data.new_user_num 新增用户数
- * @apiSuccess {String} data.success_order_num 成功订单数
- * @apiSuccess {Int} data.order_num 订单数
- * @apiSuccess {Int} data.recharge 充值金额
- * @apiSuccessExample {json} Success-Response:
- * HTTP/1.1 200 OK
- * {
- * "code": 0,
- * "msg": "",
- * "data": [.
- * {
- * "date":'2018-03-01'
- * "new_user_num": 5,
- * "success_order_num": 12321,
- * "order_num": 1239,
- * "recharge": 1,
- * }
- * ]
- * }
- */
- public function statisticalData(Request $request){
- $page_size = $request->input('page_size',15);
- $channel_id = $this->getChannelId();
- $res = XcxUserStat::where('distribution_channel_id',$channel_id)
- ->select('date','new_user_num','success_order_num','order_num','recharge')
- ->orderBy('date','desc')
- ->paginate($page_size);
- return response()->pagination(new StasticalTransformer(), $res);
- }
- private function getQrcode($channel_id,$uid,$u){
- $appid = 'wxa0c8331eba3b34d5';
- $secret = '17c01c26dd7873e557710601436774c7';
- $key = "appid:".$appid.":accesstoken";
- $access_token = Redis::get($key);
- $client = new Client(['timeout' => 3.0,]);
- if(!$access_token){
- $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
- try{
- $qrcode_url_res = $client->request('get',$url)->getBody()->getContents();
- if($qrcode_url_res){
- $qrcode_res = json_decode($qrcode_url_res,true);
- $access_token = $qrcode_res['access_token'];
- Redis::setex($key,7200,$access_token);
- }
- }catch (\Exception $e){
- }
- }
- $access_url = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$access_token;
- $scence = '%s_%s_%s';
- $param = ['scene'=>sprintf($scence,$channel_id,$uid,$u)];
- $res = $this->send($access_url,$param);
- return $res;
- }
- static function send($url,$data)
- {
- //$headers = array("Content-type: application/json;charset=UTF-8","Accept: application/json","Cache-Control: no-cache", "Pragma: no-cache");
- $data=json_encode($data);
- $curl = curl_init();
- curl_setopt($curl, CURLOPT_URL, $url);
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
- if (!empty($data)){
- curl_setopt($curl, CURLOPT_POST, 1);
- curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
- }
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
- //curl_setopt( $curl, CURLOPT_HTTPHEADER, $headers );
- $output = curl_exec($curl);
- curl_close($curl);
- return $output;
- }
- private function user($channel_id,$openid){
- $user = UserService::getUserByUnionAndChannelId($openid,$channel_id);
- if($user){
- return $user->id;
- }
- $user = UserService::addUser([
- 'openid'=>$openid,
- 'unionid'=>$openid,
- 'distribution_channel_id'=>$channel_id
- ]);
- return $user->id;
- }
- }
|