微信公众平台接入经验分享,纯干货

这篇文章是千米网移动团队半年多时间使用微信平台开发多租户微店系统相关经验的分享与记录,涉及微信JSSDK,消息推送,微店支付等方面,微信开发的坑实在太多了,早期的时候官方文档也有不少问题,网上相关的资料很多都比较旧。 文章后面还会持续更新修正, 希望能对想了解使用微信平台的小伙伴们有些帮助,能够少走些弯路,少踩些坑。

##为何要关注微信

  • 巨大流量入口
  • 相对于App,用户使用成本低

##微信公众号

###服务号与订阅号的区别

####服务号:
服务号主要面向企业,为用户提供服务。 申请需要提供相应的公司材料,以及验证费用。
服务号每个月仅能群发一条消息。
服务号默认有自定义菜单功能,可以申请微信认证,微信认证通过后,自动获得高级接口权限,例如语音识别、用户信息获取、客服接口等。

####订阅号:
订阅号主要面向媒体和个人,为用户提供资讯和信息。
订阅号每天能够群发一条消息。
订阅号默认没有自定义菜单功能。对于政府、媒体、明星等非企业类型的订阅号可申请微信认证,微信认证通过后,可获得自定义菜单权限。
企业与个人的订阅号不能申请微信认证。
无法使用微信支付,即使在订阅号中打开另外一个公众号的微信支付也不行,会提示无法跨号支付。
个人账号类型的订阅号没有网页授权获取用户基本信息权限,即无法获取微信用户的信息。(现在政府机构账号类是可以支持的)

##公众号登录后相关的选项的介绍

###两个token的区别
在微信公众号的接入中,会涉及到两个token,需要区分清楚,授权机制也是有所不同的。

####公众号access_token
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。 管理公众号所使用到的接口才会用到该token。请求地址和网页授权地址也是不同的。
[https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET](https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET)
官方文档具体说明

####网页授权用户access_token
如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
获取用户信息的接口都是需要用户的token。
官方文档具体说明

###OpenID是什么
实际上是加密后的微信号,每个用户对每个公众号的OpenID是唯一的。用户对不同的公众号下存在不同的OpenID。
在微信公众号管理用户接口中,获取用户信息都会用到OpenID。并且在发起微信支付的时候,也需要用到OpenID。

###页面授权接入
用户在微信访问授权网页时候,会允许被获取个人信息。总体流程:

  1. 引导用户进入授权页面同意授权,获取code
  2. 通过code换取网页授权access_token(与微信公众号中的access_token不同)

  3. 如果需要,开发者可以刷新网页授权access_token,避免过期

  4. 通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

其中,在引导用户授权返回code后,直接由第三方的服务器通过code去请求用户access_token和相关用户信息

####授权回调域名
在公众号开发管理中网页授权获取用户基本信息设置授权域名,此域名下的网页将获得微信授权。 但是,此域名对应的子域名是没有不具有微信授权的。即,m.qianmi.com如果被设置后,只有[m.qianmi.com/.../xxx.html](http://m.qianmi.com/.../xxx.html)的页面有权限,1000.qianmi.com是没有权限的。

####两种授权级别

  • 静默授权,只能获取用户access_token和OpenID,不会有单独的页面提示用户是否授权。
  • 非静默授权,还能获取用户其他基本信息,会有个单独的页面提示用户是否授权。

###微信支付授权接入(H5网页)支付
已认证通过的微信公众号在开通微信支付功能后具有的功能。
在微信支付选项->开发配置下可以设置支付授权目录,一般是你的后台接口的URL
需要注意的是,虽然这里可以设置三个授权目录,但是由于网页授权地址只能有一个,所以,H5网页支付实际上只能设置一个支付目录。

####开发流程
开发流程

###微信收货地址
在微信中的H5,可以通过JSAPi获取到,授权用户的收货地址。在第一次获取授权地址的时候, 会有授权的提示是否同意使用你的地址。参数调用方式同微信支付基本相同。官方文档
需要注意的是,JS调用上使用的时间戳必须是字符串,虽然在iphone上是数字也没问题,但是在安卓上是会引起权限错误的提示

###微信JSSDK
微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。
具体开发步骤这里就不重复阐述了,官方文档
这里需要提到的是,JSSDK依旧需要个后台,作为签名算法服务(jsapi_ticket)。
前端在调用jssdk前需要通过wx.config配置权限,一般做法可以通过请求后台,直接生成config内容。
还有一点,部分主动执行的接口,需要放在wx.ready里。

###公众号事件推送
在开发者中心这一栏里,有个服务器配置,用户发给公众号的消息以及开发者需要的事件推送,将被微信转发到该URL中。 比如,用户关注公众号,用户发送消息给公众号,都可以获得通知,并且可以给一个回复信息。

  • URL(服务器地址): 接受转发消息的地址
  • Token令牌: 随意的字符串,你就是写个token也是可以的
  • EncodingAESKey: 可以随即生成,接受转发的服务需要有这个KEY
    第一次提交的时候,会进行验证

###调试的问题
调试是微信H5开发的一个痛点,没有合适的调试工具,一般只能alert。目前得出两种比较靠谱的方式:

  • Weinre 远程调试,不过只能看到console,无法断点调试。

  • chrome webview调试,只能在模拟器上运行微信,然后通过chrome
    inspect后调试,可以断点,可普通网页开发一样。 不过需要注意的是,只能在ARM上运行微信,这意味着模拟器不能用genymotion了,android自带的模拟器非常的慢。

###微信开放平台
从上面可以看到公众号配置一些开发的东西是十分复杂,不方便的。那么微信开放平台实际上就提供了一键配置的服务。
公众号管理者只需要被引导到指定页面后,授权给开发者在微信开放平台上的应用,就可以什么都不用操作。
微信开放平台上的应用可以把公众号相关配置全部通过api接口来设置完成。

Contents
  1. 1. 这篇文章是千米网移动团队半年多时间使用微信平台开发多租户微店系统相关经验的分享与记录,涉及微信JSSDK,消息推送,微店支付等方面,微信开发的坑实在太多了,早期的时候官方文档也有不少问题,网上相关的资料很多都比较旧。 文章后面还会持续更新修正, 希望能对想了解使用微信平台的小伙伴们有些帮助,能够少走些弯路,少踩些坑。
,