先找到这里,之后很多地方要用
手机端授权界面根据自己项目情况,看看需不需要一个好看的授权页面。我是直接使用的网址,也就是前端ajax请求登录之后,直接让他在界面里请求相关地址,把红色框里的需要改的改成自己的就行。
https://open.weixin.qq.com/connect/oauth2/authorize?appid= 写入自己的公众号的appid
&redirect_uri=这个地方是你的授权后重定向的回调链接地址,千万注意需要使用 urlEncode 对链接进行处理:举例子:http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php
&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect
下一步就需要写好你的回调地址里的内容,里面需要获取code从而取到相关登录人员的基本授权信息
public function weiXin()
{
$wchat = new \wechat\WechatOauth();
$code = $this->request->param('code',"");
$userW = $wchat->getUserAccessUserInfo($code);
//此处是处理完成之后返回数据根据自己实际需要看看需不需要存起来
//array(9) {
// ["openid"]=> string(28) "你需要用的个人唯一id"
// ["nickname"]=> string(9) "你的微信名字"
// ["sex"]=> int(0)男女
// ["language"]=> string(5) "zh_CN"
// ["city"]=> string(6) "市"
// ["province"]=> string(6) "省"
// ["country"]=> string(6) "哪个国家,中国牛逼"
// ["headimgurl"]=> string(140) "我是头像"
// ["privilege"]=> array(0) { } }
//重定向跳转到需要去的页面,因为这个是回调,前段获取不到只能自己去重定向
$this->redirect('http://***************/mine.html');
}
接下来就是重要的了,也就是他需要用的基本类库,我为了方便找,放到这个路径下了
<?php
namespace wechat;
/**
* @package 微信授权控制器
*/
class WechatOauth {
//微信授权配置信息
private $wechat_config = '';
public function __construct() {
$this->wechat_config = $this->wechatConfig();
}
/**
* 获取秘钥配置
* @return [type] 数组
*/
public function wechatConfig() {
return ['appid' => '写入你自己的appid', 'appsecret' => '写入你自己的appsecret',];
}
/**
* 获取openid
* @return string|mixed
*/
public function getUserAccessUserInfo($code = "") {
if (empty($code)) {
$baseUrl = request()->url(true);
$url = $this->getSingleAuthorizeUrl($baseUrl, "123");
Header("Location: $url");
exit();
} else {
$access_token = $this->getSingleAccessToken($code);
return $this->getUserInfo($access_token);
}
}
/**
* 微信授权链接
* @param string $redirect_uri 要跳转的地址
* @return [type] 授权链接
*/
public function getSingleAuthorizeUrl($redirect_url = "", $state = '1') {
$redirect_url = urlencode($redirect_url);
return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->wechat_config['appid'] . "&redirect_uri=" . $redirect_url . "&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect";
}
/**
* 获取token
* @return [type] 返回token
*/
public function getSingleAccessToken($code) {
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->wechat_config['appid'] . '&secret=' . $this->wechat_config['appsecret'] . '&code=' . $code . '&grant_type=authorization_code';
$access_token = $this->https_request($url);
return $access_token;
}
/**
* 发送curl请求
* @param $url string
* @param return array|mixed
*/
public function https_request($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$AjaxReturn = curl_exec($curl);
//获取access_token和openid,转换为数组
$data = json_decode($AjaxReturn, true);
curl_close($curl);
return $data;
}
/**
* @explain
* 通过code获取用户openid以及用户的微信号信息
* @return array|mixed
* @remark
* 获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token
* access_token每日获取次数是有限制的,access_token有时间限制,可以存储到数据库7200s. 7200s后access_token失效
*
*/
public function getUserInfo($access_token = []) {
if (!$access_token) {
return ['code' => 0, 'msg' => '微信授权失败', ];
}
$userinfo_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token['access_token'] . '&openid=' . $access_token['openid'] . '&lang=zh_CN';
$userinfo_json = $this->https_request($userinfo_url);
//获取用户的基本信息,并将用户的唯一标识保存在session中
if (!$userinfo_json) {
return ['code' => 0, 'msg' => '获取用户信息失败!', ];
}
return $userinfo_json;
}
}
然后就结束啦 。就是这么随意