找回密码
 立即注册

QQ登录

只需一步,快速开始

微信小程序综合交流

关注:45

所属分类: 微信开发 微信小程序综合交流

微信小程序用户交流版块,希望同学们积极发言,不过大家不要恶意发布广告哦!

[经验分享] 社区小程序开发问答最新整理(4月18日)

  [复制链接]
查看: 11889|回复: 86
最佳答案
109 

575

主题

2008

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
33402
QQ
 楼主| 发表于 2017-4-18 17:27:09 | 显示全部楼层 |阅读模式
很快微信开发者社区最新一期微信小程序开发问答整理出炉(4月18日更新),距离上一期的微信小程序开发问答整理已经过去20天,在此期间小程序频繁公布放新能力,先是重磅公布小程序面向个人开放,支持给公众号粉丝发通知、App分享等,然后又及时更新开放了新的接口:小程序5大新能力:增加蓝牙、卡券、共享微信通讯地址等,再到最近几天的微信小程序开放识别二维码功能以及昨日刚公布的小程序新能力:支持小程序第三方平台、代码包扩大到2M等

这一系列的小程序动向表明,微信小程序似乎正在向流量低头,但实际上对于开发者来说,这却是再好不过的事,小程序只有越来越开放才会获得更多的人关注,并且开发者生态也才能够真正意义上的逐渐形成。

题外话不多说,有兴趣和想法的同学可以在我们开发者社区(www.henkuai.com)或者小程序开发交流群和大家多多交流,本期社区小程序开发问答整理如下:

特别感谢@蜗牛呆呆、@瞌睡虫、@地下2毫米、@KillerIrving、@yourou、@YapNetS、@ymmmmm、@冰封零度的殇、@HotGaoGao、@summertree、@kevin_xi、@云溪0000、@进击绿、@风清扬_nB9R1、@小程序布道师、@105452034、@davidwoo、@乐帅贡献的最佳答案(排名不分先后)

小程序开发问答部分整理(已解决):

Q:微信小程序怎么确定是息屏、返回、还是Home键操作?
我们公司在做一个客户端和小程序互相控制的小程序,两者都可以控制用户是否退出,因为安卓手机第一次扫码进来会触发onload方法,但是第二次扫码进入小程序,就直接进入到上次退出的界面,只会触发onShow方法,现在需求是只有扫码进来时才去请求登录接口,而亮屏操作不去请求接口,但是这两个操作目前找不到可以区分的点,现在很头疼。

之前想过通过监听返回键去识别,但是没找到监听返回键的方法,而且Home键操作也没办法识别到(Home键和返回键都可以认为是需要扫码获取到onload方法option里面的值这一类的,息屏是另一类);

后面想到 getCurrentPages()方法判断他的长度,结果在安卓中都是1;

但是后面偶然发现一种办法,就是在app.js里面的onHide方法里调一个接口,在complete里给全局变量mid赋值为88,在success里面赋值为55,结果息屏后台得到的mid为55,返回得到的为88(奇怪的是这个接口在后台没有打印请求的情况,感觉像是没调一样,但是我再进小程序mid已经改变了),但是解释不清楚这种情况所以不太敢这么判断,这是我目前找到的唯一一个可以判断的标识,但是老大觉得不清楚原因没有太理睬。。。(主要是安卓手机第二次扫码进去和开屏操作走的方法一样,不好判断处理)

A:单击隐藏图章关闭小程序(公共库版本1.1.0开始支持): 当用户从扫一扫、分享等入口(场景值为1007, 1008, 1011, 1025)进入小程序,且没有置顶小程序的情况下退出,小程序会被销毁。

微信6.5.7之前有这个问题,但是6.5.7版本不管上次是在哪个页面退出,小程序每次扫码进入都只会进入指定页面,并且获得onload里面的值,这样就可以区分扫码进入还是息屏还是搜索进入了。

原帖:http://www.henkuai.com/thread-29676-1-3.html

Q:微信小程序分享出去的页面 怎么让他24小时失效啊
微信小程序分享出去的页面 怎么让他24小时失效啊

A:页面分享出去的时候带上分享的时间点,比如/page/index?id=04101336,表示是4月10号13点36分,页面加载时判断是否是从分享链接点击来的(根据时间点的参数),再获取当前的时间点,如果超过24个小时,就提示该分享页已失效,反之就加载内容。

原帖:http://www.henkuai.com/thread-29733-1-4.html

Q:代码提交审核通过后线上小程序没有更新
小程序做的是静态展示页面,传了第一个版本上去,然后本地添加了分享的代码,预览是正常的,第二次又上传审核,通过后,线上版本还是没有分享的按钮。是不是我用静态页面代码没有更新?要不要在页面里加入刷新代码?

