微信公众号网页开发

公司最近有个新的需求,就是在微信公众号里可以操作工单。开始服务,结束服务分别上传对应的图片,获取当前服务人员操作时的地理位置。其中一些公司的需求我就不在这里详细说了,主要说说微信公众号开发。

说道微信开发几乎所有的功能都围绕一个核心,那就是access_token。access_token的时效为7200秒也就是两个小时,我在项目中写了一个定时器每半个小时获取一次写入到static变量当中(之前写1.5小时获取一次经常出现access_token失效的情况,access_token每天可以获取2000次。

如果有对特定的关注用户有操作,比如说提示有新的工单给服务人员,这时一定会用到关注用户的openid,所以一般在用户使用微信公众号之前会获取他的openid,通常也会有一个绑定动作。(获取openid需要用code, 一般会先获取code再获取openid,由于是去腾讯服务器去获取时间会很久,一般第一次访问公众号里的页面打开会很慢,建议单跑一个线程获取。)

在前面有说道上传图片和获取定位信息的功能,这里就要使用微信的js-sdk了,微信会提供很多已有的js方法供开发人员使用,详情可以参考公众号里的开发文档。在使用微信提供的sdk的时候需要进行签名认证。并且只能在公众号管理平台 - js接口安全域名中配置好的域名下使用,感觉这样很不方便测试。

sdk签名前端:微信公众号网页开发_第1张图片

需要获取到当前页面的地址传到后台用以生成认证码,如果包含特殊字符需要在页面上做转义。


SDK签名后台:微信公众号网页开发_第2张图片



     需要用到access_token 和 ticket  ,ticket 可以使用access_token 作为参数获取,最后使用 access_token、ticket、时间戳、随机字符、url 根据算法获取出认证码,ticket 获取地址,signature中获取认证码的算法开发文档中都有。认证成功在开启debug调试下会弹出ok的提示,如果不是在js安全接口中配置的域名下测试会提示invalid url domain的提示也是成功的。

开发当中遇到的问题,在我遇到的问题当中我觉得比较麻烦的大概有两个,第一个是上传图片的方式,最开始我使用的是 getLocalImgData 方法 ,这个方法会获根据chooseImage 返回的localid 把图片转成base64码,在前端通过dataurl展示,存在数据的clob类型的字段里。后来发现这么做会有兼容性问题,ios的话对微信浏览器内核版本有要求,个别用户用的比较旧安卓机也不支持,还有就是clob存取需要做特殊处理,base64码又过于大会导致页面加载慢。最终我使用的方法是chooseImage 后使用uploadImage把图片上传到微信服务器上用返回的serverid 传到后台,在其他信息入库的同时新启动一个线程(上传下载比较耗费时间)用serverid去微信服务器上下载图片写到自己的服务器上,然后上传到ftp。

使用这种方法页面上展示ftp的地址解决了兼容性的问题。但是遇到了我前文说到的第二个问题,微信项目是通过httpclent请求到api服务完成入库操作的,下载上传图片也是在api服务中,这就需要把access_token也作为参数传递到api服务中,在我刚刚开发完这种上传方法测试的时候上传是没有问题的,后来遇到了上传图片失败的情况,上传到服务器失败的图片统一为110bytes,后来通验证发现是在微信服务器下载图片失败,在上网搜索时看到了有人说可能是access_token失效导致的。解决办法是缩短了定时获取微信access_token时间,保险起见在下载图片时验证图片的流的大小,如果过小就认为是下载失败:微信公众号网页开发_第3张图片


会去微信项目中重新获取access_token再次下载。


总结:微信网页开发毕竟是移动端在使用,要考虑到手机机型的兼容问题。微信开发用到的很多票据都是要去微信服务器上获取,一般会花费一点时间,导致有时候打开页面慢。




你可能感兴趣的:(微信公众号网页开发)