老莫的笔记本  
  
请选择 进入手机版 | 继续访问电脑版
查看: 1031|回复: 0

微信公众号网页授权系列

[复制链接]

662

主题

878

帖子

5115

积分

超级版主

Rank: 8Rank: 8

积分
5115
发表于 2020-7-7 17:50:59 | 显示全部楼层 |阅读模式
===================================== 微信公众号网页授权系列

        1.网页授权的制作 是在easywechart 和 laravel 的基础上 ;
       
        2.关于微信网页授权
               
                2.1 要访问的页面为 aaa[访问的控制器地址为 aaa]
               
                                例如:        http://wx.qancloud.com/single/phoneview
                               
                2.2 微信公众号后台->公众号设置->功能设置 -> 网页授权域名  设置
               
                                这里改为:wx.qancloud.com   [需要文件就下 然后放到public 目录内]
                               
                2.3 配置微信跳转的授权地址 主要是callback 注意这个是 授权地址  
                       
                                 // 配置EasyWeChat
                                $config = [
                                        'app_id' => '**',
                                        'secret' => '**',
                                        'token' => '**',
                                        'aes_key' => '**',
                                        'response_type' => 'array'

                                        //  这是授权的回调路径 与 静默回调[公众号的是snsapi_base,第三方的是 snsapi_userinfo ] ,
                                        ,'oauth' => [
                                                'scopes'   => ['snsapi_base'],
                                                'callback' => 'subauth',
                                        ],
                                ];


                2.4  代码搞起:
                       
                        2.4.1  路由地址为:
                                       
                                        // 渲染手机绑定页面
                                        Route::get('single/phoneview', 'Single\PhoneController@phoneview');
                               
                                写function 最终访问的那个function phoneview
                               
                       

  1.                                                
  2.                                                  /**
  3.                                                         *      渲染访问页面[该页面已授权]
  4.                                                              */

  5.                                                             public function phoneview()
  6.                                                             {
  7.                                                                 $config = $this->sendConfig();

  8.                                                                 $app = Factory::officialAccount($config);

  9.                                                                 $oauth = $app->oauth;


  10.                                                                 // 未登录
  11.                                                                 if (empty(session('wechat_user'))) {

  12.                                                                     // $_SESSION['target_url'] = 'single/phoneview';
  13.                                                                     // 该链接为 存 获取完用户数据 跳到的最终页
  14.                                                                     // $_SESSION['target_url'] = 'single/phoneview';

  15.                                                                     // 在这里跳转到授权页 redirect_uri
  16.                                                                     session(['target_url' => 'single/phoneview']);

  17.                                                                     return $oauth->redirect();
  18.                                                                     // 这里不一定是return,如果你的框架action不是返回内容的话你就得使用
  19.                                                                     // $oauth->redirect()->send();
  20.                                                                 }

  21.                                                                 // 已经登录过
  22.                                                                 $user = session('wechat_user');

  23.                                                                 $openid = $user['id'];

  24.                                                                 // 查询数据库 是否已经绑定了
  25.                                                                 $nowuser = Users::where('openid', $openid)->first();

  26.                                                                 $oldphone = '无';

  27.                                                                 // 一个默认的状态判断是否已经绑定了手机号
  28.                                                                 $old = 2;

  29.                                                                 if ($nowuser) {

  30.                                                                     if(!empty($nowuser->phone))
  31.                                                                     {
  32.                                                                         // 如果已经在用户表中
  33.                                                                         $oldphone = $nowuser->phone;

  34.                                                                         // 已绑定的状态
  35.                                                                         $old = 1;

  36.                                                                     }


  37.                                                                 }else{

  38.                                                                 }

  39.                                                                 return view('single.phoneview',[
  40.                                                                     'openid'=> $openid,
  41.                                                                     'old'=> $old,
  42.                                                                     'oldphone'=> $oldphone

  43.                                                                     ]);
  44.                                                             }

  45.                                
  46.                                
复制代码

                       
                       
                       
                        2.4.2 添加授权路由
                       
                                        // 授权接口 [只适合一级 ]
                                        Route::any('subauth', 'Wechart\WxSendTempController@subauth');
                       
                                        写function 授权的那个function subauth
                                       
                               

  1.                                        
  2.                                                  /**
  3.                                                         * 搞个网页授权 这是授权回调页
  4.                                                 */
  5.                                             public function subauth()
  6.                                             {
  7.                                                 $config = $this->sendConfig();

  8.                                                 $app = Factory::officialAccount($config);

  9.                                                 $oauth = $app->oauth;

  10.                                                 // 获取 OAuth 授权结果用户信息
  11.                                                 $user = $oauth->user();

  12.                                                 // $_SESSION['wechat_user'] = $user->toArray();
  13.                                                 session(['wechat_user' => $user->toArray()]);

  14.                                                 $targetUrl = empty(session('target_url')) ? '/' : session('target_url');

  15.                                                 header('location:'. $targetUrl); // 跳转到 user/profile
  16.                                             }
  17.                                        
  18.                                        
复制代码

                       
                       
                       
                2.5 原理解析:
                       
                                点击访问 该页面, 在aaa 中判断是否登录利用session 判断
                                       
                                        1.如果没登录,就跳转到 授权页
                                                然后从 授权页获取openid【参数里是id】,再跳转到授权页指定的 页面[通常就是当前页]
                                       
                                        2.登录了 就继续访问
                                                所谓的登录,其实就是openid 是否被 记录,斌不是啥账户密码登录之类
                                               
                               
                                [所以访问的一定是同域名的东西,否则session 不能正常生效,跨域 就去搞点别的吧,JWT就不错 ,mysql 存储 也不赖 吧手机号和验证码一起存起来 ]
                               
               
               

       








那些必须的权限
        1. 必须认证后的号
        2. 必须开启模板消息功能
        3. 必须开启网页授权登录












回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表