微信公众号:单微信号受权多微信号 & 扫码推送

这是我参与更文挑战的第6天,活动详情查看更文挑战javascript

背景

之前作过微信公众号相关的工做,本文说一下主要重点,不涉及到什么代码。咱们的客户是有一个多家子公司,而后每一个子公司都有本身的微信公众号。总公司但愿使用总公司的微信公众号对全部子公司的用户进行受权。这样以来,总公司拿到全部子公司的用户信息,而且收款统一走总公司的支付商户。这里没有太多的文字说明,具体都在图上。php


微信受权基本知识

image.gif开发前准备

具备网页受权的微信公众号/开发者帐号

由于咱们这里有准备好的微信公众号,因此没什么问题,就是公众号须要开通相关的接口。
image.gif
image.gif
html

开发环境须要的服务器和域名,域名解析到服务器,配置IP白名单

基本设置 -> IP白名单
前端

image.gif

公众号设置 -> 功能设置 -> 域名绑定 [ JS接口安全域名 、网页受权域名 ]
校验文件须要上传到服务器上,域名才能够绑定成功

image.gif
java

网页受权

网页受权先后端交互流程

image.gif

前端代码书写

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`;
复制代码

image.gif微信公众号菜单跳转链接先跳转到前段页面,而后跳转微信校验,回调回到后端,在重定向到前端。

web

阿里云环境注意事项

配置IP白名单的时候,阿里云可能须要配置两个ip,一个是入口ip,另外一个是出口ip,能够在系统报错的时候查看具体的ip信息。

数据库

支付配置

添加商家帐户

微信公众号 -> 微信支付 -> 关联支付商户
image.gif
image.gif
json

支付所需配置参数

具体的api 文档:pay.weixin.qq.com/wiki/doc/ap…

后端

商家支付受权域名

image.gif

前端支付操做

image.gif


单微信公众号受权多微信公众号

场景

可能公司有多家子公司,总公司想要经过总公司的公众号去受权引流全部分公司的用户信息。这里的引流说的不是公众号关注引流,而是用户信息。

正常的微信公众号进行受权,以下图:
image.png

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。

image.png


如何配置配置开发,测试,生产环境

多个环境意味着在不一样的环境会使用不一样的微信公众号去验证。

开发环境

image.png

测试环境/生产环境


当咱们须要部署测试环境和生产环境的时候,须要基于开发环境作哪些修改呢?以下图所示,相关的数据以及配置都要修改。

image.png

数据库字段说明

{
    "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。由于两个字段是用来受权用的,就是开发环境/测试环境/生产环境,这两个字段都是同样的。由于是单一微信公众号受权多微信号的。



扫码推送消息场景

流程图

扫码场景在当前生活当中已经很常见了。

image.png

二维码相关文档

developers.weixin.qq.com/doc/offiacc…

微信推送消息须要启用微信公众号服务器。须要进行相关配置才能够。
image.png

后台接口书写

假设上方的接口为/testCallBack/${storeId}。会有两个同名接口,一个是get/post。

  • 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() {
    	****
        ****
        ****
    }

复制代码

和单微信号受权集成

这里的矛盾点是:假设咱们有二十家子公司,每家子公司都有本身的微信公众号,子公司经过二维码扫描能够进行引流,这里引流就是用户须要去关注子公司的微信公众号。可是关注子公司以后跳转的页面仍是经过总公司的微信公众号受权的。

  • 单微信号受权
  • 多微信号推送消息

单微信号受权多微信号推送消息.png

数据库字段说明

{
    "cityId":"872",
    "cityName":"***",
    "wx_token":"token",
    "wx_app_id":"xxxxxxxx",
    "wx_secret":"yyyyyyyy",
    "sub_app_id":"xxxxxxxx",
    "sub_secret":"yyyyyyyy",
    "deletedStatus":"0"
}
复制代码
  • "wx_token": 进行二维码推送使用,指的是上面多微信号推送子公司微信公众号的token
  • "wx_app_id": 进行二维码推送使用,指的是上面多微信号推送子公司微信公众号的appId
  • "wx_secret": 进行二维码推送使用,指的是上面多微信号推送子公司微信公众号的secret
  • "sub_app_id": 进行受权使用,指的是上面单微信受权总公司微信公众号的appId
  • "sub_secret": 进行受权使用,指的是上面单微信受权总公司微信公众号的secret


数据库字段总结:

  • sub字段在不一样的环境下是不一样的,同一个环境下,全部子公司的配置都是同样的。
  • wx字段在不一样的环境下是同样的,在同一个环境下,全部子公司的配置是不同的。
相关文章
相关标签/搜索