小程序使用wx.login与auth.code2Session获得openid的方法详解

1年前 9808次浏览

微信小程序获得用户头像等信息

首先:使用wx.login成功后会返回一个json,

成功时如:{errMsg: "login:ok", code: "0611rxBI0WFaRd2q0YCI0lnLBI01rxBB"}

接着:获得这个code后就可以使用auth.code2Session获得用户唯一凭证诸如openid。openid具有唯一性,每一个微信对应一个小程序只有其唯一的一个,更换手机也不会变。

image.png

需要注意的是上面的code只能够使用一次,多次使用就会提示“code been used”

image.png

当然,每一次使用wx.login成功时code是不一样的,通过wx.request将这个code发送到服务端,服务端程序通过GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code得到openid

在小程序中代码:

// 登录S
wx.login({ 
success(res) {	
if (res.code) {
//登陆成功并成功返回code便发起网络请求获得OPENID
wx.request({
url: 'test.php',
data: {//将res.code发送到服务端test.php
code: res.code
},
success: function(res){
wx.setStorage({//将得到的openid存储到缓存里面方便后面调用
key:"openid",
data:res.data.openid
})
}
})
}else{
console.log('登录失败!'+res.errMsg);
}}})
//登陆E

test.php中主要代码为

function geturl($url){//geturl函数
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
$appid="wx5df8***";
$secret="dd126***";//小程序appid与secret配置
if(isset($_GET["code"])&&$_GET["code"]<>""){
$js_code=$_GET["code"];
}else{
die("ERROR");
}//获得js_code
$url="https://api.weixin.qq.com/sns/jscode2session?appid=".$appid."&secret=".$secret."&js_code=".$js_code."&grant_type=authorization_code";
$tmpstr=geturl($url);
echo $tmpstr;//输出数据以供小程序端获得

以上便是我对wx.login的使用。至于wx.login放在哪里,个人觉得放在app.js中的onLaunch中,这样在小程序启动时就可以获得openid并存储,方便后面页面的调用。