UnionID机制说明unionid来区分用户的唯一性,在相同微信开放平台帐号下的移动应用、网站应用、小程序、公众号,用户的unionid是唯一的。也就是说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
OpenID机制说明
OpenId是用来区分应用的唯一性,在相同微信开放平台账号下不用的应用,其unionid相同,OpenId而不同,比如说同一个微信开放平台绑定了多个小程序应用,每个应用的OpenId是不相同。
UnionID获取途径绑定了开发者帐号的小程序,可以通过下面3种途径获取UnionID。
调用接口,从解密数据中获取UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。
如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过+获取到该用户UnionID,无须用户再次授权。
如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过+获取到该用户UnionID,无须用户再次授权。
UnionID获取两种实现方式:
①通过小程序接口,从解密数据中获取UnionID。
以上是微信参考文档:
通过解密wx.getUserInfo返回的encryptedData来获取
demo.php
?php//目录入口define('AESAPI_ROOT_PATH',dirname(__FILE__)."/AES");//define('YUNAPI_URL','http://cmq-queue-gz.api.qcloud.com');require_onceAESAPI_ROOT_PATH.'/wxBizDataCrypt.php';classAES{publicfunction__construct(){//$this-appid='';//$this-sessionKey='';}/解析$encryptedData参数@param$appid小程序id@param$encryptedData加密串@param$iv用户iv@param$sessionKey用户sessionKey/publicfunctiondecryption($appid,$encryptedData,$iv,$sessionKey){$pc=newWXBizDataCrypt($appid,$sessionKey);$errCode=$pc-decryptData($encryptedData,$iv,$data);if($errCode==0){return$data;}else{return$errCode;}}}wxBizDataCrypt.php
?php/对微信小程序用户加密数据的解密示例代码.@copyrightCopyright(c)1998-2014TencentInc./include_once"errorCode.php";classWXBizDataCrypt{private$appid;private$sessionKey;/构造函数@param$sessionKeystring用户在小程序登录后获取的会话密钥@param$appidstring小程序的appid/publicfunction__construct($appid,$sessionKey){$this-sessionKey=$sessionKey;$this-appid=$appid;}/检验数据的真实性,并且获取解密后的明文.@param$encryptedDatastring加密的用户数据@param$ivstring与用户数据一同返回的初始向量@param$datastring解密后的原文@returnint成功0,失败返回对应的错误码/publicfunctiondecryptData($encryptedData,$iv,&$data){if(strlen($this-sessionKey)!=24){returnErrorCode::$IllegalAesKey;}$aesKey=base64_decode($this-sessionKey);if(strlen($iv)!=24){returnErrorCode::$IllegalIv;}$aesIV=base64_decode($iv);$aesCipher=base64_decode($encryptedData);$result=openssl_decrypt($aesCipher,"AES-128-CBC",$aesKey,1,$aesIV);$dataObj=json_decode($result);if($dataObj==NULL){returnErrorCode::$IllegalBuffer;}if($dataObj-watermark-appid!=$this-appid){returnErrorCode::$IllegalBuffer;}$data=$result;returnErrorCode::$OK;}}注意事项:会话密钥session_key有效性,调用时,用户的session_key可能会被更新而致使旧session_key失效,每个session_key只能使用一次。
解析参数如下:
②通过小程序wx.login获取code,请求微信code2Session接口,获取UnionID
publicfunctiongetXcxUserInfo($code){if(!$code)returnarray();//小程序专用信息$appid='';//南泥湾商户版$appsecret='';$url="https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$appsecret}&js_code={$code}&grant_type=authorization_code";$res=$this-http_request($url);return$res;}/curl模拟http请求GET/POST@param$url@paramnull$data@returnarray/publicfunctionhttp_request($url,$data=null){$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);//以文件流形式返回curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);if(!empty($data)){//POST请求curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$data);}$output=curl_exec($ch);curl_close($ch);//返回数组returnjson_decode($output,true);}
至此,微信小程序unionid与openid都已成功获取,大家在开发中特别注意要绑定微信开放平台。
【PHPer技术栈】专注后端开发,倡导开源文化,做一个好玩、有趣、有灵魂的PHPer工程师,欢迎大家关注!
















