周大胖子 发表于 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
                               
                               
                                               
                                               /**
                                                        *      渲染访问页面[该页面已授权]
                                                           */

                                                            public function phoneview()
                                                            {
                                                              $config = $this->sendConfig();

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

                                                              $oauth = $app->oauth;


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

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

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

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

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

                                                              $openid = $user['id'];

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

                                                              $oldphone = '无';

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

                                                              if ($nowuser) {

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

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

                                                                    }


                                                              }else{

                                                              }

                                                              return view('single.phoneview',[
                                                                    'openid'=> $openid,
                                                                    'old'=> $old,
                                                                    'oldphone'=> $oldphone

                                                                    ]);
                                                            }

                               
                               
                       
                       
                       
                        2.4.2 添加授权路由
                       
                                        // 授权接口 [只适合一级 ]
                                        Route::any('subauth', 'Wechart\WxSendTempController@subauth');
                       
                                        写function 授权的那个function subauth
                                       
                                       
                                       
                                               /**
                                                        * 搞个网页授权 这是授权回调页
                                                */
                                            public function subauth()
                                            {
                                              $config = $this->sendConfig();

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

                                              $oauth = $app->oauth;

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

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

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

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

       








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












页: [1]
查看完整版本: 微信公众号网页授权系列