uniapp获取手机号解密时报错Illegal Buffer

先说问题,uniapp运行到小程序模拟器时可正常解密,真机调试报错,网上搜的一些编码解码问题等等无法解决,(如果模拟器都无法正常解密,请检查uni.getuser是否在uni.login之前)

错误代码:

<button class="enterpriseLogin" @click="toGetPhoneNumber" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
toGetPhoneNumber(){
				let self = this;
				uni.request({
					method:'GET',
					url:'url',
					success(idres) {
						self.appid = idres.data[0].appid;
						uni.login({
							provider: 'weixin',
							success: (loginRes) => {
								self.jsCode = loginRes.code;//保存登录后的code
								//获取session_key
								uni.request({
									url: 'https://api.weixin.qq.com/sns/jscode2session',
									method:'GET',
									data: {
									appid: idres.data[0].appid,        //你的小程序的APPID
									secret: idres.data[0].session,    //你的小程序秘钥secret,  
									js_code: self.jsCode,    //wx.login 登录成功后的code
									grant_type:'authorization_code'
									},
									success: (cts) => {
										self.openid=cts.data.openid    //openid 用户唯一标识
										self.session_key=cts.data.session_key    //session_key  会话密钥
									}
								});
							}
						});
					}
				})
			},
			getPhoneNumber(e) {
				let self = this;
				if(e.detail.errMsg==`getPhoneNumber:ok`){
					let pc = new WXBizDataCrypt(`${self.appid}`,self.session_key);
					let data = pc.decryptData(e.detail.encryptedData,e.detail.iv);
					uni.request({
						method:'GET',
						url:`url`,
						data:{
							"flag":1,
							"val":data.phoneNumber
						},
						success(res) {
							if(res.data.length == 0){
								uni.showToast({
									title: '未注册',
									duration: 2000,
									icon: 'exception'
								});
							}else{
								uni.setStorage({
									key:'logininformation',
									data:res.data[0]
								});
								uni.switchTab({
									url:'/pages/my/my'
								});
							}
						}
					})
				}
			},

正确代码:

<button class="enterpriseLogin" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
onLoad() {
			this.toGetPhoneNumber();
		},
toGetPhoneNumber(){
				let self = this;
				uni.request({
					method:'GET',
					url:'url',
					success(idres) {
						self.appid = idres.data[0].appid;
						uni.login({
							provider: 'weixin',
							success: (loginRes) => {
								self.jsCode = loginRes.code;//保存登录后的code
								//获取session_key
								uni.request({
									url: 'https://api.weixin.qq.com/sns/jscode2session',
									method:'GET',
									data: {
									appid: idres.data[0].appid,        //你的小程序的APPID
									secret: idres.data[0].session,    //你的小程序秘钥secret,  
									js_code: self.jsCode,    //wx.login 登录成功后的code
									grant_type:'authorization_code'
									},
									success: (cts) => {
										self.openid=cts.data.openid    //openid 用户唯一标识
										self.session_key=cts.data.session_key    //session_key  会话密钥
									}
								});
							}
						});
					}
				})
			},
			getPhoneNumber(e) {
				let self = this;
				if(e.detail.errMsg==`getPhoneNumber:ok`){
					let pc = new WXBizDataCrypt(`${self.appid}`,self.session_key);
					let data = pc.decryptData(e.detail.encryptedData,e.detail.iv);
					uni.request({
						method:'GET',
						url:`url`,
						data:{
							"flag":1,
							"val":data.phoneNumber
						},
						success(res) {
							if(res.data.length == 0){
								uni.showToast({
									title: '未注册',
									duration: 2000,
									icon: 'exception'
								});
							}else{
								uni.setStorage({
									key:'logininformation',
									data:res.data[0]
								});
								uni.switchTab({
									url:'/pages/my/my'
								});
							}
						}
					})
				}
			},

原因:uni.login一定要在getPhoneNumber之前,之前在onload时就执行。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值