这是我参与更文挑战的第6天,活动详情查看: 更文挑战javascript
之前作过微信公众号相关的工做,本文说一下主要重点,不涉及到什么代码。咱们的客户是有一个多家子公司,而后每一个子公司都有本身的微信公众号。总公司但愿使用总公司的微信公众号对全部子公司的用户进行受权。这样以来,总公司拿到全部子公司的用户信息,而且收款统一走总公司的支付商户。这里没有太多的文字说明,具体都在图上。php
由于咱们这里有准备好的微信公众号,因此没什么问题,就是公众号须要开通相关的接口。
html
基本设置 -> IP白名单
前端
公众号设置 -> 功能设置 -> 域名绑定 [ JS接口安全域名 、网页受权域名 ]
校验文件须要上传到服务器上,域名才能够绑定成功
java
window.location.href=`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${window.location.origin}/api/wp/auth?params=${params}&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect`;
复制代码
微信公众号菜单跳转链接先跳转到前段页面,而后跳转微信校验,回调回到后端,在重定向到前端。
web
配置IP白名单的时候,阿里云可能须要配置两个ip,一个是入口ip,另外一个是出口ip,能够在系统报错的时候查看具体的ip信息。
数据库
微信公众号 -> 微信支付 -> 关联支付商户
json
具体的api 文档:pay.weixin.qq.com/wiki/doc/ap…
后端
可能公司有多家子公司,总公司想要经过总公司的公众号去受权引流全部分公司的用户信息。这里的引流说的不是公众号关注引流,而是用户信息。
正常的微信公众号进行受权,以下图:
api
就是下面代码里的appId。
window.location.href=`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${window.location.origin}/api/wp/auth?params=${params}&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect`;
复制代码
关键点就是这里的appId,并非随着不一样的微信号修改,而是全部的微信公众号都使用单一的微信公众号appId以及secreat。
多个环境意味着在不一样的环境会使用不一样的微信公众号去验证。
当咱们须要部署测试环境和生产环境的时候,须要基于开发环境作哪些修改呢?以下图所示,相关的数据以及配置都要修改。
{
"cityId":"872",
"cityName":"****",
"wx_token":"token",
"wx_app_id":"xxxxxxxx",
"wx_secret":"yyyyyyyy",
"sub_app_id":"xxxxxxxx",
"sub_secret":"yyyyyyyy",
"deletedStatus":"0"
}
复制代码
咱们上面说的appId和secret指的输数据库里的sub_app_id,sub_secret。由于两个字段是用来受权用的,就是开发环境/测试环境/生产环境,这两个字段都是同样的。由于是单一微信公众号受权多微信号的。
扫码场景在当前生活当中已经很常见了。
developers.weixin.qq.com/doc/offiacc…
微信推送消息须要启用微信公众号服务器。须要进行相关配置才能够。
假设上方的接口为/testCallBack/${storeId}。会有两个同名接口,一个是get/post。
/** * 测试微信回调 */
@GetMapping(value = "/testCallBack/{storeId}")
public void testWxCallBack(@RequestParam(name = "signature", required = false) String signature, @RequestParam(name = "timestamp", required = false) String timestamp, @RequestParam(name = "nonce", required = false) String nonce, @RequestParam(name = "echostr", required = false) String echostr, @PathVariable(value = "storeId") String storeId, HttpServletResponse response) {
****
****
****
}
/** * 微信回调消息处理 * * @param request * @param response * @throws IOException * @throws DocumentException */
@PostMapping(value = "/testCallBack/{storeId}", produces = {"application/xml; charset=UTF-8"})
@ResponseBody
public void testWxCallBack() {
****
****
****
}
复制代码
这里的矛盾点是:假设咱们有二十家子公司,每家子公司都有本身的微信公众号,子公司经过二维码扫描能够进行引流,这里引流就是用户须要去关注子公司的微信公众号。可是关注子公司以后跳转的页面仍是经过总公司的微信公众号受权的。
{
"cityId":"872",
"cityName":"***",
"wx_token":"token",
"wx_app_id":"xxxxxxxx",
"wx_secret":"yyyyyyyy",
"sub_app_id":"xxxxxxxx",
"sub_secret":"yyyyyyyy",
"deletedStatus":"0"
}
复制代码