微信小程序getPhoneNumber获取手机号的功能需要需先调用wx.login接口,今天就来一篇wx.login接口和wx.getUserInfo接口的文章,这两个接口通常在小程序中还是十分常用的。
wx.login
调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
注:调用 login
会引起登录态的刷新,之前的 sessionKey 可能会失效。
小程序端代码:
没什么说的,直接调用就行了,重点是PHP代码
//app.js
App({
onLaunch: function() {
this.getOpenId()
},
//获取openid
getOpenId: function (cb) {
var that = this
if (this.globalData.openid) {
typeof cb == "function" && cb(this.globalData.openid)
} else {
wx.login({
success: function (res) {
// console.log(res.code);//(1)如果登录成功打印code值
if (res.code) {
//发起网络请求
wx.request({
url: 'https://api.qq52o.me/Api/openid',
data: {
code: res.code//将code值传入php中
},
success: function (result) {
console.log(result);//传入成功code值返回过来
var res = result.data
that.globalData.openid = res.openid
that.globalData.session_key = res.session_key
typeof cb == "function" && cb(that.globalData.openid);
typeof cb == "function" && cb(that.globalData.session_key);
}
})
} else {
conso1e.log('获取用户登录态失败!' + res.errMsg)
}
}
});
}
},
})
PHP代码:code 换取 session_key
这是一个 HTTPS 接口,开发者服务器使用登录凭证 code 获取 session_key 和 openid。
public function openid(){
$code= $_REQUEST['code'];
// 需要修改APPID和SECRET
$url="https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=$code&grant_type=authorization_code";
function getcurl ($url){
$ch = curl_init();
curl_setopt ($ch,CURLOPT_URL,$url);
curl_setopt ($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt ($ch,CURLOPT_TIMEOUT,30);
$content=curl_exec($ch);
$status=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE );
if( $status==404)
{
return "";
}
curl_close($ch) ;
return $content;
}
//code换取openid
$res= getcurl($url);
print_r($res);
}
请求参数:
参数 | 必填 | 说明 |
---|---|---|
appid | 是 | 小程序唯一标识 |
secret | 是 | 小程序的 app secret |
js_code | 是 | 登录时获取的 code 此代码中为$code 无需更改 |
grant_type | 是 | 填写为 authorization_code |
完成以上步骤,就相当于完成了微信的授权登陆,调用wx.login接口成功。接着,完成授权以后,通常的小程序都有一个我的页面,需要显示用户的头像以及微信名等,下面介绍wx.getUserInfo获取用户信息接口。
wx.getUserInfo
获取用户信息,withCredentials 为 true 时需要先调用 wx.login 接口,需要用户授权 scope.userInfo。
此处的用户授权,即为需要获取用户授权同意后才能调用,如果拒绝则调用失败。
- 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
- 如果用户已授权,可以直接调用接口;
- 如果用户已拒绝授权,则短期内不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。
//app.js
getUserInfo: function (cb) {
var that = this
if (this.globalData.userInfo) {
typeof cb == "function" && cb(this.globalData.userInfo)
} else {
//调用登录接口
wx.login({
success: function () {
wx.getUserInfo({
success: function (res) {
var userInfo = res.userInfo
that.globalData.userInfo = res.userInfo;
typeof cb == "function" && cb(that.globalData.userInfo);
}
})
}
})
}
},
很简单的调用用户信息就完成了,声明全局变量即可。
userInfo参数说明:
解密后为以下 json 结构
{
"openId": "OPENID", //用户的openid
"nickName": "NICKNAME", //用户昵称
"gender": GENDER, //用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
"city": "CITY", //用户所在城市
"province": "PROVINCE", //用户所在省份
"country": "COUNTRY", //用户所在国家
"avatarUrl": "AVATARURL", //用户头像
"unionId": "UNIONID",
"watermark":
{
"appid":"APPID", //小程序的appid
"timestamp":TIMESTAMP //时间戳
}
}
如果有什么问题可以留言,或者加我好友联系。
网站酷炫~
这个,我用到过。
还不需要小程序 😛
重点是小程序的前端,哈哈
@西枫里博客 哈哈哈 对头~