| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352 |
- <?php
- /**
- * Created by PhpStorm.
- * User: 思维定制
- * Date: 2019/3/4
- * Time: 15:12
- */
- namespace App\Http\Controllers\Api\V1;
- use App\Models\AlbumAgentModel;
- use App\Models\AlbumManufacturerModel;
- use App\Models\AlbumPosterModel;
- use App\Models\AlbumUserModel;
- use App\Models\AlbumWatchRecord;
- use App\Services\Base\ErrorCode;
- use EasyWeChat\Factory;
- use Grafika\Color;
- use Grafika\Grafika;
- use Validator, Response,Auth;
- use Illuminate\Http\Request;
- class AlbumPosterController extends Controller
- {
- /**
- * @api {post} /api/album_post/info 获取海报数据(info)
- * @apiDescription 获取海报数据(info)
- * @apiGroup Album_Post
- * @apiPermission 需要登录
- * @apiVersion 0.1.0
- * @apiParam {int} [store_id] 商户id
- * @apiSuccessExample {json} Success-Response:
- * HTTP/1.1 200 OK
- * {
- * "status": true,
- * "status_code": 0,
- * "message": "",
- * "data": [
- * 'posters':'asdawd', //海报
- * 'words':'asdawd', //话术
- * 'introduce':'222', //介绍
- * 'share':'xxx' //分享图片
- * 'phone':'xxx' //电话
- * 'username':'xxx' //姓名
- * 'title':'xxx' //分享标题
- * 'qrcode':'xxx' //二维码
- * ]
- * }
- * @apiErrorExample {json} Error-Response:
- * HTTP/1.1 400 Bad Request
- * {
- * "state": false,
- * "code": 1000,
- * "message": "传入参数不正确",
- * "data": null or []
- * }
- * 可能出现的错误代码:
- * 1000 CLIENT_WRONG_PARAMS 传入参数不正确
- */
- public function posterInfo(Request $request)
- {
- $userAuth = Auth('api')->user();
- $validator = Validator::make($request->all(), [
- 'store_id' => 'required',
- ], [
- 'store_id.required' => '店铺信息未知',
- ]);
- if ($validator->fails()) {
- return $this->validatorError($validator->messages()->all(), ErrorCode::CLIENT_WRONG_PARAMS, '');
- }
- $store_id = $request->input('store_id');
- $info = AlbumPosterModel::where('store_id', $store_id)->first()->toArray();
- $WeChatApp = AlbumManufacturerModel::where('store_id', $store_id)->first();
- if ($userAuth->is_dealer != 1) {
- if ($userAuth->up_agent_id == 0) {
- $name = $WeChatApp->name;
- } else {
- $agent_check = AlbumAgentModel::where([
- ['store_id',$store_id],
- ['id',$userAuth->up_agent_id]
- ])->first();
- $name = $agent_check->realname;
- }
- } else {
- $agent_check = AlbumAgentModel::where([
- ['store_id',$store_id],
- ['user_id',$userAuth->id]
- ])->first();
- $name = $agent_check->realname;
- }
- $info['username'] = $name;
- $info['avatar'] = $userAuth->avatar;
- $info['share'] = $WeChatApp->share_image;
- $info['title'] = $WeChatApp->share_title;
- $info['qrcode'] = $this->createPoster($userAuth, $store_id);
- return $this->api(compact('info'));
- }
- /**
- * @api {post} /api/album_post/download 生成海报(download)
- * @apiDescription 生成海报(download)
- * @apiGroup Album_Post
- * @apiPermission 需要登录
- * @apiVersion 0.1.0
- * @apiParam {int} [store_id] 商户id
- * @apiParam {int} [poster_id] 海报id
- * @apiSuccessExample {json} Success-Response:
- * HTTP/1.1 200 OK
- * {
- * "status": true,
- * "status_code": 0,
- * "message": "",
- * "data": []
- * }
- * @apiErrorExample {json} Error-Response:
- * HTTP/1.1 400 Bad Request
- * {
- * "state": false,
- * "code": 1000,
- * "message": "传入参数不正确",
- * "data": null or []
- * }
- * 可能出现的错误代码:
- * 1000 CLIENT_WRONG_PARAMS 传入参数不正确
- */
- public function posterDownload(Request $request)
- {
- $userAuth = Auth('api')->user();
- $validator = Validator::make($request->all(), [
- 'store_id' => 'required',
- 'image' => 'required',
- ], [
- 'store_id.required' => '店铺信息未知',
- 'image' => '缺少图片链接'
- ]);
- if ($validator->fails()) {
- return $this->validatorError($validator->messages()->all(), ErrorCode::CLIENT_WRONG_PARAMS, '');
- }
- $data = $request->input();
- if ($userAuth->up_agent_id != 0) {
- $add_record['agent_id'] = $userAuth->up_agent_id;
- $add_record['open_id'] = $userAuth->open_id;
- $add_record['action'] = 9;
- $add_record['store_id'] = $data['store_id'];
- $add_record['detail'] = '保存了图片';
- $user_agent = AlbumAgentModel::where('id', $userAuth->up_agent_id)->first();
- $user_agent->share_times++;
- $user_agent->save();
- AlbumWatchRecord::create($add_record);
- }
- AlbumPosterModel::where([['id', $data['poster_id']],['store_id', $data['store_id']]])->increment('downloadNum');
- return $this->api([]);
- }
- private function getQrCode($appId, $appSecret, $store_id)
- {
- $access = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";
- $res_access = $this->curlGet($access);
- $res_access = json_decode($res_access, true);
- if (isset($res_access['access_token'])) {
- $ACCESS_TOKEN = $res_access['access_token'];
- $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" . $ACCESS_TOKEN;
- $data = array();
- $data['scene'] = "scene";//自定义信息,可以填写诸如识别用户身份的字段,注意用中文时的情况
- $data['page'] = "pages/index/index";//扫描后对应的path
- $data['width'] = 800;//自定义的尺寸
- $data['auto_color'] = false;//是否自定义颜色
- $color = array(
- "r" => "0",
- "g" => "0",
- "b" => "0",
- );
- $data['line_color'] = $color;//自定义的颜色值
- //dd($data,$url);
- $data = json_encode($data);
- $this->getHttpArray($url, $data, $store_id);
- return true;
- } else {
- \Log::error($res_access);
- return false;
- }
- }
- /**
- * 获取小程序码 EasyWeChat
- * @param $appId string
- * @param $appSecret string
- * @param $agent_id int
- * @param $store_id int
- * @param $user_id int
- * @return bool|string
- * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
- */
- private function getQrCodeEasy($appId, $appSecret, $agent_id, $store_id, $user_id)
- {
- $config = [
- 'app_id' => $appId,
- 'secret' => $appSecret,
- 'response_type' => 'array',
- ];
- $app = Factory::miniProgram($config);
- $response = $app->app_code->get('pages/index/index?agentid=' . $agent_id, [
- 'width' => 140,
- ]);
- if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
- if (!file_exists(public_path() . '/base/poster/QrCode/' . $store_id)) {
- mkdir(public_path() . '/base/poster/QrCode/' . $store_id, 0755, true);
- }
- $filename = $response->saveAs(public_path() . '/base/poster/QrCode/' . $store_id . "/", "$user_id.png");
- if ($filename) {
- return public_path() . "/base/poster/QrCode/" . $store_id . "/$user_id.png";
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
- private function createPoster($userAuth, $store_id)
- {
- if ($userAuth->is_dealer == 1) {
- $user_agent = AlbumAgentModel::where([['user_id',$userAuth->id],['status',1]])->first();
- $agent_id = $user_agent['id'];
- } else {
- $agent_id = $userAuth->up_agent_id == 0 ? 0 : $userAuth->up_agent_id;
- }
- if (file_exists(public_path() . '/download/' . $userAuth->id . '.png')) {
- unlink(public_path() . '/download/' . $userAuth->id . '.png');
- }
- if ($userAuth->up_agent_id != 0) {
- $add_record['agent_id'] = $userAuth->up_agent_id;
- $add_record['open_id'] = $userAuth->open_id;
- $add_record['action'] = 9;
- $add_record['store_id'] = $store_id;
- $add_record['detail'] = '保存了图片';
- $user_agent = AlbumAgentModel::where('id', $userAuth->up_agent_id)->first();
- $user_agent->share_times++;
- $user_agent->save();
- //$album = new AlbumController();
- //$album->sendLogsMessage($data['store_id'], $agent->open_id, 9, $userAuth->username, $agent->g_open_id);
- AlbumWatchRecord::create($add_record);
- }
- $editor = Grafika::createEditor();
- $WeChatApp = AlbumManufacturerModel::where('store_id', $store_id)->first();
- if ($agent_id == 0) {
- $editor->open($image_qrcode, str_replace(env('CDN_URL'), public_path(), $WeChatApp->qrcode));
- $editor->resizeExactWidth($image_qrcode, 430);
- $editor->resizeExactHeight($image_qrcode, 430);
- } else {
- $file = $this->getQrCodeEasy($WeChatApp->xyx_id, $WeChatApp->xyx_secret, $agent_id, $store_id, $userAuth->id);
- if (!$file) {
- return $this->error(0, '参数错误,请检查配置', []);
- }
- $editor->open($image_qrcode, $file);
- $editor->resizeExactWidth($image_qrcode, 430);
- $editor->resizeExactHeight($image_qrcode, 430);
- }
- $editor->open($image_avatar, public_path() . '/base/poster/avatar/' . $store_id . "/$userAuth->id.jpg");
- $editor->resizeExactWidth($image_avatar, 190);
- $editor->resizeExactHeight($image_avatar, 190);
- $editor->blend($image_qrcode, $image_avatar, 'normal', 1, 'top-left', 120, 120);
- $editor->save($image_qrcode, public_path() . '/download/' . $userAuth->id . '.png');
- $real_url = env('CDN_URL') . '/download/' . $userAuth->id . '.png';
- return $this->api(compact('real_url'));
- }
- /**
- * @api {post} /api/album_post/del 删除海报(del) 已废弃
- * @apiDescription 删除海报(del)
- * @apiGroup Album_Post
- * @apiPermission 需要登录
- * @apiVersion 0.1.0
- * @apiParam {string} [url] 图片
- * @apiSuccessExample {json} Success-Response:
- * HTTP/1.1 200 OK
- * {
- * "status": true,
- * "status_code": 0,
- * }
- * @apiErrorExample {json} Error-Response:
- * HTTP/1.1 400 Bad Request
- * {
- * "state": false,
- * "code": 1000,
- * "message": "传入参数不正确",
- * "data": null or []
- * }
- * 可能出现的错误代码:
- * 1000 CLIENT_WRONG_PARAMS 传入参数不正确
- */
- public function posterDel(Request $request)
- {
- $validator = Validator::make($request->all(), [
- 'url' => 'required',
- ], [
- 'url' => '缺少图片链接'
- ]);
- if ($validator->fails()) {
- return $this->validatorError($validator->messages()->all(), ErrorCode::CLIENT_WRONG_PARAMS, '');
- }
- $url = $request->input('url');
- $real_url = str_replace(env('CDN_URL'), public_path(), $url);
- if (file_exists($real_url)) {
- unlink($real_url);
- }
- return $this->api([], 0);
- }
- private function curlGet($url)
- {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- $output = curl_exec($ch);
- curl_close($ch);
- return $output;
- }
- private function getHttpArray($url, $post_data, $store_id)
- {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //没有这个会自动输出,不用print_r()也会在后面多个1
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
- $output = curl_exec($ch);
- file_put_contents(public_path() . '/upload/QrCode/' . $store_id . '.png', $output . PHP_EOL, FILE_APPEND);
- curl_close($ch);
- //$out = json_decode($output);
- return true;
- }
- }
|