这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

uni.login(OBJECT)登录

H5平台登陆注意事项:

微信内嵌浏览器运行H5版时,可通过js sdk实现微信登陆,需要引入一个单独的js,详见普通浏览器上实现微信登陆,并非开放API,需要向微信申请,仅个别开发者有此权限H5平台的其他登陆,比如QQ登陆、微博登陆,uni-app未封装,请在条件编译里按普通H5写法编写。

OBJECT 参数说明

参数名 类型 必填 说明 平台差异说明provider String 否 登录服务提供商,通过 uni.getProvider 获取,如果不设置则弹出登录列表选择界面
scopes String/Array 见平台差异说明 授权类型,默认 authbase。支持 authbase(静默授权)/ authuser(主动授权) / authzhima(芝麻信用) 支付宝小程序timeout Number 否 超时时间,单位ms 微信小程序、百度小程序success Function 否 接口调用成功的回调
fail Function 否 接口调用失败的回调函数
complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

参数名 说明authResult 登录服务商提供的登录信息,服务商不同返回的结果不完全相同errMsg 描述信息

uni.login({
  provider: 'weixin',
  success: function (loginRes) {
    console.log(loginRes.authResult);
  }
});

uni.checkSession检查登录状态是否过期

属性 类型 必填 说明success function 否 接口调用成功的回调函数fail function 否 接口调用失败的回调函数complete function 否 接口调用结束的回调函数(调用成功、失败都会执行)

uni.getUserInfo(OBJECT)获取用户信息。

UNI-APP 开发微信公众号(H5)JSSDK 的使用方式

在 uniapp 中可以使用模块方式引用微信 js-sdk ,微信官网直接下载的使用有问题,可以使用 jweixin-module。

安装

下载使用方式下载地址:https://unpkg.com/jweixin-module@1.4.1/out/index.js

使用

var jweixin = require('jweixin-module')  
jweixin.ready(function(){  
    // TODO  
});

小程序:

1、使用 button 组件,并将 open-type 指定为 getUserInfo 类型,获取用户基本信息。

详情参考文档:

https://developers.weixin.qq.com/miniprogram/dev/component/button.html

2、使用 open-data 展示用户基本信息。

详情参考文档:

https://developers.weixin.qq.com/miniprogram/dev/component/open-data.html

provider String 否 登录服务提供商,通过 uni.getProvider 获取
withCredentials Boolean 否 是否带上登录态信息。 微信小程序、头条小程序lang Number 否 指定返回用户信息的语言,默认为 en。更多值请参考下面的说明。 微信小程序timeout Number 否 超时时间,单位 ms。 微信小程序success Function 否 接口调用成功的回调
fail Function 否 接口调用失败的回调函数
complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)

userInfo 参数说明

参数 类型 说明 平台差异说明nickName String 用户昵称
openId String 该服务商唯一用户标识 5+AppavatarUrl String 用户头像

uni.login({
  provider: 'weixin',
  success: function (loginRes) {
    console.log(loginRes.authResult);
    // 获取用户信息
    uni.getUserInfo({
      provider: 'weixin',
      success: function (infoRes) {
        console.log('用户昵称为:' + infoRes.userInfo.nickName);
      }
    });
  }
});

说明:调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

注意:

会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。临时登录凭证 code 只能使用一次

uni.getProvider(OBJECT)获取服务供应商。仅App平台支持。

在App平台,可用的服务商,是打包环境中配置的服务商,与手机端安装了什么app没有关系。

云打包在manifest中配置相关模块和SDK信息,离线打包在原生工程中配置。某个服务商配置被打包进去,运行时就能得到相应的服务供应商。

uniapp 微信小程序授权后获取用户信息:Padding is invalid and cannot be removed报错解析

报错原因:

是因为在调用uni.login时,可能会刷新登录状态。通过uni.login获取到的code请求到的session_key,在请求获取手机号时所需的参数值不一致所导致的报错。

解决办法:

在onLoad生命周期,先获取code,再使用wx.getUserInfo配合后端接口获取手机号即可。我这里只写前端处理,后端api接口请根据官方文档编写。

代码片段:

<template>
<button open-type="getPhoneNumber" @getphonenumber="wxLogin" class="wxLogin_Btn">使用微信登录</button>
</template>
<script>
	import {GetUserSessionKeyAndOpenid,WXLogin} from '../api.js'
	export default{
		data(){
			return{
				wxUserCode:'',
			}
		},
		onLoad(){
				this.getWxUserCode();
			},
		methods:{
			getWxUserCode(){
				let that = this;
				//先登录,获取用户code
				uni.login({
					provider: 'weixin',
					success: res => {
						that.wxUserCode = res.code;
					}
				})
			},
			//微信一键登录
			wxLogin(e){
				const that = this;
				if(that.wxUserCode == ''){
					that.$refs.uToast.show({
						title:'微信登录授权失败',
						type: 'error'
					})
					that.getWxUserCode();
					return false;
				}
				beginLoading('登录中...');
				const getSessionParam ={
					code:that.wxUserCode
				}
				//获取用户session_key和openid
				GetUserSessionKeyAndOpenid(that,getSessionParam).then(sessionKeyAndOpenidRes =>{
					wx.getSetting({
					  success: res => {
						if (res.authSetting['scope.userInfo']) {
						  // 已经授权,可以直接调用 getUserInfo 获取头像昵称
						  wx.getUserInfo({
							success: res => {
							 if(e.detail.errMsg != 'getPhoneNumber:ok'){
								 endLoading();
								 that.$refs.uToast.show({
									title:'获取个人信息失败',
									type: 'error'
								 })
								 that.getWxUserCode();
								 return false;
							 }
							 const param = {
								session_key:sessionKeyAndOpenidRes.Data.session_key,
								iv:e.detail.iv,
								encryptedData:e.detail.encryptedData
							 }
							 //调用后端api,获取手机号
							 WXLogin(that,param).then(wxLoginRes =>{})
							}
						  })
						}
					  }
					})
				})
			},
		},
	}
</script>

本文转载于:

https://blog.csdn.net/qq_40615333/article/details/120200204

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。