唯一标识 微信小程序_微信小程序获取用户openid方法 | 夕辞

最近在研究小程序,遇到想将一些账户信息和登录小程序的用户ID绑定到一起,但是官网简单例子里拿到的userInfo里面并没有用户唯一标识,因此就研究了下如何获取用户这个唯一标识的问题,而openid也足够我用了,在这里分享下获取方法:

//app.js

App({

onLaunch: function() {

wx.login({

success: function(res) {

if (res.code) {

//发起网络请求

wx.request({

url: 'https://test.com/onLogin',

data: {

code: res.code

}

})

} else {

console.log('获取用户登录态失败!' + res.errMsg)

}

}

});

}

})

可以看到代码中,第一个login方法是必须请求的,主要为了获取一个临时的code,用来请求其他用户的敏感数据,下面的wx.request中的url,官方是写的测试,正确应该是

https://api.weixin.qq.com/sns/jscode2session?appid=你的appId&secret=你的appSecret&js_code=刚才获取的CODE&grant_type=authorization_code

以上URL中appId和appSecret需要替换为自己的,后面的code就是前面你login返回的code,我们需要以此code来获取用户的openid。

需要注意的是,如果按照官方的文档,你是获取不成功的,调试的时候你会发现提示你api.weixin.qq.com这个域名不在你的request合法域名里,而且你也加不进去,因为说白了小程序还是前端代码,如果这样访问,就会把appId和appSecret这些敏感信息放在前端,这个是不允许的,因此,官方的建议是你将获取openid的操作封装到你的服务器,你通过将code请求到你自己的服务器,然后服务器来请求获取openid再返回结果给前端!!!

贴一下我的部分代码:

getUserOpenInfo: function (cb) {

var that = this

if (this.globalData.userOpenInfo) {

typeof cb == "function" && cb(this.globalData.userOpenInfo)

} else {

//调用登录接口

wx.login({

success: function (res) {

if (res.code) {

wx.request({

url: 'https://我的获取openid的服务器地址',

data: {

code: res.code

},

method: 'POST',

header: { "content-type": "application/x-www-form-urlencoded" },

success: function (res) {

if (res.data.code == 0) {

that.globalData.userOpenInfo = res.data.data;

typeof cb == "function" && cb(res.data.data);

} else {

typeof cb == "function" && cb(false)

}

},

fail: function () {

typeof cb == "function" && cb(false)

}

})

}

},

fail: function (res) { },

complete: function (res) { },

})

}

},

globalData: {

userInfo: null,

userOpenInfo: null

}

我的代码封装了返回的结果,正常微信官方返回的结果是以下的结构:

{

"openid" : "openid",

"expires_in" : "过期时间,正常是7200,代表2小时",

"session_key" : "session_key"

}

这个是微信官方返回的,另外就是openId的过期问题,虽然官方返回了过期时间,但是就官方解释来看,openid是每个用户和每个公众号是唯一的,取值类似于hash(uuid,progromid)的概念,因此理论上是不存在过期的问题的。如果其他同学了解这个问题,也欢迎回复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值