A:审核通过后还需要重新发布一下吧,在进行预览就可以啦,或者你重启一下微信试试,会不会有缓存问题

原帖:http://www.henkuai.com/thread-29904-1-2.html

Q:小程序本地测试没有问题,苹果正常,安卓无法发送请求?
小程序本地测试没有问题,苹果正常,安卓无法发送请求,https ssl证书正常。
  1. Page({
  2.   data:{
  3.     height:height,
  4.     width:width,
  5.   },
  6.   onLoad:function(options){
  7.     // 页面初始化 options为页面跳转所带来的参数
  8.         wx.login({
  9.           success: function (loginres) {
  10.             code = loginres.code;
  11.             wx.getUserInfo({
  12.               withCredentials:true,
  13.               success: function (getuserinfores) {
  14.                 //小程序判断是否绑定用户账号
  15.                 var data = {
  16.                     encryptedData: getuserinfores.encryptedData,
  17.                     iv: getuserinfores.iv,
  18.                     code: code,
  19.                     agencyid: agencyid,
  20.                   }
  21.                        wx.request({
  22.                   url: apphost+'/applet/login',
  23.                   method:'POST',
  24.                   dataType:'json',
  25.                   data: data,
  26.                   header: {
  27.                     "Content-Type": "application/x-www-form-urlencoded"
  28.                   },
  29.                   success: function(res) {
  30.                     console.log(res)
  31.                     if(res.data.code == 200){
  32.                       // 登陆成功,返回用户信息和token,跳转到首页
  33.                       getApp().globalData.wxuserinfo = res.data.data;
  34.                       app.globalData.interval = 0
  35.                       getdata()
  36.                       setTimeout(function(){
  37.                         wx.switchTab({
  38.                           url: '/pages/index/index'
  39.                         })
  40.                       },1000)
  41.                     }else if(res.data.code == 202){
  42.                       // 未绑定用户账号
  43.                       getApp().globalData.wxuserinfo = res.data.data;
  44.                       console.log(getApp().globalData.wxuserinfo)
  45.                       setTimeout(function(){
  46.                         wx.redirectTo({
  47.                           url: '/pages/login/index'
  48.                         })
  49.                       },1000)
  50.                      
  51.                     }else{
  52.                       console.log(res.data.msg)
  53.                     }
  54.                   },
  55.                   fail: function(res){
  56.                     console.log(res)
  57.                   }
  58.                 })
  59.               }
  60.             })
  61.           },
  62.           // fail: function(){
  63.           //   wx.showToast({
  64.           //     title: '登陆失败',
  65.           //     icon: 'loadding',
  66.           //     duration: 2000
  67.           //   })
  68.           // }
  69.         })
  70.   },
  71.   onReady:function(){
  72.     // 页面渲染完成
  73.   },
  74.   onShow:function(){
  75.     // 页面显示
  76.   },
  77.   onHide:function(){
  78.     // 页面隐藏
  79.   },
  80.   onUnload:function(){
  81.     // 页面关闭
  82.   }
  83. })
复制代码

A:调试找到问题,bom头导致。

原帖:http://www.henkuai.com/thread-29920-1-1.html

Q:微信小程序滑动切换tab
有没有滑动切换一个页面中n个tab的案例可以参考一下,试过滑动事件,功能能实现,可体验效果不尽如人意;试过swiper,效果是想要的效果,可是每个tab的页面高度都要一样,而我的三个tab内容都是动态加载的,高度相差很大,所以并不适用。求做过的大神指点

A:已解决,使用swiper,两种方式结合即可

原帖:http://www.henkuai.com/thread-29645-1-1.html

Q:小程序如何获取用户openid,唯一的,像微信号
wx.getUserInfo(OBJECT)只能获取nickName,avatarUrl,gender这些

A:openid两种获取方法。

1.login获得code。在用code换openid和一个密匙

2.userinfo有个加密的data。解密获得openid
  1.   onLoad: function () {
  2.     var that = this
  3.     wx.login({
  4.       success: function (res) {
  5.         console.log("res.code====="+res.code);
  6.         if (res.code) {
  7.           //发起网络请求
  8.           wx.request({
  9.             url: 'https://api.weixin.qq.com/sns/jscode2session?appid=wxaasdf22we1sdffe3&secret=83ebdsdfsdfa7sdfsdf3448ff3f71&js_code=' + res.code + '&grant_type=authorization_code',
  10.             method: "POST",
  11.             success: function (res) {
  12.                
  13.               that.setData({
  14.                 openid: res.data.openid
  15.               })
  16.             }
  17.           })
  18.         } else {
  19.           console.log('获取用户登录态失败!' + res.errMsg)
  20.         }
  21.       }
  22.     });
  23.   }
