這是我參與更文挑戰的第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"
}
複製代碼