|
===================================== 微信公众号网页授权系列
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. 必须开启网页授权登录
|
|