复制代码


原帖:http://www.henkuai.com/thread-29872-1-1.html

Q:如何弹出输入框
各位大神好,微信小程序中能实现“弹出输入框”的功能么?翻了下api文档,貌似没发现该方法。。。跪求各位大神指导,不胜感激!!!

A:类似input textarea这类的控件,只要触发了点击效果,它会自动弹出输入框,输入类型可以控制

原帖:http://www.henkuai.com/thread-19505-1-2.html

Q:小程序怎么实现饼状图
求助各位大神,这个图怎么字儿出来
vn5vk.png

A:社区里有很多现成的例子
微信小程序图表charts组件
微信小程序图表charts组件,Charts for WeChat small app

原帖:http://www.henkuai.com/thread-29832-1-2.html

Q:如何再次获取用户授权
我想问一下就是我现在在做一个小程序有地图的功能,通过点击按钮打开地图。调用wx.getlocation()这个接口是需要用户的授权。如果他授权了,返回一个success当然最好啦,就什么问题都没有了。如果他点了取消,返回一个fail,我就使用预设的经纬度打开一个定位。但是如果用户点击返回以后,再次点击按钮进入地图就会没有反应(如果一开始有授权的话就可以再次重新打开地图)。

有什么方法可以解决呢,或者怎样可以重新获取用户授权。毕竟叫他们删了重来的话,这样的体验好像不大好。。。求各种大腿指导!!!

A:单击隐藏图章wx.openSetting(OBJECT) 重新调用小程序授权,文档现在已经有了https://mp.weixin.qq.com/debug/w ... l#opensettingobject
  1. Map:function(){
  2.     wx.getLocation({
  3.       type: 'gcj02',
  4.       success: function(res){
  5.         // success
  6.         wx.openLocation({
  7.           latitude: res.latitude,
  8.           longitude: res.longitude,
  9.           scale: 28,      
  10.         })},
  11.       
  12.       fail: function(res){
  13.         // fail
  14.         wx.openLocation({
  15.           address:"获取授权失败 打开默认定位",
  16.         //默认定位我就隐藏啦
  17.           latitude: XX.XX,
  18.           longitude: XX.XX,
  19.           scale: 28,      
  20.         },
  21.         wx.openSetting({
  22.           //重新请求获取定位
  23.         success: (res) => {}})
  24.         )},
  25.     })
  26.   }
复制代码

原帖:http://www.henkuai.com/thread-29784-1-3.html

Q:map组件怎么自适应屏幕高度
<map>组件的style里面width是可以设置比例的,但是高度设置不了比例,想着先获取屏幕的Height然后再通过{{}}方式传过去,发现不行,求助怎么才能让地图刚好铺满整个屏幕啊?

A:设置为100vh即可,参考:设置页面宽高的时候,如何让height:100%起作用

原帖:http://www.henkuai.com/thread-29783-1-3.html

Q:关于小程序登陆的问题
我写了一个外部的js,然后在js中写了一个方法。如何在页面的js中调用输出这个方法。就是在lids中的common里写了个方法,要如何在login.js中调用方法。
01pizvvva.png

A:在小程序js封装要用闭包
  1. // 获得工具utils工具js里面函数,先模块化引用utils里面的js地址  reqiure('js地址')成一个面向对象
  2. var utils=require('../../lids/common.js')
  3. // console.log(utils) 可查看获得的函数
  4. console.log(utils.getData())
复制代码


原帖:http://www.henkuai.com/thread-29738-1-3.html

