为什么要用wx.checkSession()——

有时候,我们会因为session_key不正确而导致解密或者校验签名失败。有几方面的原因:

1、因为wx.login()被调用时,用户的session_key会被更新导致就session_key失效。所以,在调用wx.login()的时候应该要明确需要登录之后再调用。

2、另外,微信不会把session_key的有效期告诉我们,用户越频繁使用微信,session_key的有效期就更长。

因为,就需要调用wx.checkSession()来校验当前用户的session_key是否有效。

onLoad: function () {

  wx.checkSession({

    success: function(res){

      console.log("处于登录态");

    },

    fail: function(res){

      console.log("需要重新登录");

      wx.login({})  

    }

  })

}

<template> <zy-popup-select v-model="visible" :options="options" :isNeedSelected="false" :optionsHeight="optionsHeight" :optionsHeightPx="optionsHeightPx" :mask="mask" :maxVisibleItems="maxVisibleItems" @change="change" @confirm="close" @close="close" > </zy-popup-select> </template> <script> export default { props: { modelValue: { type: Boolean, default: false }, options: { type: Array, required: true }, mask: { type: Boolean, default: true }, optionsHeight: { type: Number, default: 57 }, optionsHeightPx: { type: String, default: 'px' }, maxVisibleItems: { type: Number, default: 4 } }, emits: ['update:modelValue', 'confirm'], data() { return {} }, computed: { visible() { return this.modelValue } }, methods: { close(e) { this.$emit('update:modelValue', false) }, change(e) { console.log('🚀 ~ change ~ e.item.value:', e.item.value) if (e.item.value == 'mobileImage' || e.item.value == 'mobileVideo' || e.item.value == 'mobileMix') { this.selectImage(e.options) } else if (e.item.value == 'cameraImage') { this.takePhoto(e.options) } else if (e.item.value == 'cameraVideo') { this.recordVideo(e.options) } else if ( e.item.value == 'messageImage' || e.item.value == 'messageVideo' || e.item.value == 'messageMix' || e.item.value == 'messageFile' ) { this.messageSelected(e.options) } }, confirm(e) { this.$emit('update:modelValue', false) }, // 选择手机图片(相册) async selectImage(options) { try { // await requestAlbumPermission() const res = await new Promise((resolve, reject) => { uni.chooseMedia({ // count: 9, // mediaType: [options], // sourceType: ['album'], // maxDuration: 60, // camera: 'back', ...options, success(res) { const files = res.tempFiles.map(file => ({ path: file.tempFilePath, type: file.width ? 'local-image' : 'local-video', size: file.size, duration: file.duration || 0 })) resolve(res) this.handleSelected(files) }, fail(err) { reject(err) } }) }) return res } catch (err) { console.error('选择失败:', err) } }, async takePhoto(options) { try { const res = await uni.chooseImage({ // count: 1, // sourceType: ['camera'] ...options }) const files = res.tempFilePaths.map(path => ({ path, type: 'local-image' })) this.handleSelected(files) } catch (err) { console.log('用户取消或出错') } }, async recordVideo(options) { try { const res = await uni.chooseVideo({ // sourceType: ['camera'], // 只从相机录制 // compressed: true, // 是否压缩 // maxDuration: 60, // 最长60秒 // camera: 'back' // 后置摄像头 ...options }) const file = { path: res.tempFilePath, size: res.size, duration: res.duration, // 视频时长(秒) type: 'local-video' } this.handleSelected(file) // 处理视频:上传、预览等 } catch (err) { console.log('用户取消或录制失败') } }, async messageSelected(options) { wx.qy.login({ success: function (res) { if (res.code) { //发起网络请求 console.log('TT企微小程序登录-', res) wx.request({ url: 'https://qyapi.weixin.qq.com/cgi-bin/gettoken', data: { corpid: `ww89375d6c15dd0e96`, corpsecret: `QIBK6NaGBFFWpOSY1qBTXDpe7MvtgCUTLbr0vEIOQzI` }, success: function (res1) { console.log('🚀 ~ onLaunch ~ res1111111111111111111:', res1) wx.request({ url: 'https://qyapi.weixin.qq.com/cgi-bin/miniprogram/jscode2session', data: { access_token: res1.data['access_token'], js_code: res['code'], grant_type: `authorization_code` }, success: async function (res2) { console.log('🚀 ~ onLaunch ~ res2:', res2) // const resa = await chooseMessageFile({ // count: 9, // type: 'all' // }) // console.log('🚀 ~ selectChat ~ res:', resa) wx.qy.checkSession({ success: async function (res3) { console.log('🚀 ~ onLaunch ~ res3:', res3) const resa = await chooseMessageFile({ // count: 9, // type ...options }) this.handleSelected(resa) }, fail: function () { console.log(`已失效`) } }) } }) } }) } else { console.log('登录失败!' + res.errMsg) } } }) }, // 选择后的回调 handleSelected(e) { this.$emit('update:modelValue', false) console.log('🚀 ~ handleSelected ~ e:', e) } } } </script> <style scoped> .conten { padding-top: 200px; } </style> chooseMedia会把拍照摄像从手机相册选择三个选项都弹出来,我希望在当前组件调用的时候,不需要二次弹出
最新发布
09-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值