公众号-获取用户信息


```php

```php
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{

    public function index()
	{
		$appid = config('params.appid');//自己的appid
		if (!session('?userinfo')) {
			if (!isset($_GET['code'])) {//没有code,去微信接口获取code码

    			$redirect_uri = 'http://xxxx.cn';//自己的跳转地址
				$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . $redirect_uri . '&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect';
				header("location:$url");
				exit();
			} else {//获取code后跳转回来到这里了
				$code = $_GET['code'];
				$data = $this->get_access_token($code);//获取网页授权access_token和用户openid
				$data_all = $this->get_user_info($data['access_token'], $data['openid']);//获取微信用户信息
				
				return json($data_all);
			}

		} else {
			$ret = session('userinfo');
			return json($ret); //返回的获取到的微信用户信息
		}

	}

	//获取access_token
	private function get_access_token($code)
	{
		$appid = config('params.appid');//自己的appid
		$appsecret = config('params.appSecret');//自己的
		$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code';
		$user = json_decode(file_get_contents($url));
		if (isset($user->errcode)) {
			echo 'error:' . $user->errcode . '
			msg :' . $user->errmsg;
			exit;
		}

		$data = json_decode(json_encode($user), true);//返回的json数组转换成array数组
		return $data;

	}

	/**
	* 使用access_token获取用户信息
	* @param string access_token
	* @param string 用户的openid
	* @return array 用户信息数组
	*/
	private function get_user_info($access_token, $openid)
	{
		$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN';
		$user = json_decode(file_get_contents($url));
		if (isset($user->errcode)) {
			echo 'error:' . $user->errcode . 'msg :' . $user->errmsg;
			exit;
		}
		$data = json_decode(json_encode($user), true);//返回的json数组转换成array数组
		return $data;

	}

}

在微信公众号获取用户信息(网页授权获取)的实现步骤如下: 1. **配置公众号**: - 登录微信公众号平台,进入“开发”->“基本配置”,记录开发者ID(AppID)和开发者密钥(AppSecret)。 - 进入“公众号设置”->“功能设置”,设置“网页授权域名”,确保域名已备案并可访问。 2. **引导用户同意授权**: - 在网页中生成一个授权链接,引导用户点击该链接进行授权。授权链接的格式如下: ``` https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect ``` - `APPID`:公众号的唯一标识。 - `REDIRECT_URI`:授权后重定向的回调链接地址,需进行URL编码。 - `response_type`:返回类型,请填写code。 - `scope`:应用授权作用域,`snsapi_base`(不弹出授权页面,直接跳转,只能获取用户openid)或`snsapi_userinfo`(弹出授权页面,可通过openid拿到昵称、性别、所在地等)。 - `state`:重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节。 - `#wechat_redirect`:无论直接打开还是做页面302重定向时候,必须带此参数。 3. **用户同意授权后回调**: - 用户同意授权后,微信会重定向到`REDIRECT_URI`,并在URL中携带`code`和`state`参数。 - 在回调页面中,通过`code`参数获取`access_token`和`openid`。 4. **通过code获取access_token**: - 构造请求URL: ``` https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code ``` - `APPID`:公众号的唯一标识。 - `SECRET`:公众号的开发者密码。 - `CODE`:填写第一步获取的code参数。 - `grant_type`:填写authorization_code。 - 发送HTTP GET请求,获取`access_token`和`openid`。 5. **获取用户信息**: - 构造请求URL: ``` https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN ``` - `ACCESS_TOKEN`:网页授权接口调用凭证。 - `OPENID`:用户的唯一标识。 - `lang`:返回国家地区语言版本,zh_CN简体,zh_TW繁体,en英文。 - 发送HTTP GET请求,获取用户信息。 以下是一个简单的示例代码: ```javascript function getUserInfo() { // 假设用户在微信中点击了授权链接并重定向回来 const code = getQueryParam('code'); const state = getQueryParam('state'); if (code) { // 通过code获取access_token fetch(`https://api.weixin.qq.com/sns/oauth2/access_token?appid=YOUR_APPID&secret=YOUR_SECRET&code=${code}&grant_type=authorization_code`) .then(response => response.json()) .then(data => { const accessToken = data.access_token; const openid = data.openid; // 通过access_token和openid获取用户信息 fetch(`https://api.weixin.qq.com/sns/userinfo?access_token=${accessToken}&openid=${openid}&lang=zh_CN`) .then(response => response.json()) .then(userInfo => { console.log(userInfo); // 处理用户信息 }); }); } else { // 跳转到微信授权页面 const redirectUri = encodeURIComponent('YOUR_REDIRECT_URI'); window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=YOUR_APPID&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`; } } function getQueryParam(param) { const urlSearchParams = new URLSearchParams(window.location.search); return urlSearchParams.get(param); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值