Q:wx.request在手机预览时执行不成功
一个登陆按钮,在开发环境中测试正常,能够从后台获取数据。但在手机上预览时点击无反应。log只能打出“begin”,之后就没有执行了。
登陆按钮代码:
  1. clickLogin: function () {
  2.     var userInput = getApp().data.userPhone;
  3.     var pwdInput = getApp().data.passWord;
  4.     console.log('begin')
  5.     // 登陆验证
  6.     wx.request({
  7.       url: 'https://safety-teaching.top/safetyteaching/user/muser_login?phone=' + userInput + '&password=' + pwdInput,
  8.       header: {
  9.         'content-type': 'application/json'
  10.       },
  11.       success: function (res) {
  12.         console.log(res.data)
  13.         if (res.data.hasData == 1) {
  14.           getApp().data.userName = res.data.user.name;
  15.           getApp().data.userId = res.data.user.admId;
  16.           getApp().data.userAge = res.data.user.age;
  17.           getApp().data.userCity = res.data.user.city;
  18.           getApp().data.userEmail = res.data.user.email;
  19.           getApp().data.userPhone = res.data.user.phone;
  20.           getApp().data.userSex = res.data.user.sex;
  21.           getApp().data.userUpId = res.data.user.upId;
  22.           getApp().data.userRoleType = res.data.user.userRoleType;
  23.           getApp().data.userStatusId = res.data.user.usrStatusId;
  24.           console.log(getApp().data.userId)
  25.           console.log(getApp().data.userName)
  26.           wx.switchTab({
  27.             url: '/pages/index/index',
  28.           })
  29.         } else {
  30.           wx.showToast({
  31.             title: '手机或密码错误',
  32.             icon: 'loading'
  33.           })
  34.         }
  35.       }
  36.     })

  37.   },
复制代码

A:首先手机打开调试信息哪里看看是否报错,然后检查域名是否添加到合法域名里面,如果还有问题看一下微信或者系统的版本,最后检查域名的证书版本是否兼容

原帖:http://www.henkuai.com/thread-29747-1-3.html

Q:微信小程序支付一直提示签名错误,急急急
微信小程序支付一直提示签名错误,可是我用签名工具验证n遍了,没有错啊,到底是哪错了,求帮忙啊!!

A:我之前也出现这个问题,是因为在处理返回数据的时候大小写的问题,如果参数验证没有问题看看服务端的代码

服务器中的Create_ip_no错误,一定要注意,签名要在服务器那边签名,我们只要调用支付接口就行,同一下单接口在服务器端调用

原帖:http://www.henkuai.com/thread-29597-2-3.html

Q:微信小程序支付金额问题?
我在弄支付这一块String total_fee = "1";这是我给它默认了支付1分钱,然后放入map集合里面map.put("total_fee", total_fee);就是现在想把它改成用户自定义输入任意金额,不知道怎么弄?求大神指点。

A:如果你还没有发起统一下单的时候,用户输入后直接修改total_fee 的值就可以了,发起就修改不了了

原帖:http://www.henkuai.com/thread-29706-1-4.html

Q:地图上怎么添加自定义view
怎么在地图上添加自定义的view, 向摩拜单车这种
yo97ty.png

A:想要实现覆盖可以通过巧用map组件的controls属性,新增一个controls,把图片设置成一个button样式居中显示,即可实现摩拜单车的效果
摩拜单车微信小程序开发技术总结

原帖:http://www.henkuai.com/thread-29656-1-1.html

Q:小程序手机号获取验证码
小程序注册的话,这里需要一个手机绑定,那获取验证码这里需要加一个防轰炸么?

A:单击隐藏图章加个验证码防止下

原帖:http://www.henkuai.com/thread-29640-1-1.html

