微信开发心得
2016-04-21 00:00
555 查看
构建一套SDK
微信开发本质就是调用微信API。微信API是持续更新的,有时候新增,有时候修改。所以开发者免不了也要更新自己的代码。为了集中处理对微信API的请求,开发一套SDK是比较好的选择。SDK,就意味着与外部应用代码没有耦合关系,自成一个依赖岛。封装SDK的好处显而易见:
集中处理请求的方式。
集中处理返回值和错误码。
复用请求凭证(access_token)。
我封装的微信SDK:https://github.com/liuxd/WeChatSDK
回调服务器
开发者不仅要请求微信API,还要接收来自微信的反馈信息推送。有以下特点:统一为XML格式字符串。微信服务器推送来的消息和开发者返回给微信服务器的消息都是XML格式。__如果不需要返回信息,请务必返回空字符串。__否则会报“返回值不合法”的错误。
微信推送来的信息包含多种类型。包括:用户消息,事件消息等。可以根据业务需要选择性处理。
压力较大。微信推送的消息类型较多,其中用户消息和地理位置上报算比较频繁的,所以响应的服务器要具备较好的负载能力。
access_token的封装
绝大多数微信API都需要使用__access_token__,所以__access_token__的维护是非常重要的。统一来源。access_token__具有排他性,如果已经有了一个__access_token__了还要请求申请__access_token__的接口的话,则原来的__access_token__就失效了。这在多系统都需要__access_token__的情况下非常严重。所以要统一__access_token__来源,建议所有子系统都访问同一个接口来获得__access_token。
做好缓存。__access_token__有有效期,且申请__access_token__的接口有访问次数限制,所以缓存是必须的。然而官方给出的缓存过期时间是有问题的,建议本地缓存的有效时间在官方有效时间的基础上减少200秒。
正式号与测试号。每个正式公众号都配备了一个测试号,也只有一个测试号。实际开发中可能多个部门在使用测试号,这可能导致__access_token__互相覆盖的问题。建议对测试号的__access_token__也做统一封装。
网页授权
开发获得code的辅助工具。网页授权的流程比较复杂,且需要https的域名,所以为测试号搭建环境很不划算,不推荐为测试号搭建网页授权的环境。但是实际使用中可能需要真实的code来做测试,那么就需要一个高效的方法获得没有使用的有效code。建议开发一个辅助页面,显示网页授权链接的二维码,这样就可以比较方便的获得有效code。代理域名。实际开发中可能有多个域名需要使用网页授权功能,但是微信后台只支持配置一个安全域名,这怎么办呢?好办,你实际需要的只是那个code而已,建议在配置的安全域名上开发一个中转程序,根据参数将code分发到指定URL上即可。
短URL处理。授权链接都很长,而且里面包含了APPID。既不方便使用,也不该直接使用。建议开发一个中转程序,根据参数构建真实的URL。这样的好处很多:
统一管控。方便记录日志,进行统计。
链接较短。相比原始URL,新的URL要精简很多。
用户地理位置更新
用户信息里的所在地信息是有问题。有两个原因:早期微信的地理位置不规范,是可以手动输入的。现在仍然遗留了很多脏数据。
用户所在位置是可以用户自己选择的。有些用户出于各种心理而故意选择了一个不真实的地区。
然而很多时候我们需要用户的真实地理信息,这时候上报地理信息的接口就有用处了。我是这么用的:
用户经纬度请求腾讯地图API 文档地址,获得所在地信息后更新用户数据。
每个经纬度的返回值都进行缓存,可以一定程度上减少请求腾讯地图API的次数。
用户每天只更新一次地理信息。一方面是因为没必要太频繁更新,另一方面用户地理信息是每5秒上报一次,如果每次都更新对服务器的压力太大。
相关文章推荐
- 第三方登录之微信登录,基于ThinkSDK
- Java版本微信企业号的开发--01
- QQ号,手机号 查询是否注册微信
- 小程序:因式分解
- android仿微信聊天界面
- 微信支付-JSAPI模式开发
- 微信公众号第三方开发之一创建微信公众号第三方平台
- 微信支付 常见报错
- 微信公众号开发教程01:接入指南
- nodejs express wechat 实现微信消息功能
- 微信公众号命名规则将调整 全平台公众号名称唯一
- 扫二维码下载apk并统计被扫描次数(及微信屏蔽下载解决方案)
- iOS分享微信联系人/朋友圈详解
- 微信清理H5真的太早了?这会是应用号发布的前兆吗
- 微信开发测试号配置
- Java小程序之判断输入年份是否是闰年
- 微信js sdk invalid signature签名错误
- JS判断手机类型,及是否在微信内打开
- Android微信支付
- 安卓系统给手机设置代理