以下代码基于uni-app编写 如果没有appid,那么uni-login是受限制的
https://open.weixin.qq.com/ 认证商户()
微信登入
不同的应用对于微信登入会做不同的处理,即微信服务器(微信官方的)返回发送的OpenId是不相同的(后面会解释OpenId是干嘛用的,它涉及到数据库)。因此也有
UnionID
UnionID 机制说明
如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的
本站后端服务后一部分(已经获取到OpenId,UnionID或者请求,暂时叫身份标识VID)
当客户端已经发送带有VID的东西时,可以存入数据库表(
user表,有id, VID, name, avatarUrl等字段
)
,注意,获取到VID先查询是否存在,不存在则插入新增一条记录,否则检验name和VID是否匹配(其实可以只检查VID),检验成功则表示登入成功(这里可以使用正常的前后端登入逻辑,如token等),返回数据给客户端。
App端
AppSDK配置里的微信登入appid和appsecret需要填写,开发时暂时可以随便写,如果上线要申请微信的(微信开发者平台)
app端可以直接通过接口获取第三方接口:通过发送发送自带的login请求,再响应成功后,获取到VID,再次请求getUserInfo,响应成功获取用户微信已有信息,向本站服务器发起登入请求,携带VID(一般还有头像和名称)
export default {
data() {
return {
};
},
//生命周期
onLoad:function(){
//app 端微信登录
// 手册位置 https://uniapp.dcloud.io/api/plugins/login?id=getuserinfo
// #ifdef APP-PLUS 判断环境
uni.login({
success: (res) => {
// res 对象格式
//{"code":"***",
//"authResult":{
//"openid":"***",
//"scope":"snsapi_userinfo",
//"refresh_token":"**",
//"code":"****",
//"unionid":"***",
//"access_token":"***",
//"expires_in":7200
//},
//"errMsg":"login:ok"}
uni.getUserInfo({
success: (info) => {
// info 对象格式
// {"errMsg":"getUserInfo:ok",
// "rawData":"...
// "userInfo":{
//"openId":"***",
//"nickName":"***",