Q:微信小程序,有没有MD5加密的工具包及调用方法?求大神!
用这个微信小程序加密的工具包
  1. function safe_add(x, y)  
  2. {  
  3. var lsw = (x & 0xFFFF) + (y & 0xFFFF)  
  4. var msw = (x >> 16) + (y >> 16) + (lsw >> 16)  
  5. return (msw << 16) | (lsw & 0xFFFF)  
  6. }  
  7.    
  8. /*
  9. * Bitwise rotate a 32-bit number to the left.
  10. */
  11. function rol(num, cnt)  
  12. {  
  13. return (num << cnt) | (num >>> (32 - cnt))  
  14. }  
  15.    
  16. /*
  17. * These functions implement the four basic operations the algorithm uses.
  18. */
  19. function cmn(q, a, b, x, s, t)  
  20. {  
  21. return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)  
  22. }  
  23. function ff(a, b, c, d, x, s, t)  
  24. {  
  25. return cmn((b & c) | ((~b) & d), a, b, x, s, t)  
  26. }  
  27. function gg(a, b, c, d, x, s, t)  
  28. {  
  29. return cmn((b & d) | (c & (~d)), a, b, x, s, t)  
  30. }  
  31. function hh(a, b, c, d, x, s, t)  
  32. {  
  33. return cmn(b ^ c ^ d, a, b, x, s, t)  
  34. }  
  35. function ii(a, b, c, d, x, s, t)  
  36. {  
  37. return cmn(c ^ (b | (~d)), a, b, x, s, t)  
  38. }  
  39.    
  40. /*
  41. * Calculate the MD5 of an array of little-endian words, producing an array
  42. * of little-endian words.
  43. */
  44. function coreMD5(x)  
  45. {  
  46. var a = 1732584193  
  47. var b = -271733879  
  48. var c = -1732584194  
  49. var d = 271733878  
  50.    
  51. for(var i = 0; i < x.length; i += 16)  
  52. {  
  53.   var olda = a  
  54.   var oldb = b  
  55.   var oldc = c  
  56.   var oldd = d  
  57.    
  58.   a = ff(a, b, c, d, x[i+ 0], 7 , -680876936)  
  59.   d = ff(d, a, b, c, x[i+ 1], 12, -389564586)  
  60.   c = ff(c, d, a, b, x[i+ 2], 17, 606105819)  
  61.   b = ff(b, c, d, a, x[i+ 3], 22, -1044525330)  
  62.   a = ff(a, b, c, d, x[i+ 4], 7 , -176418897)  
  63.   d = ff(d, a, b, c, x[i+ 5], 12, 1200080426)  
  64.   c = ff(c, d, a, b, x[i+ 6], 17, -1473231341)  
  65.   b = ff(b, c, d, a, x[i+ 7], 22, -45705983)  
  66.   a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416)  
  67.   d = ff(d, a, b, c, x[i+ 9], 12, -1958414417)  
  68.   c = ff(c, d, a, b, x[i+10], 17, -42063)  
  69.   b = ff(b, c, d, a, x[i+11], 22, -1990404162)  
  70.   a = ff(a, b, c, d, x[i+12], 7 , 1804603682)  
  71.   d = ff(d, a, b, c, x[i+13], 12, -40341101)  
  72.   c = ff(c, d, a, b, x[i+14], 17, -1502002290)  
  73.   b = ff(b, c, d, a, x[i+15], 22, 1236535329)  
  74.    
  75.   a = gg(a, b, c, d, x[i+ 1], 5 , -165796510)  
  76.   d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632)  
  77.   c = gg(c, d, a, b, x[i+11], 14, 643717713)  
  78.   b = gg(b, c, d, a, x[i+ 0], 20, -373897302)  
  79.   a = gg(a, b, c, d, x[i+ 5], 5 , -701558691)  
  80.   d = gg(d, a, b, c, x[i+10], 9 , 38016083)  
  81.   c = gg(c, d, a, b, x[i+15], 14, -660478335)  
  82.   b = gg(b, c, d, a, x[i+ 4], 20, -405537848)  
  83.   a = gg(a, b, c, d, x[i+ 9], 5 , 568446438)  
  84.   d = gg(d, a, b, c, x[i+14], 9 , -1019803690)  
  85.   c = gg(c, d, a, b, x[i+ 3], 14, -187363961)  
  86.   b = gg(b, c, d, a, x[i+ 8], 20, 1163531501)  
  87.   a = gg(a, b, c, d, x[i+13], 5 , -1444681467)  
  88.   d = gg(d, a, b, c, x[i+ 2], 9 , -51403784)  
  89.   c = gg(c, d, a, b, x[i+ 7], 14, 1735328473)  
  90.   b = gg(b, c, d, a, x[i+12], 20, -1926607734)  
  91.    
  92.   a = hh(a, b, c, d, x[i+ 5], 4 , -378558)  
  93.   d = hh(d, a, b, c, x[i+ 8], 11, -2022574463)  
  94.   c = hh(c, d, a, b, x[i+11], 16, 1839030562)  
  95.   b = hh(b, c, d, a, x[i+14], 23, -35309556)  
  96.   a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060)  
  97.   d = hh(d, a, b, c, x[i+ 4], 11, 1272893353)  
  98.   c = hh(c, d, a, b, x[i+ 7], 16, -155497632)  
  99.   b = hh(b, c, d, a, x[i+10], 23, -1094730640)  
  100.   a = hh(a, b, c, d, x[i+13], 4 , 681279174)  
  101.   d = hh(d, a, b, c, x[i+ 0], 11, -358537222)  
  102.   c = hh(c, d, a, b, x[i+ 3], 16, -722521979)  
  103.   b = hh(b, c, d, a, x[i+ 6], 23, 76029189)  
  104.   a = hh(a, b, c, d, x[i+ 9], 4 , -640364487)  
  105.   d = hh(d, a, b, c, x[i+12], 11, -421815835)  
  106.   c = hh(c, d, a, b, x[i+15], 16, 530742520)  
  107.   b = hh(b, c, d, a, x[i+ 2], 23, -995338651)  
  108.    
  109.   a = ii(a, b, c, d, x[i+ 0], 6 , -198630844)  
  110.   d = ii(d, a, b, c, x[i+ 7], 10, 1126891415)  
  111.   c = ii(c, d, a, b, x[i+14], 15, -1416354905)  
  112.   b = ii(b, c, d, a, x[i+ 5], 21, -57434055)  
  113.   a = ii(a, b, c, d, x[i+12], 6 , 1700485571)  
  114.   d = ii(d, a, b, c, x[i+ 3], 10, -1894986606)  
  115.   c = ii(c, d, a, b, x[i+10], 15, -1051523)  
  116.   b = ii(b, c, d, a, x[i+ 1], 21, -2054922799)  
  117.   a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359)  
  118.   d = ii(d, a, b, c, x[i+15], 10, -30611744)  
  119.   c = ii(c, d, a, b, x[i+ 6], 15, -1560198380)  
  120.   b = ii(b, c, d, a, x[i+13], 21, 1309151649)  
  121.   a = ii(a, b, c, d, x[i+ 4], 6 , -145523070)  
  122.   d = ii(d, a, b, c, x[i+11], 10, -1120210379)  
  123.   c = ii(c, d, a, b, x[i+ 2], 15, 718787259)  
  124.   b = ii(b, c, d, a, x[i+ 9], 21, -343485551)  
  125.    
  126.   a = safe_add(a, olda)  
  127.   b = safe_add(b, oldb)  
  128.   c = safe_add(c, oldc)  
  129.   d = safe_add(d, oldd)  
  130. }  
  131. return [a, b, c, d]  
  132. }  
  133.    
  134. /*
  135. * Convert an array of little-endian words to a hex string.
  136. */
  137. function binl2hex(binarray)  
  138. {  
  139. var hex_tab = "0123456789abcdef"
  140. var str = ""
  141. for(var i = 0; i < binarray.length * 4; i++)  
  142. {  
  143.   str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +  
  144.       hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF)  
  145. }  
  146. return str  
  147. }  
  148.    
  149. /*
  150. * Convert an array of little-endian words to a base64 encoded string.
  151. */
  152. function binl2b64(binarray)  
  153. {  
  154. var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  155. var str = ""
  156. for(var i = 0; i < binarray.length * 32; i += 6)  
  157. {  
  158.   str += tab.charAt(((binarray[i>>5] << (i%32)) & 0x3F) |  
  159.            ((binarray[i>>5+1] >> (32-i%32)) & 0x3F))  
  160. }  
  161. return str  
  162. }  
  163.    
  164. /*
  165. * Convert an 8-bit character string to a sequence of 16-word blocks, stored
  166. * as an array, and append appropriate padding for MD4/5 calculation.
  167. * If any of the characters are >255, the high byte is silently ignored.
  168. */
  169. function str2binl(str)  
  170. {  
  171. var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks  
  172. var blks = new Array(nblk * 16)  
  173. for(var i = 0; i < nblk * 16; i++) blks[i] = 0  
  174. for(var i = 0; i < str.length; i++)  
  175.   blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8)  
  176. blks[i>>2] |= 0x80 << ((i%4) * 8)  
  177. blks[nblk*16-2] = str.length * 8  
  178. return blks  
  179. }  
  180.    
  181. /*
  182. * Convert a wide-character string to a sequence of 16-word blocks, stored as
  183. * an array, and append appropriate padding for MD4/5 calculation.
  184. */
  185. function strw2binl(str)  
  186. {  
  187. var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks  
  188. var blks = new Array(nblk * 16)  
  189. for(var i = 0; i < nblk * 16; i++) blks[i] = 0  
  190. for(var i = 0; i < str.length; i++)  
  191.   blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16)  
  192. blks[i>>1] |= 0x80 << ((i%2) * 16)  
  193. blks[nblk*16-2] = str.length * 16  
  194. return blks  
  195. }  
  196.    
  197. /*
  198. * External interface
  199. */
  200. function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) }  
  201. function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }  
  202. function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) }  
  203. function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }  
  204. /* Backward compatibility */
  205. function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) }  
  206. module.exports = {  
  207. hexMD5: hexMD5  
  208. }  
