微信公众平台|通过openId获取用户信息(unionId)

由于微信公众平台与微信开放平台的性质不同,所以它们对应用户的openId也是不同的,乃至不同公众号之间也是不一样的。相信很多开发者对此也吐糟过很多次了吧,小编也是无力吐槽了。之前完全没接触过微信开发,一开始时完全被这两个平台搞懵了,后面查了资料才搞懂是怎么回事。


进入主题,通过openId获取用户信息(unionId),前提条件是微信公众号要与微信开放平台进行绑定。
其实也就是http请求,贴上代码(小编写的这个类后面应该会慢慢更新,就看后面有没有开发需求啦,哈哈)
// +----------------------------------------------------------------------
// | 微信公众平台开发
// | 1.发送模板短信
// | 2.获取微信用户信息
// | 3...
// +----------------------------------------------------------------------
// | Copyright (c) 2016 http://www.lrfun.com All rights reserved.
// +----------------------------------------------------------------------
// | Author: lrfun 
// +----------------------------------------------------------------------
// | Date: 2016-10-14
// +----------------------------------------------------------------------

Class WeChat{
	protected $appid;
    protected $secrect;
    protected $accessToken;
	
	function __construct(){
		$this->appid       = "xxx";
		$this->secrect     = "xxx";
		$this->accessToken = $this->getAccessToken();
	}
	
	/***
	 * 获取access_token
	 * @return
	 **/
	private function getAccessToken(){
		$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->secrect;
		$res = json_decode($this->httpRequest($url),true);
		//$access_token = $res['access_token'];
		return $res['access_token'];
	}
	
	/***
	 * POST或GET请求
	 * @url 请求url
	 * @data POST数据
	 * @return
	 **/
	private function httpRequest($url, $data = ""){
		$curl = curl_init();
		curl_setopt($curl, CURLOPT_URL, $url);
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
		if(!empty($data)){	//判断是否为POST请求
			curl_setopt($curl, CURLOPT_POST, 1);
			curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
		}
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
		$output = curl_exec($curl);
		curl_close($curl);
		return $output;
	}
	
	/***
	 * 发送模板短信
	 * @data 请求数据
	 * @return
	 **/
	public function sendTemplateMessage($data = ""){
		$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$this->accessToken;
		$result = $this->httpRequest($url, $data);
		return $result;
	}
	
	/***
	 * 通过openId获取用户信息
	 * @openId
	 * @return
	 **/
	public function getUserInfo($openId){
		$url  = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->accessToken."&openid=".$openId."&lang=zh_CN";
		$data = $this->httpRequest($url);
		return $data;
	}
}

//调用代码
require_once('WeChat.class.php');
$openId = "oSKzJveryWmVaso7ylk3b-frjuo";
$wechat = new WeChat();
$info = $wechat->getUserInfo($openId);
print_r($info);

那么获取到unionId有什么用呢?unionId是真正的唯一标识,无论是在不同的公众号、开饭平台上微信用户的unionId都是一样的。
下面就举一个例子,移动端与PC端的微信登录功能,移动端是授权公众号登录,而PC端是扫码授权开放平台登录,由于两个平台的openId不一致,所以要通过unionId保持账号一致。

公众平台--> openId --> unionId <-- openId <--开放平台

PS:如何获取openId,小编之前有写过一篇文章:【传送门

(转载请注明:转自http://www.lrfun.com

欢迎转载,原文地址:http://www.lrfun.com/html/technology/PHP/2016/1014/101.html

上一篇:微信公众平台开发|发送模板消息
下一篇:微信授权登录获取openId和unionId