ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

关于小程序微信授权登录提示偶现41003问题

2021-03-18 11:58:38  阅读:1182  来源: 互联网

标签:function code 微信 iv 偶现 encryptedData 41003 encodeURIComponent


关于小程序微信授权登录提示41003

文章简介

之前做项目的时候遇到微信授权登录偶现的41003问题,也是排查了好久才找到原因,在这边做下记录,也做下分享。

原因一(iv和encryptedData转码问题)

因为微信小程序提供的特定授权按钮 button open-type=“getPhoneNumber”,获得的iv和encryptedData,会含有 "+ ?"特殊符号,所以前端这边传输的时候需要使用encodeURIComponent 函数进行 urlencode,后端接收urldecode,
例如:

// An highlighted block
let param = {
	encryptedData: encodeURIComponent(e.detail.encryptedData),
	iv: encodeURIComponent(e.detail.iv),
	code: code
}

试了一下全部转码了,结果没啥卵用,还是没有解决 偶现的41003问题,重新排查,排查终于排查到了第二个原因。

原因二(wx.login()获取code顺序问题)

本来的的代码是这样,例:

// An highlighted block
<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">微信一键登录,领取名片</button> 
// An highlighted block
getPhoneNumber: function(e) {
	uni.login({
		success: function(loginRes) {
			let param = {
				encryptedData: encodeURIComponent(e.detail.encryptedData),
				iv: encodeURIComponent(e.detail.iv),
				code: loginRes.code
			}
			wx.request({
				data: param,
				success:function() {
				
			})
		}
	})	
}

经过尝试发现wx.login()里code的获取是不能放在 button* *open-type="getPhoneNumber"的回调函数里面的,code应该是需要提前获取了,例:

// An highlighted block
<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">微信一键登录,领取名片</button> 
// An highlighted block
// 每次已进入页面就请求code,存放本地,过了有效期五分钟,重新请求code
onShow() {
	wxlogin()
	// 微信登录code有效期 五分钟
	this.globalTimer = setInterval(() => {
		wxlogin()
	}, 299990)
}

// 请求code方法
wxlogin = function() {
	uni.login({
		success: function(loginRes) {
			uni.setStorageSync('code', loginRes.code);	
		}
	})
}
// *button** ==*open-type="getPhoneNumber"回调
getPhoneNumber: function(e) {
	let param = {
		encryptedData: encodeURIComponent(e.detail.encryptedData),
		iv: encodeURIComponent(e.detail.iv),
		code: uni.getStorageSync('code');	
	}
	wx.request({
		data: param,
		success:function() {
		
	})
}
// 离开页面 清除定时器
onHide() {
	if (this.globalTimer) {
		clearInterval(this.globalTimer)
	}
},

改成这种提前获取code然后再传入getPhoneNumber的回调函数使用仪器传给后端发现 偶现的==41003== 问题就解决了。

结尾

分享了我的项目经历,希望对大家有帮助。如果觉得有用可以赏杯咖啡
在这里插入图片描述

标签:function,code,微信,iv,偶现,encryptedData,41003,encodeURIComponent
来源: https://blog.csdn.net/qq_35483460/article/details/114971290

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有