复制代码

一直验证我的微信签名错误,可是我真的对了n遍了,还是没有解决!!!

A:小程序支付案例http://www.henkuai.com/thread-29606-1-1.html

原帖:http://www.henkuai.com/thread-29602-1-5.html

Q:求助。。类似$this
现在想实现的功能是一堆标签点哪个高亮哪个。在Js用this就可以 小程序好像不行。如果我setData class的方法。所有的绑定了点击事件的都会增加。有什么办法吗。。求help

A:参考http://www.henkuai.com/thread-21712-1-1.html
数据是网络的,没有本地的,思路就是需要点那个的时候就加个标识,让它的样式class="{{item.changeColor?'selected2':'selected1'}}"选择的是selected1这样啦,这个样式控制就是true和false而已啦,只有你点击的绑定事件进行修改就可以了

原帖:http://www.henkuai.com/thread-29579-1-1.html

Q:微信小程序如何将获取的openid记录到数据库中?
现在可以获取openid了,也能将openid传给小程序端,但是就是不知道在服务器端怎么将获取的openid和支付金额这些记录到数据库中去?我是用java写的后台

A:单击隐藏图章支付金额这些记录,在你统一下单的时候顺便把支付金额和appid这些记录存到数据库去就可以了

原帖:http://www.henkuai.com/thread-29448-1-1.html

