ThinkPHP implements WeChat three-party login
A small episode is that the app implemented WeChat three-party login a long time ago, and then the PC WeChat three-party login was added. The document says that the unionid is unified for different applications under the same account, but the app uses uid. As a result, the unionid obtained by the PC was never correct, which led to a waste of a day looking for data unification issues. The remaining problems were solved! I hope that friends who make apps and PCs must pay attention to the three-way WeChat login. Both apps and PCs need unionid! Okay, let’s start teaching you how to integrate three-party WeChat login on PC:
1. The information filled in when applying, the scanned copy of the main website information registration form is provided by the customer, and the rest is filled in by yourself. Note that the authorized callback domain must write the first-level domain name, which must be consistent with the recudirt_url when calling
Steps to call the interface
(1):
Notice that the small WeChat icon is the WeChat login link, which is the a tag, and href is this value (official document No. 1 store WeChat login)
https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https://passport.yhd.com/w echat/callback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect
(2) The above link will return a code parameter, which is the medium for exchanging access_token and openid values. After that, it will be logically judged
if(isset($_GET['code'])&&$_GET['state'] =='3d6be0a4035d839573b04816624a415e') {
//The method called is to obtain the user’s personal information
$res = $this->message_request($code);
}
public function message_request($code){
//Modify your own
$appid = "wx16a15XXXXXXXXX";
$appsecret = "fc4b2b999787cXXXXXXXXXXX";
//Modify your own
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
$output = $this->httpsRequest($url);
$jsoninfo = json_decode($output, true);
$openid = $jsoninfo["openid"];
$access_token = $jsoninfo['access_token'];
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
$output = $this->httpsRequest($url);
$message = json_decode($output,true);
return $message;
}
public function httpsRequest($url,$data = null){
$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)){
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;
}
Important:
The access_token is different from the WeChat public platform user authorization login. The WeChat public platform has a limit of one day, while the open platform has no limit. It must be generated at the same time and cannot expire. To keep the information of app and PC users in sync, ["unionid"] is used. This is different applications under the same open platform ["unionid"]. It is unique. Both apps and PCs need this
Result obtained
array(10) { ["openid"] => string(28) "oD5XQwgVj1gLb3_zgjP72uDgESYk" ["nickname"] => string(6) "Liu Zhu" //User's nickname ["sex"] => int (1) //Gender 1: Male ["language"] => string(5) "zh_CN" ["city"] => string(6) "Nankai" //District ["province"] => string(7) "Tianjin" //Province["country"] => string(2) "Tianjin" //City["headimgurl"] => string(129) "http://wx.qlogo.cn /mmopen/aQVS6rQD9yJTTHTcyb0AqLOQ3rBoyNL3CyEJleogBib53Y6xiaibZvfZ6quDApeKuPG10sCYKkDvPwkiayUj3dMXjNicOVkV73x1k/0" //User's avatar ["privilege"] => array(0) { } ["unionid"] => string( 28) "o2VJ4xEUwd51_7F2bhisYBhF3fVk" //Unionid app and pc information remain consistent benchmark}