收藏
回答

微信小程序 获取用户手机号 有时候解码失败 有时候解析成功?

使用接口 wx.checkSession校验 session_key 是否有效,验证通过  但是也会出现解码失败  

回答关注问题邀请回答
收藏

5 个回答

  • -
    -
    01-29

    我现在是在onload里面调用的wx.login  然后获取到code存入缓存,,然后点击头像 获取用户信息,调接口传参code给后台 后台返回我openid跟session_key。还是经常 后台返回失败,一直不知道什么原因。把数据清空了,重新登录 有时候成功,有时候也失败,要么 就是登录久了没操作, 有时候就失败重新登录一次也不行。

    01-29
    有用
    回复
  • 小脏孩
    小脏孩
    2020-08-01

    同样遇到这个问题,提供一个简单的例子

    <template>	
    <view class="content">
    		<image class="logo" src="/static/logo.png"></image>
    		<view class="text-area">
    			<text class="title">{{title}}</text>
    		</view>
    		<button type="default" open-type="getUserInfo" @getuserinfo="getUserInfo">获取用户信息</button>
    		
    		<view style="margin: 30rpx;padding: 30rpx;width: 100vw;background-color: #eee;">{{JSON.stringify(info)}}</view>
    	</view>
    </template>
    
    
    <script>
    	export default {
    		data() {
    			return {
    				title: 'Hello',
    				code:"",
    				info:{}
    			}
    		},
    		async onLoad() {
    			await this.getJsCode()
    		},
    		methods: {
    			async getJsCode(){
    				this.code = await wx.login().then(res=>{
    					console.log(res)
    					if(res.errMsg=='login:ok'){
    						return res.code
    					}
    					return ""
    				})
    			},
    			async getUserInfo(e){
    				console.log(e)
    				let vm = this
    				let {encryptedData,iv} = e.detail||{}
    				uni.checkSession({
    					success() {
    						vm.loginAPI({encryptedData,iv})
    					},
    					async fail() {
    						await vm.getJsCode()
    						vm.loginAPI({encryptedData,iv})
    					}
    				})
    			},
    			loginAPI({encryptedData,iv}){
    				let vm = this
    				return uni.request({
    							url:"http://127.0.0.1:8080/api/v1/wechat-mini/login?js_code="+this.code,
    							data:{encryptedData,iv},
    							method:"POST",
    							header:{
    								"content-type":"application/json"
    							}
    						}).then(([err,res])=>{
    							console.log(err,res)
    							if(res){
    								vm.info = res.data.data
    							}else{
    								vm.info = {}
    							}
    						}).finally(async()=>{
    							await vm.getJsCode()
    						})
    			}
    		}
    	}
    </script>
    
    
    <style>
    	.content {
    		display: flex;
    		flex-direction: column;
    		align-items: center;
    		justify-content: center;
    	}
    
    
    	.logo {
    		height: 200rpx;
    		width: 200rpx;
    		margin-top: 200rpx;
    		margin-left: auto;
    		margin-right: auto;
    		margin-bottom: 50rpx;
    	}
    
    
    	.text-area {
    		display: flex;
    		justify-content: center;
    	}
    
    
    	.title {
    		font-size: 36rpx;
    		color: #8f8f94;
    	}
    </style>
    
    
    
    2020-08-01
    有用
    回复 1
    • 小脏孩
      小脏孩
      2020-08-01
      wx.login需要在getUserInfo之前调用,初始化的时候在unload调用保存在页面中
      2020-08-01
      回复
  • 杨
    2020-07-07

    楼主解决了吗

    2020-07-07
    有用
    回复
  • 李翠华
    李翠华
    2020-05-19

    楼主解决了吗 我这也出现这种情况

    2020-05-19
    有用
    回复 1
    • 杨
      2020-07-07
      你解决了吗?我也遇到了这情况
      2020-07-07
      回复
  • 木剑温小二
    木剑温小二
    2019-11-19

    确认下获取手机号之后有没有调用过wx.login(),如果调用有可能会刷新session_key

    2019-11-19
    有用
    回复 3
    • 我在这里。
      我在这里。
      2019-11-19
      没有  在之前调用的 wx.login()  然后调用接口  就出现有时候解析成功 有时候不行
      2019-11-19
      1
      回复
    • [OK][OK][OK][OK]
      [OK][OK][OK][OK]
      2020-12-29回复我在这里。
      请问你解决了吗?我也遇到了这个问题, 先用wx.checkSession去检测,明明通过了,但是去获取手机号时,后端一会失败,一会成功的。。。。。
      2020-12-29
      回复
    • 霁月
      霁月
      01-11回复[OK][OK][OK][OK]
      可以在页面onLoad的时候去调用wx.login,不能在点击button的时候去调用wx.login获取session_key,那时候拿取的session_key会解析失败。
      01-11
      回复
登录 后发表内容
问题标签