微信公众号网页授权系列
===================================== 微信公众号网页授权系列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]