微信公衆號:單微信號受權多微信號 & 掃碼推送

這是我參與更文挑戰的第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字段在不一樣的環境下是同樣的,在同一個環境下,全部子公司的配置是不同的。
相關文章
相關標籤/搜索