12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- <?php
- /**
- * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
- * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
- * @author pillar<ltmn@qq.com>
- * 微信服务号-扫码登录处理
- */
- namespace app\system\controller\event;
- use think\Controller;
- use app\common\event\Passport;
- use app\common\facade\WechatMp;
- use app\common\model\SystemMember;
- use app\common\model\SystemWeb;
- use think\facade\Cookie;
- use filter\Filter;
- use Exception;
- class WechatAccount extends Controller{
- /**
- * 发起微信授权
- */
- public function index(){
- try {
- $app = WechatMp::official();
- $app->server->push(function ($message) {
- switch ($message['MsgType']) {
- case 'event':
- $open_id['appid'] = Filter::filter_escape($message['FromUserName']); //openid
- if($message['Event'] == 'subscribe' || $message['Event'] == 'SCAN'){ //关注|扫描带参数二维码事件
- $member = SystemMember::where(['open_id' => $open_id['appid']])->field('open_id')->find();
- if($member){
- $member->ticket = Filter::filter_escape($message['Ticket']); //Ticket
- $member->save();
- return '你好,你刚刚登录了「'.SystemWeb::config()['name'].'」';
- }else{
- //创建用户
- $rdm_code = getcode(6);
- $data['appid'] = $open_id['appid'];
- $data['ticket'] = Filter::filter_escape($message['Ticket']);
- $data['username'] = '公众号'.$rdm_code;
- $data['password'] = password_hash(md5($rdm_code),PASSWORD_DEFAULT);
- $data['safe_password'] = password_hash(md5('123456'),PASSWORD_DEFAULT);
- $data['login_time'] = time();
- $data['login_ip'] = request()->ip();
- $data['update_time'] = time();
- $data['create_time'] = time();
- SystemMember::create($data);
- return '你好,你刚刚注册了「'.SystemWeb::config()['name'].'」帐号';
- }
- }
- break;
- default:
- return '';
- break;
- }
- });
- $response = $app->server->serve();
- $response->send();
- }catch (Exception $e) {
- $this->error('授权失败');
- }
- }
-
- /**
- * 生成登录二维码
- */
- public function createCodes(){
- try {
- $rel = WechatMp::official()->qrcode->temporary('foo', 6 * 24 * 3600);
- Cookie::set('login_ticket',$rel['ticket'],$rel['expire_seconds']); //记录二维码ticket
- return enjson(200,'成功',$rel['url']);
- }catch (Exception $e) {
- return enjson(0);
- }
- }
- /**
- *检查登录状态
- */
- public function qrCodes(){
- if(Cookie::has('login_ticket')){
- $ticket = Cookie::get('login_ticket');
- $member = SystemMember::where(['ticket' => $ticket])->field('id,username,open_id,ticket')->find();
- if($member){
- $member->ticket = null; //Ticket
- $member->save();
- Passport::clearMiniapp();
- Passport::setlogout();
- Passport::setLogin($member);
- Cookie::delete('login_ticket');
- return enjson(200,'成功',['url' => url('system/passport.Index/index')]);
- }
- }
- return enjson(0);
- }
- }
|