Q:数据显示问题
请问我的HTTPS域名啥的都配置好了,后端也放在公网服务器上,在本地开发者工具调试是正常的,有数据,https请求成功了,数据已经拿到,但就是用手机预览没有数据,是啥原因??

A:资源问题吧,开发者工具读取的是本地资源,手机读取不到

原帖:http://www.henkuai.com/thread-29508-1-1.html

Q:小程序可以下载图片到手机相册吗?如何实现呢
功能是将一张二维码图片下载到手机,wx.saveFile 能将下载的图片放到相册吗?

A:用这个api,wx.previewImage(OBJECT),可以全屏浏览图片,右上角可以发送和保存图片进相册

原帖:http://www.henkuai.com/thread-29393-1-1.html

Q:小程序关于图片自适应疑问
以下代码只实现了父级固定高度(px)下,大于父级高度的正方形自适应
util.js
  1. function imageUtil(e) {  
  2.   var imageSize = {};  
  3.   var originalWidth = e.detail.width;//图片原始宽  
  4.   var originalHeight = e.detail.height;//图片原始高  
  5.   console.log( '图片原始宽',originalWidth )
  6.   console.log( '图片原始高',originalHeight )
  7.   var originalScale = originalHeight/originalWidth;//图片高宽比  
  8.   console.log(originalScale)
  9.   //获取屏幕宽高  
  10.   wx.getSystemInfo({  
  11.     success: function (res) {  
  12.       var windowWidth = res.windowWidth;  
  13.       var windowHeight = res.windowHeight;  
  14.       var windowscale = windowHeight/windowWidth;//屏幕高宽比
  15.       if(originalScale < windowscale){//图片高宽比小于屏幕高宽比  
  16.         //图片缩放后的宽为屏幕宽  
  17.          imageSize.imageWidth = windowWidth;  
  18.          imageSize.imageHeight = (windowWidth * originalHeight) / originalWidth;  
  19.       }else{//图片高宽比大于屏幕高宽比  
  20.         //图片缩放后的高为屏幕高  
  21.          imageSize.imageHeight = windowHeight;  
  22.          imageSize.imageWidth = (windowHeight * originalWidth) / originalHeight;
  23.       }  
  24.       
  25.     }  
  26.   })  
  27.   console.log('缩放后的宽: ' + imageSize.imageWidth)  
  28.   console.log('缩放后的高: ' + imageSize.imageHeight)  
  29.   return imageSize;  
  30. }  
  31.   
  32. module.exports = {  
  33.   imageUtil: imageUtil  
  34. }  
复制代码

wxml
  1. <image data-index="0" style="width: {{images[0].width}}px; height: {{images[0].height}}px;" bindload="imageLoad" src="/image/personal-core.png" class="slide-image" />
复制代码

js
  1. imageLoad: function (e) {
  2.     var imageSize = imageUtil.imageUtil(e)
  3.     var image = this.data.images;
  4.     if(imageSize.imageHeight > 258){
  5.       imageSize.imageWidth = 258
  6.       imageSize.imageHeight = 258
  7.     }
  8.     image[e.target.dataset.index] = {
  9.       width: imageSize.imageWidth,
  10.       height: imageSize.imageHeight
  11.     }
  12.     this.setData({
  13.       images: image
  14.     })
  15.   }
复制代码

结果
e5l.png

如果没有写红色代码的话
hk8zz.png

如何把  258 改成 rpx呢
  1.    if(imageSize.imageHeight > 258){
  2.       imageSize.imageWidth = 258
  3.       imageSize.imageHeight = 258
  4.     }
复制代码

A:小程序自适应是不行的,但是可以通过后来程序来实现:如我的PHP程序,在详细显示的页面中,将手机的宽高传给后台程序,后台程序来按手机宽高等比例缩小图片显示。并将图片及宽高的json返回给小程序,用来控制图片的全屏等比例的显示。

