- 小程序菜单“返回首页”
问题描述: 当我把这个页面直接从小程序中打开时,点击小程序菜单没有显示“返回首页”按钮,但是把我这个页面分享出去,在分享的链接中打开时,就会出现“返回首页”按钮。如果我想在小程序打开时,添加上这个按钮有没有什么好的建议?谢谢。。。[图片] [图片]
2018-05-18 - 解密有概率出现41003的问题
在登陆的时候,如果隔一段时间,再点击登陆按钮,第一次会失败,服务解密那里41003,第二次才能成功 在获取群分享的open_gid也一样,用户第一次点击分享卡片进来是可以的,后面再点击就41003了 这是我群分享的写法 [代码]this[代码][代码].share_tk();[代码][代码]share_tk: [代码][代码]function[代码] [代码]() {[代码][代码] [代码][代码]var[代码] [代码]shareTicket = wx.getStorageSync([代码][代码]'shareTicket'[代码][代码]);[代码][代码] [代码][代码]var[代码] [代码]shop_id = wx.getStorageSync([代码][代码]'shop_id'[代码][代码]);[代码][代码] [代码][代码]if[代码] [代码](!util.isNotEmpty(shareTicket)) {[代码][代码] [代码][代码]return[代码][代码];[代码][代码] [代码][代码]}[代码][代码] [代码][代码]var[代码] [代码]t = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]wx.getShareInfo({[代码][代码] [代码][代码]shareTicket: shareTicket,[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]wx.checkSession({[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码](e) {[代码][代码] [代码][代码]var[代码] [代码]session_key = wx.getStorageSync([代码][代码]'session_key'[代码][代码]);[代码][代码] [代码][代码]t.ajax_share(res.encryptedData, res.iv, session_key);[代码][代码] [代码][代码]},[代码][代码] [代码][代码]fail: [代码][代码]function[代码] [代码]() {[代码][代码] [代码][代码]wx.login({[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码](lres) {[代码][代码] [代码][代码]if[代码] [代码](lres.code) {[代码][代码] [代码][代码]var[代码] [代码]post_data = {[代码][代码] [代码][代码]m: [代码][代码]'mall'[代码][代码],[代码][代码] [代码][代码]c: [代码][代码]'ApiLogin'[代码][代码],[代码][代码] [代码][代码]a: [代码][代码]'get_session'[代码][代码],[代码][代码] [代码][代码]code: lres.code,[代码][代码] [代码][代码]};[代码][代码] [代码][代码]util.ajax(post_data, [代码][代码]function[代码] [代码](data) {[代码][代码] [代码][代码]wx.setStorageSync([代码][代码]'session_key'[代码][代码], data.data);[代码][代码] [代码][代码]t.ajax_share(encryptedData, iv, data.data);[代码][代码] [代码][代码]}, [代码][代码]null[代码][代码], [代码][代码]true[代码][代码]);[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]}[代码][代码] [代码][代码]});[代码] [代码] [代码][代码]}[代码][代码] [代码][代码]})[代码] [代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码]//分享函数[代码][代码] [代码][代码]ajax_share: [代码][代码]function[代码] [代码](encryptedData, iv, session_key) {[代码][代码] [代码][代码]var[代码] [代码]shareTicket = wx.getStorageSync([代码][代码]'shareTicket'[代码][代码]);[代码][代码] [代码][代码]var[代码] [代码]shop_id = wx.getStorageSync([代码][代码]'shop_id'[代码][代码]);[代码][代码] [代码][代码]var[代码] [代码]token = wx.getStorageSync([代码][代码]'token'[代码][代码]);[代码][代码] [代码][代码]var[代码] [代码]t = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]console.log([代码][代码]'发送分享信息'[代码][代码]);[代码][代码] [代码][代码]var[代码] [代码]post_data = {[代码][代码] [代码][代码]m: [代码][代码]'Share'[代码][代码],[代码][代码] [代码][代码]c: [代码][代码]'ApiIndex'[代码][代码],[代码][代码] [代码][代码]a: [代码][代码]'share_shop'[代码][代码],[代码][代码] [代码][代码]shop_id: shop_id,[代码][代码] [代码][代码]encryptedData: encryptedData,[代码][代码] [代码][代码]iv: iv,[代码][代码] [代码][代码]session_key: session_key,[代码][代码] [代码][代码]token: token[代码][代码] [代码][代码]};[代码][代码] [代码][代码]util.ajax(post_data, [代码][代码]function[代码] [代码](data) {[代码][代码] [代码][代码]wx.removeStorageSync([代码][代码]'shareTicket'[代码][代码]);[代码][代码] [代码][代码]console.log(data);[代码][代码] [代码][代码]}, [代码][代码]function[代码] [代码](data) {[代码][代码] [代码][代码]wx.login({[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码](lres) {[代码][代码] [代码][代码]if[代码] [代码](lres.code) {[代码][代码] [代码][代码]post_data = {[代码][代码] [代码][代码]m: [代码][代码]'mall'[代码][代码],[代码][代码] [代码][代码]c: [代码][代码]'ApiLogin'[代码][代码],[代码][代码] [代码][代码]a: [代码][代码]'get_session'[代码][代码],[代码][代码] [代码][代码]code: lres.code,[代码][代码] [代码][代码]};[代码][代码] [代码][代码]util.ajax(post_data, [代码][代码]function[代码] [代码](data) {[代码][代码] [代码][代码]wx.setStorageSync([代码][代码]'session_key'[代码][代码], data.data);[代码][代码] [代码][代码]post_data = {[代码][代码] [代码][代码]m: [代码][代码]'Share'[代码][代码],[代码][代码] [代码][代码]c: [代码][代码]'ApiIndex'[代码][代码],[代码][代码] [代码][代码]a: [代码][代码]'share_shop'[代码][代码],[代码][代码] [代码][代码]shop_id: shop_id,[代码][代码] [代码][代码]encryptedData: encryptedData,[代码][代码] [代码][代码]iv: iv,[代码][代码] [代码][代码]session_key: data.data,[代码][代码] [代码][代码]token: token[代码][代码] [代码][代码]};[代码][代码] [代码][代码]util.ajax(post_data, [代码][代码]function[代码] [代码](data) {[代码][代码] [代码][代码]console.log([代码][代码]'第二次成功'[代码][代码]);[代码][代码] [代码][代码]wx.removeStorageSync([代码][代码]'shareTicket'[代码][代码]);[代码][代码] [代码][代码]}, [代码][代码]function[代码] [代码](data) {[代码][代码] [代码][代码]console.log([代码][代码]'第二次失败'[代码][代码]);[代码][代码] [代码][代码]}, [代码][代码]true[代码][代码]);[代码][代码] [代码][代码]}, [代码][代码]null[代码][代码], [代码][代码]true[代码][代码]);[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]}, [代码][代码]true[代码][代码]);[代码][代码] [代码][代码]},[代码]
2018-07-12 - 【疑似bug】EVP_DecryptFinal_ex:bad decrypt
- 当前 Bug 的表现(可附上截图) [图片] - 预期表现 可以对encryptedData正常解密。 - 复现路径 点击登录按钮后,小程序调用wx.login(),再将code、iv、encrypedData一起发往后端程序,后端程序调用微信api接口(api.weixin.qq.com/sns/jscode2session)希望获取openId,但经常会出现上图中的错误。 复现过程: 1、这个问题不是持续连续发生,而是在一段时间未操作小程序时,再次点击登录按钮触发登录操作的第一次时会发生,第二次及以后的登录操作则会成功。如果再过一段时间未操作小程序,当第一次登录的时候还是会出现这个现象——第一次登录不成功,后续登录操作可以成功。 2、问题的关键在于解密程序报错。将上述的ecryptedData、iv、session_key放入官方文档(貌似其中还有包括使用wx.getUserInfo()的描述,是否也要更新一下)中提供的demo.js程序运行,也会出现报错。 推测一下,会不会是encryptedData、iv或session_key数据不匹配导致解密失败。 目前只能在小程序端判断若出现Illegal Buffer Error这种情况,则再次自动发起认证。 类似的案例: 1、类似的这个问题。 2、解密不完整的例子。 3、外站的例子:https://ruby-china.org/topics/32128 4、居然还有50%概率无法解密的情况。 5、案例 6、这个帖子提出通过调用encodeURIComponent()函数对iv转换就没问题。经过尝试还是不行。 7、这位楼主解决了,但没写具体的方案。 8、提出要在刷新sessionkey 之后再拿 decryptData 就可解决。但没有代码示例。(http://www.2bmdzz.com/2017/10/16/wx-getshareinfo-encrypteddata-41003/) 9、2017年初就有人提过类似的问题。 10、2016年提出的同类案例。解密出现乱码的情况。 - 提供一个最简复现 Demo 前端【登录按钮】按下后的函数: [图片] 后端 处理的处理函数 [图片]
2018-05-04 - 微信小程序手机号解密失败
流程是这样的:初次加载app.js,调用wx.login()去获取code,将code发给自己服务器获取一个sid,缓存这个sid。在手机号授权的时候,先调用wx.checkSession()去判断微信sessionKey是否过期,过期就重新调登录流程,没有过期就获取encryptedData,iv和sid,发送给后台去解密。 但会存在这种情况,如果今天我进入小程序,然后关掉。再隔2天使用小程序,再去授权手机号,后台报解密失败!后台解密代码都一样,我以为是微信sessionKey过期了,但是,微信说sessionKey过期时间是30天,而且我检查了代码,wx.checkSession()返回success,表示登录态未过期,但还是解密失败,这是为什么啊?
2018-06-25