PHP网站应用开发 微信三方扫码登陆
1.微信开放平台配置 授权域名 (微信开放平台https://open.weixin.qq.com/)
进入管理中心 -> 网站应用->点击对应的公众号配置授权域名 审核时间较长 至少需提前一周去更改.
修改标记中的授权回调域名 和公众号回调域名是不同的 这就是一大坑. 格式为 mp.csdn.net , www.csdn.net ......
2.微信平台不在存储Appsecret 我们需要把appsecret存储起来 以便后续使用。
3. 再实际开发我们再tp5框架中 使用的是采取js调取二维码 (微信文档地址) 。
前端代码:
<div id="container"></div>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script>
var WX = new Object();
WX.__CONTAINERid = 'container'; //* 容器ID
WX.__Appid = 'wxcd58928995acef61'; //* 公众号appid
WX.__Scope = 'snsapi_login'; //* 用户授权的作用域,使用逗号(,)分隔
WX.__Redir = '*****'; //回调地址 需要进行rulencode处理 回调 需要进行 urlencode()处理
WX.__State = "{$wxlogin_state}";// 回调状态 用于做csrf验证 在这里我们采用了 session去做处理
WX.__Retype = 'code'; //死值 为获取凑得
WX.__Style = ''; //提供"black"、"white"可选,默认为黑色文字描述。详见文档底部FAQ
WX.__Href = '';//自定义样式链接,第三方可根据实际需求覆盖默认样式。详见文档底部FAQ
</script>
<script src="__STATIC__/login/js/wx_login.js"></script>
在这里我把微信官方给的js 直接复制了出来做出了调整 保存在了项目文件下,也就是上段代码中的 wx_login.js( github下载地址 )
再扫码成功并授权完成后会携带code跳转到开发者填写的回调地址中
&&**获取临时用户Token和open_id的代码
<?php
/**
* Created by PhpStorm.
* User: 林虎
* Date: 2018/7/24
* Time: 15:30
*/
namespace app\base\controller;
use think\Controller;
use app\libException\client\ParamException;
use app\model\Verify;
use app\validate\VerifyValidate;
class Wechat extends Controller
{
/**
* 获取accesssToken
*
* @access public
* @param string appid
* @param string appsecret
* @return json 返回类型
*/
//根据token 与openid获取用户数据
public function bGetUserInfo($data=[])
{
$user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$data['access_token'].'&openid='.$data['openid'];
return json_decode(https_request($user_info_url),true);
}
//通过code app_id appsecret 获取accesstoken和openid
public function bGetUserToken($code='',$appid='',$secret=''){
if(empty($code) or empty($appid) or empty($secret)){
return '请检查您的填写的参数';
}
$code_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
return json_decode(https_request($code_url),true);
}
}
&&** 回调地址控制器 代码 微信开发文档链接
public function wxlogin(){
// // echo urlencode('https://qqcardcs.10088.cn/admin/cs/index');die;
$param = request()->param();
if(!empty($param)){
if($param['state'] != Session::get('wxlogin_state'))
{
return '非法操作';
}
$bGetUserToken_res = $this->bGetUserToken($param['code'],config('appid'),config('secret')); //根据获取token 和openid
if(!empty($bGetUserToken_res['errcode'])){
$this->cInsertErr($bGetUserToken_res,'code请求token');exit;//写入错误信息
}
$Admin_model = new Admin_model();
$Ssecretary = new Ssecretary();
$bGetUserInfo_res = $this->bGetUserInfo($bGetUserToken_res); //根据token和openid 获取用户信息
$mGetAdminOne_res = $Admin_model->mGetAdminOne(['unionid'=>$bGetUserInfo_res['unionid']]);
if(!empty($mGetAdminOne_res)){
if(!empty($bGetUserInfo_res['errcode'])){
$this->cInsertErr($bGetUserInfo_res,'请求用户数据');//写入错误信息
}
$res = (new Admin_model())->mInsertAdmin($bGetUserInfo_res); //插入用户信息
return $this->redirect('index/index/index');
}else{
}
}
}
不是你浪费了时间,而是时间消耗了你的生命。