微信开发相关,了解一下
前言:
从微信公众号到现在的小程序,涉及微信开发方面的内容越来越多,工作大多时候是需要我们更了解微信开发的,比如老大说要做个什么东西,涉及到微信的,我们能立马想到方案或者提出可行性的分析吗? 因为微信开发有它自己的一套规则,有它自己的一套框架,有一定它带来的便利,也就有它带来的限制。 这篇文章,不写入门,不写开发流程,主要聊聊最近的一些调研和细节。
主要平台:
- 开放平台 (文档:微信开放平台文)
- 公众平台&小程序 (文档:微信公众平台文档&微信小程序文档)
- 商户平台 (文档:微信支付文档)
1)开放平台包含了:移动应用,网站应用,公众号和小程序,第三方平台。
- 移动应用:在开放平台创建移动应用和app关联,为app提供微信支付、分享到微信等等功能
- 网站应用:使网站支持使用微信帐号来登录
- 公众号和小程序:在开放平台里,可以绑定公众号和小程序,绑定后会触发unionId机制,帮助不同公众号或者小程序打通用户体系。
- 第三方平台:代小程序和公众号调用接口,提供运营服务和行业解决方案
2)公众平台包含:订阅号、服务号、小程序
3)商户平台:主要支持微信支付,包括线上线下的支付应用场景
三者关系如下图,所有应用都属于开放平台,开放平台可以绑定小程序和公众号使它们关联起来,商户平台为所有应用提供支付功能。
如何更好的理解他们呢? 当然是走一遍所有的流程,所谓流程也包括了注册,微信文档在大多数时候并没有特别详细,文档告诉了我们几步流程,但每个流程里面含有什么内容我们不知道,我好几次在文档怎么也找不到我想要的一些细节点。 最后还是自己走一遍流程才理解,所以你想要更清楚细节,最好都能自己去注册一遍。 微信开发相关的内容很多,研发要关注的不只是怎么调用接口,而还需要关注平台相互之间的关系,运营规范,设计规范等等。
列举一些比较常遇到的问题
微信授权OAuth2.0
微信授权几乎是所有微信开发下应用入口接口,用户授权后,通过请求微信后端,我们才能拿到用户信息,授权流程大致如下:
1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作
官方文档:Appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret)。
说起这个问题,当时也出现一个事故,在微信公众平台后台appsecret没有修改的功能,只能重置。微信后台也有统计功能,当时运营同事就要求给他们账户,他们方便实时查看。 第二天我们就发现业务功能出问题了,无法用了,前端查问题,后端查问题,怎么看业务逻辑都没有动过,不会是代码改出的问题,后端查日志就是微信那块报的错。 结果是一个运营同事皮,公众后台里面的所有功能都去点过一次,把appsecret给重置了。 结论是后台权限还是别给非研发同事吧,如果要给,也要提前提醒一下这些注意事项。
消息分发相关
产品是需要提醒用户的,消息通知在平时的开发中显得尤为重要,也常因为消息的规则可能会影响最初的产品需求。
- 公众号可以以一定频次群发消息(订阅号为每天1次,服务号为每月4次)
- 公众号模板消息可以用特定内容模板,主动向用户发送消息,可以带上链接,可以说没有次数限制
- 小程序的模版消息需要用户有交互通过form组件拿到formId才能向用户发送模板
微信分享
在开放平台注册移动应用后申请的App通过审核后,即可获得微信分享及收藏权限。
如果在网页中需要如下步骤:
1.微信公众平台里填写“JS接口安全域名”
2.在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js
3.通过config接口注入权限验证配置(配置的签名需要后端获取)
目前一个公众号可以填写三个js接口安全域名地址。 大部分公司的前端页面都部署到某一个域名下的,后端可以只提供一个公众号的签名接口作为公共服务,其他公众号的业务在同一个域名下都能调用这个接口,以完成jssdk签名配置。
微信支付
1)要使用微信支付,我们的商户号的公司主体必须和公众号小程序等注册主体一样,否则无法绑定商户号。
2)如何实现测试公众号支付:
生成一个字典,存储测试用户的测试公众号和正式公众号的openId,当测试用户在测试公众号唤起支付的时候,后端把测试公众号的openId替换为正式公众号,并使用同主体商户号,便可以正常支付。 其实就是走正式的支付,调用测试的回调。
3)商户号绑定公众号:
微信的开发者文档有时候某些文档不是很好找,入口比较深,比如最初我想找到商户号如何和多个公众号绑定,找半天没有相关文档,几个开发文档里搜索也没有。 而在微信公众平台后台的“微信支付”里,也找不到相关的文档和入口。 还好因为公司有商户号,我登录进去看了看才找到,如果是新手,在做技术调研的时候,可能会找不到文档。 最开始我还以为商户号和公众号后台都能相互申请绑定,但是确实只有商户号里面才有此功能。 商户平台新增了授权申请单以后,对应的公众平台后台便在【微信支付 ~ M-A授权】下能看到。
- 商户号绑定申请页面:
- 公众平台后台申请授权页面
如何授权文档链接 https://pay.weixin.qq.com/static/pay_setting/appid_protocol.shtml,文档入口如下图(难找):
关于支付,企业后端应该对每种支付实现后提供一个公共服务,每当有新的公众号需要支付的时候,只需要配置好相应的参数,调用公共服务下单即可。 如果有需要,前端也可以做一个钱包页面兼容多场景下的支付。 如果账户体系打通了,钱包里会有充值的余额,用户还可以直接选择扣除余额,如果是在非微信浏览器中,钱包理应也有支付宝等支付方式。 但是钱包页面的存在会多一次跳转,如果在微信里用钱包页面,用户体验没有直接唤起支付好。
通过开放平台打通账户体系
一个企业下面大部分的应用都希望拥有一个账户体系,相互之间的数据要能打通,而每一个公众号或者应用下面对应一个用户都有不同的openId也就无法在不同应用之间标识同一个用户,这个时候就需要用到微信开放平台。微信公众号、移动应用、小程序等都是通过openId来标识用户的唯一性,开放平台能够绑定这些应用,绑定之后同一个用户会生成unionid来体现用户的唯一性。详情UnionID机制。
目前一个开放平台下面可以绑定:
- 50个移动应用(native)
- 10个网站应用
- 50个同主体公司公众号,5个不同主体公司公众号
- 50个同主体公司小程序,5个不同主体公司小程序
主体注册限制
我之前一直在找一个公司能注册多少公众号,在公众平台开发者文档就一直没找到有说明。 结果这块的内容在qq客服那个网站上http://kf.qq.com/faq/120911VrYVrA140428naUJVv.html
账号迁移
公众号主体一旦审核完成就不能更换。如果需要更换,只能新注册一个公众号做迁移,迁移只能迁移部分数据,一个用户在不同公众号openId不一样的原则,如果A公众号迁移到B公众号,需要进行一次openId转换,官方有接口,详情看:http://kf.qq.com/faq/170221aUnmmU170221eUZJNf.html。 目前小程序无法迁移。
结语
微信开发容易出现很多坑,不止于技术带来的,而其体量也越来越大,前后端都应该了解整个开发流程、开发配置、运营规则等等,否则容易出了问题不知道是谁的问题,解决问题的效率会非常低,甚至相互甩锅。 微信生态功能在不停的迭代,开发者技术文档、各种政策也时而变更,这些都是我们需要时刻关注的。