微信授权 登录

news/2024/11/9 0:57:37/

文章目录

  • 一、微信公众号授权登录
    • 1.跳转微信授权页面
    • 2.授权成功获取code去获取用户信息(openId等信息)
    • 3.签名
  • 二、微信小程序授权登录
    • 1.先登录,在授权
    • 2.获取用户信息
  • 总结


一、微信公众号授权登录

1.跳转微信授权页面

toWXAuth(){var uri = window.location.href;  当前页面//去除当前页面链接参数var index = uri.indexOf('?');if(index != '-1'){uri = uri.substring(0, index);}let appid = '公众号APPId';//uri 授权成功后,跳转页面let redirect_uri = encodeURIComponent(uri);var path = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=3#wechat_redirect`window.location.href = path;}

2.授权成功获取code去获取用户信息(openId等信息)

//this.userInfo用户信息  optObj页面传参对象
if(!this.userInfo && optObj.code){this.wxCode = optObj.code;_self.authorization();
}
async authorization(){// wxCode 授权后取到的code,走后端接口取到用户信息var res = await this.$store.dispatch('getUserInfo', this.wxCode);if(!res.success){//授权失败,重新唤起微信授权this.$commonly.toWXAuth();return;}//如有需要调用微信的api还需要进行签名signature()// await _self.signature();}

3.签名

// 微信sdk config配置
async signature(url){var _self = this;//签名页的urlvar url  = this.signUrl = url ? url : location.href;// _self.$store.commit('install/updateAuthorizUrl', url);const success = function(res) {var result = res.result;if(res.success){jweixin.config({debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: result.appId, // 必填,公众号的唯一标识timestamp: result.timestamp, // 必填,生成签名的时间戳nonceStr:result. nonceStr, // 必填,生成签名的随机串signature: result.signature,// 必填,签名jsApiList: ['getLocation', 'startRecord', 'stopRecord', 'translateVoice'] // 必填,需要使用的JS接口列表});//完成签名后的回调函数jweixin.ready(function(){_self.getLocation();})// 通过error接口处理失败验证jweixin.error(function(res){console.log('-----------jweixin 失败验证 ------------------');})}}var sData = {opt: {data: {url: url},url: 'wechat/getWxConfig',method: 'GET'},success: success};await _self.$store.dispatch('request', sData);
}

签名成功后调用相关api或方法

// 获取定位
getLocation(){var _self = this;_self.$commonly.showLoading();jweixin.getLocation({  type: 'gcj02',success: function (res) {//初始化地图_self.initMap(res.longitude, res.latitude);//获取当前定位地址信息_self.getAdressInfo(res.latitude, res.longitude);_self.$commonly.hideLoading();},//调用api失败重新进行签名fail:async function (res) {await _self.signature();_self.getLocation();}});  
},
//获取定位信息
getAdressInfo(latitude, longitude){var _self = this;vm.$jsonp('https://apis.map.qq.com/ws/geocoder/v1/',{key: _self.key,callbackName: "getJsonData",output: 'jsonp',location: `${latitude},${longitude}`,}).then(res => {if(res.status == 0){_self.sJson.address = res.result.address;}}).catch(err => {console.log('获取地址信息失败')})
},

获取定位地址信息(会跨域,要安装插件vue-jsonp)
安装插件

npm i vue-jsonp -S
//腾讯地图key
import {key} from '../../common/js/http.js'
import Vue from 'vue'
//使用jsonp解决获取地址信息跨域问题
import {VueJsonp} from 'vue-jsonp'
//引用出错则改    import * as VueJsonp from 'vue-jsonp'
Vue.use(VueJsonp)
const vm = new Vue();
//获取定位地址信息 key 腾讯地图的key
getAdressInfo(latitude, longitude){var _self = this;vm.$jsonp('https://apis.map.qq.com/ws/geocoder/v1/',{key: _self.key,callbackName: "getJsonData",output: 'jsonp',location: `${latitude},${longitude}`,}).then(res => {if(res.status == 0){_self.sJson.address = res.result.address;}}).catch(err => {console.log('获取地址信息失败')})
},

二、微信小程序授权登录

1.先登录,在授权

uni.login({provider: 'weixin',success: function(loginRes) {_self.code = loginRes.code}
});
uni.getUserProfile({desc: '登录',success(res) {_self.wxAuthor(res, item)_self.closeTime()},fail(err) {_self.closeTime()_self.$commonly.showTip('您需要先登录')}
})

2.获取用户信息

//sJson 登录获取的数据
wxAuthor(sJson, item){const success = function (res) {let result = res.result//更新用户信息_self.$store.commit('updateUserInfo', result)_self.$store.commit('setLoginStatus', true)//登录成功跳转页面if (item.url) {_self.$commonly.nvt(item.url)}};var sData = {opt: {data: {code: _self.code,encryptedData: sJson.encryptedData,iv: sJson.iv},url: 'wechat/wxAuthor',method: 'get'},success: success}_self.$store.dispatch('request', sData);
}

总结

来自两个微信项目的总结,穿插个人业务。当中含有微信签名和跨域问题。


http://www.ppmy.cn/news/806655.html

相关文章

微信授权登陆步骤

伙伴们一起做了Javaweb小项目,微信登录授权模块是我负责,给大家普及后顺便发到这里,如果有不足的地方欢迎提出! 进入项目任意页面 进入项目任意页面,后台首先会判断该用户是否登录。 若没有登录(即sessi…

如何取消html5微信页面授权,微信授权管理在哪里?查看微信授权过的第三方应用并取消授权的方法图解...

近日微信迎来了6.5.16版本的更新,主要修复了已知问题,但其实小编发现在这个新版本当中。微信低调新增了一个授权管理功能。对于之前使用微信账户登录或进行有关授权其他应用的用户来说,这个时候就可以取消授权了,在一定程度上防止…

微信小程序登录授权流程

文章目录 小程序授权登陆流程1、当用户进入微信小程序时,首先我们先判断用户是否授权过此小程序2、如果没有授权,我们通过一个按钮来实现授权登录3、通过bindgetuserinfo事件,我们可以获取到个人的信息、加密偏移数据、加密用户信息&#xff…

如何在微信中取消已授权的第三方应用APP

由于需要测试微信登录功能,在微信授权登录成功后需要解除绑定功能。一直没有找到对应的方法。偶然间在 “发现” > "游戏"里看见了最近在玩的列表中居然有相关的APP,然后在菜单中“游戏管理”取消游戏关联"即可。但是APP和游戏没有任何…

JavaFX学习:MVC模式中的PropertyValueFactory

PropertyValueFactory类是“TableColumn cell value factory”,绑定创建列表中的项。示例如下&#xff1a; TableColumn<Person,String> firstNameCol new TableColumn<Person,String>("First Name");firstNameCol.setCellValueFactory(new PropertyVal…

Python基础 P9 异常处理

文章目录 Python基础 P9 异常处理常用异常AssertionError断言语句失败AttributeError尝试访问未知的对象属性IndexError索引超出序列的范围KeyError字典中查找一个不存在的关键字NameError尝试访问一个不存在的变量OSError操作系统产生的异常SyntaxError Python的语法错误TypeE…

windows系统vbox增强工具安装

运行环境&#xff1a; - 宿主机&#xff1a;windows 10 - 虚拟机&#xff1a;windows 7 - 虚拟机平台&#xff1a;VMvirtualBOX 6 安装完虚拟机后&#xff0c;不能共享文件和粘贴板。需要安装增强工具&#xff0c;点击设备--vbox的安装增强工具没有反应。 在虚拟机中的资源管…

PCIe x8 x16

x8 一个x16 两个x8