原帖:http://www.henkuai.com/thread-29497-1-1.html

Q:wx.checkSession的思路,大神给缕缕对不对
1、wx.login获取code
2、wx.request发送到自己的服务器上
3、自己的服务器上的程序向微信服务器发送(AppID+AppSecret+code),取得session_key+openid
4、自己服务器上的程序根据session_key+openid生成第三方3rd_session
5、将3rd_session存储在服务器上
6、小程序取得3rd_session,存储在手机本地storage
7、小程序的后续用户先从storage读取3rd_session,根据3rd_session在自己服务器的session存储中查找合法用户

我的问题是
1、php自己的session是用来判断用户是否登录的,windows+apache的话,小程序的session咋存储。是存储到数据库中???还是哪???
2、wx.login中的code哪个是用户的唯一标识?是openid吗??

A:1、php自己的session是用来判断用户是否登录的,windows+apache的话,小程序的session咋存储。是存储到数据库中???还是哪???
2、wx.login中的code哪个是用户的唯一标识?是openid吗??

试着回答:
1、session的保存有几种方式,默认是存储在进程中,内存里。
2、code是当前微信用户的呀。 但code只是一个中间值,openid才是身份证。

原帖:http://www.henkuai.com/thread-16175-1-1.html

Q:小程序在iOS平台上,页面显示不完整

我写了个小程序,但是在真机iOS上预览时,页面并没有完全显示, 但是数据应该已经获得了。如下:
hi22xz7.png

主要不显示的是下面详情部分,这是一个scroll-view封装的列表,但是数据已经正常获得,这个我这里可以确定。下面的scroll-view页面直接整个不显示。在真机上面空白一片,在这里我下面的组件主要用到的有scrollview容器,里面是for循环出来的 view列表。如果有谁知道,请帮助一下,谢谢!

A:好吧,我修好了,是scrillview高度不固定引起的,只能设置为px的固定高度,不可以用其他方式设置高度。所以造成这种结果

原帖:http://www.henkuai.com/thread-29412-1-1.html

以上就是本次整理小程序开发问答中已解决的部分问题,如果大家还有其他疑问可以详细浏览下微信小程序开发问答板块,当然仍旧还有很多未解决的问题,碰见自己可以解决的问题,也希望大家贡献下自己的回答

传送门:
社区小程序开发问答最新整理(3月23日)
社区小程序开发问答最新整理(3月15日)


回复

使用道具 举报

最佳答案
0 

1

主题

21

帖子

181

积分

新人求带

积分
181
发表于 2017-4-20 21:46:56 | 显示全部楼层
支持,学习
回复

使用道具 举报

最佳答案
0 

0

主题

10

帖子

485

积分

略知一二

积分
485
发表于 2017-4-21 10:21:32 | 显示全部楼层
刚开始学习小程序,感谢收集问答。
前排围观 20170421
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

3

帖子

47

积分

新人求带

积分
47
QQ
发表于 2017-4-22 10:51:23 | 显示全部楼层
路过 表示支持楼主  顶
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

5

帖子

137

积分

新人求带

积分
137
发表于 2017-4-26 21:31:13 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

17

帖子

172

积分

新人求带

积分
172
发表于 2017-4-28 10:13:05 | 显示全部楼层
学习了。
回复

使用道具 举报

最佳答案
0 

1

主题

7

帖子

45

积分

新人求带

积分
45
发表于 2017-4-29 19:59:02 | 显示全部楼层
看看,有需要的不
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

106

帖子

4344

积分

S1

积分
4344
发表于 2017-5-2 19:26:48 | 显示全部楼层
谢谢你啊,好帖子不顶不行
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

10

帖子

99

积分

新人求带

积分
99
发表于 2017-5-4 02:15:54 | 显示全部楼层
只差啊啊啊
回复 支持 反对

使用道具 举报

最佳答案
0 

1

主题

9

帖子

57

积分

新人求带

积分
57
发表于 2017-5-4 06:00:48 来自手机 | 显示全部楼层
大神  加个好友有事咨询  2495943853
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


易域网-您身边的域名管家

henkuai.com是专业的第三方微信开发者平台,为生态而生。


本站为第三方微信开发者平台,非腾讯官方网站。

天津市滨海新区
中新生态城中成大道生态建设公寓9号楼3层301

欢迎来这里一起喝喝茶,
聊聊你的产品。

微信公众号gongzhongkaifa

工作日12小时内回复。

网站业务
zhongcong@henkuai.com

工作日12小时内回复。

市场合作
songchang@henkuai.com