本文主要是介绍小程序扫码登录 laravel+easyWeChat扫码登录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在做项目的时候,有时候PC端会有微信扫码登录需求,这时候我们应该怎样去实现这个功能呢
刚开始我也是有些迷茫,但是经过多次查看其他有这个功能的网站,其实这个功能也是挺简单的。
其实就是前端在获取二维码的时候,然后返回一个ticket(字段名,可根据个人习惯起名)给前端,然后
前端就根据这个值一直轮询是否已经扫码登录。
因为我的项目用到的是easyWeChat这个插件 所以附上部分代码
/*** 获取小程序二维码*/public function loginQrcode(){// 生成票据$ticket = md5(uniqid(time()));// 获取小程序二维码$app = Factory::miniProgram(config('easywechat.mini'));$response = $app->app_code->getUnlimit($ticket, [// 'page' => 'path/to/page', // 发布后才能使用'width' => 280,'auto_color' => false,'is_hyaline' => true,'line_color' => ['r' => 0,'g' => 0,'b' => 0,],]);// 设置缓存和过期时间Cache::put('TICKET_' . $ticket,-1,60 * 10);// 获取返回的图片信息$res = $response->getBody()->getContents();// 生成base64// 注:这里生成的是小程序码,如何转成普通二维码 暂时未知 有思路的同学麻烦解答一下 谢谢。$base64Image="data:image/jpeg;base64,".base64_encode($res);// 返回的数据信息 提示信息、状态码、数据Message::success('success',ErrCode::SUCCESS_CODE,['image_base64' => $base64Image, // 图片'ticket' => $ticket // 票据]);}/*** 轮询是否扫码登录成功* @param Request $request*/public function checkTicketStatus(Request $request){try{// 获取票据$ticket = $request -> input('ticket');// 验证是否有该票据$key = 'TICKET_' . $ticket;$cache = Cache::has($key);if(!$cache){throw new \Exception('TICKET已失效!');}// 获取缓存内容$value = Cache::get($key);if($value == -1){$status = 2;}else{// 查找用户是否存在$memberObj = MemberModel::find($value);if(!$memberObj){$status = 4;}else{$status = 1;Auth::login($memberObj);}Cache::forget($key);}Message::success('success',ErrCode::SUCCESS_CODE,['ticket_status' => $status]);}catch (\Exception $e){Message::error($e -> getMessage(),ErrCode::ERROR_CODE,['ticket_status' => 3 // 1是登录成功 2是等待登录 3是已失效 4ticket信息异常]);}}
这里只是展示了部分代码,剩下用户扫码后是如何操作的,其实很简单。用户扫码后,小程序可获取到scene的值,也就是前端轮询的ticket,然后在用户点击登录的时候,将scene的值一起发送给服务端,然后服务端接收到该ticket后,并且登录成功了,将ticket的值改为用户的id,其实ticket就是缓存的意思
小程序扫码登录的思路大概就是这样了,然后哪里说得不好,欢迎留言指出。谢谢
这篇关于小程序扫码登录 laravel+easyWeChat扫码登录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!