微信公众号开发:
微信公众号开发的一些注意事项
开发环境搭建
- 微信公众号开发者配置,url,token,
- 本地调试,使用内网穿透工具,花生壳,或者netapp,买一个可以自定义域名的,内网映射到制定端口,
- 项目搭建,express或koa搭建项目,npm有微信的现成包,直接配置
回复
- 回复和发消息并没有什么特别注意的地方,这里不多说
菜单
- 微信菜单有自定义菜单,有个性化菜单,但是个性化菜单优先级高于个性化菜单
- 个性化菜单可以根据用户的tag,sex,group等属性进行区分菜单
- 注意,我在使用时发现个性化菜单经常会失效,不起作用,偶尔会起作用,如果线上打算使用个性化菜单,请慎重并仔细测试
授权
授权有网页授权,js sdk授权,
网页授权也有两种,一个上静默授权,一个是点击授权,贴一下js sdk调用前认证的代码,要使用sha1加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| async getSignConfig(originUrl) { let data = {} const sha1 = crypto.createHash('sha1') const appId = this.app.config.weixin.appID const jsapi_ticket = await this.ctx.service.token.getJSApiTicket() const noncestr = this.app.config.jsapi.noncestr const url = this.app.config.domain + originUrl const timestamp = parseInt(new Date().getTime() / 1000) const str = `jsapi_ticket=${jsapi_ticket}&noncestr=${noncestr}×tamp=${timestamp}&url=${url}` sha1.update(str) const signature = sha1.digest('hex') data = { jsapi_ticket, noncestr, timestamp, url, signature, appId } return data }
|
调用js sdk页面上代码
1 2 3 4 5 6 7 8 9 10 11 12 13
| wx.config({ debug: false, appId: appId, timestamp: timestamp, nonceStr: nonceStr, signature: signature, jsApiList: ['closeWindow'] }); wx.ready(function(){ setTimeout(function(){ wx.closeWindow(); },2000); });
|
实用的常识
- tag不能重复创建,但是给用户可以重复打同一个tag
- 更改菜单一般五分钟生效,或者重新关注公众号,立马能看到
- 如果调用js sdk,务必使用https,防止因为安全问题,导致ios下js下载失败。如果你的服务是https,而引用了https的微信js,在ios下肯定会下载失败,这是ios的安全机制导致的。
- 微信关闭窗口的js接口,不管jsconfig验证是否通过,窗口都可以关闭
- 微信的token过期时间上2h,但是很多时候30分钟不到可能已经失效,建议把token过期时间设置为10分钟之内
常见报错
- 创建菜单的时候,菜单长度不合法,仔细检查自己传的json菜单,一般都是json格式问题,而不是长度
- redirect_uri不合法,是创建授权菜单的redirect_uri和网页授权域名配置不一样
- 关注公众号,服务端设置的欢迎消息发不过去,如果自己代码无异常,一般是因为token过期
以后遇到其他问题继续补充