最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)企業(yè)微信回調(diào)配置的詳細(xì)步驟與測試

 更新時間:2023年09月21日 09:07:27   作者:Xi-Yuan  
這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)企業(yè)微信回調(diào)配置的詳細(xì)步驟與測試,企業(yè)微信回調(diào)是指企業(yè)微信通過HTTP?POST請求將業(yè)務(wù)數(shù)據(jù)回調(diào)到指定的URL上,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下

在使用前閱讀官方文檔:回調(diào)配置文檔

一、配置回調(diào)服務(wù)

一、在企業(yè)微信管理后臺配置三個配置

分別是:URLTokenEncodingAESKey。打開企業(yè)微信后臺-->管理工具-->通訊錄同步配置回調(diào)地址如下所示

1.1、URL為回調(diào)服務(wù)地址,由開發(fā)者搭建(直白點就是后臺回調(diào)域名地址,你給企業(yè)微信的URL,例如http://127.0.0.1:8085/qiyewx/getCallBack)服務(wù)器如果是云服務(wù)要配置域名

1.2、Token用于計算簽名,由英文或數(shù)字組成且長度不超過32位的自定義字符串。(可隨機(jī)獲取,但要復(fù)制到本地代碼,后面會用到)

1.3、EncodingAESKey用于消息內(nèi)容加密,由英文或數(shù)字組成且長度為43位的自定義字符串。(可隨機(jī)獲取,但要復(fù)制到本地代碼,后面會用到)

二、在代碼中配置Token和EncodingAESKey

# 企業(yè)微信配置
qiyewx:
  url: 
  corpid: 
  corpsecret: 
  #回調(diào)配置
  token: XXXXXX
  encodingAESKey: XXXXXX

 三、官方加解密庫下載

1、點擊如下鏈接自行下載,下載后結(jié)構(gòu)如下圖所示:

有json版本和xml版本 

json版本:

xml版本:

加解密庫下載與返回碼 - 接口文檔 - 企業(yè)微信開發(fā)者中心

2、將下載的示例代碼復(fù)制到你的項目代碼中

二、編碼實現(xiàn)

一、引入相關(guān)項目依賴

<!--企業(yè)微信相關(guān)-->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>
        <!-- 企業(yè)微信json格式包-->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20200518</version>
        </dependency>
<!-- dom4j解析xml -->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

二、支持Http Get請求驗證URL有效性與支持Http Post請求接收業(yè)務(wù)數(shù)據(jù)

切記:將將下載的示例代碼復(fù)制到你的項目代碼中,下面的代碼中有使用。

1、coontroller

/**
     * 企業(yè)微信回調(diào)
     * 3.1 支持Http Get請求驗證URL有效性
     * 3.2 支持Http Post請求接收業(yè)務(wù)數(shù)據(jù)
     *
     * @return
     */
    @RequestMapping(value = "/getCallBack", method = {RequestMethod.GET, RequestMethod.POST})
    public Object CompanyWeChatChangeNotice(HttpServletRequest request, @RequestBody(required = false) String body) {
       Map<String, String[]> parameterMap = request.getParameterMap();
        String jsonString = JSONObject.toJSONString(parameterMap);
        log.info("企業(yè)微信回調(diào)參數(shù):{},  解析參數(shù):{}", jsonString, body);
        if (body == null) {
            Object result = qyWxService.verificationUrl(request);
            return result;
        }
        Map<String, String> resultMap = qyWxService.getRequestParameter(request, body);
        System.err.println(resultMap);
        return "success";
    }

2、驗證URL有效性 

 /**
     * 驗證回調(diào)URL
     *
     * @param request
     * @return
     */
    public Object verificationUrl(HttpServletRequest request) {
        log.info("=========驗證URL有效性開始=========");
        String sEchoStr; //需要返回的明文
        try {
            WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(qyWxConfig.getToken(), qyWxConfig.getEncodingAESKey(), qyWxConfig.getCorpid());
            String msgSignature = request.getParameter("msg_signature");
            String timeStamp = request.getParameter("timestamp");
            String nonce = request.getParameter("nonce");
            String echostr = request.getParameter("echostr");
            log.info("企業(yè)微信加密簽名: {},時間戳: {},隨機(jī)數(shù): {},加密的字符串: {}", msgSignature, timeStamp, nonce, echostr);
            sEchoStr = wxcpt.VerifyURL(msgSignature,
                    timeStamp,
                    nonce,
                    echostr);
            log.info("給企業(yè)微信返回的明文,{}", sEchoStr);
            log.info("=========驗證URL有效性結(jié)束=========");
            return sEchoStr;
        } catch (AesException e) {
            log.error("驗證URL失敗,錯誤原因請查看異常:{}", e.getCode());
            throw new AesException(e.getCode());
        }
    }

3、回調(diào)參數(shù)解析

 /**
     * 企業(yè)微信回調(diào)參數(shù)解析
     *
     * @param request
     * @param body
     * @return
     */
    public Map<String, String> getRequestParameter(HttpServletRequest request, String body) {
        log.info("=========參數(shù)解析開始=========");
        try {
            WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(qyWxConfig.getToken(), qyWxConfig.getEncodingAESKey(), qyWxConfig.getCorpid());
            String msgSignature = request.getParameter("msg_signature");
            String timeStamp = request.getParameter("timestamp");
            String nonce = request.getParameter("nonce");
            log.info("企業(yè)微信加密簽名: {},時間戳: {},隨機(jī)數(shù): {}", msgSignature, timeStamp, nonce);
            String sMsg = wxcpt.DecryptMsg(msgSignature, timeStamp, nonce, body);
            Map<String, String> resultMap = new HashMap<String, String>(16);
            resultMap = ConstantUtil.parseXmlToMap(sMsg, resultMap);
            log.info("decrypt密文轉(zhuǎn)為map結(jié)果為{}", resultMap);
            log.info("=========參數(shù)解析結(jié)束=========");
            return resultMap;
        } catch (AesException e) {
            log.error("密文參數(shù)解析失敗,錯誤原因請查看異常:{}", e.getMessage());
            throw new AesException(e.getCode());
        }
    }

4、XML轉(zhuǎn)map工具

package com.ruoyi.system.qiwechat.utils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.StringReader;
import java.util.Iterator;
import java.util.Map;
/**
 * @author XiYuan
 * @date 2023/2/20
 * @Description: XML轉(zhuǎn)換Map
 */
public class ConstantUtil {
    /**
     * 將xml轉(zhuǎn)換為Map。 支持xml標(biāo)簽多層嵌套,并以"."分隔多級標(biāo)簽(不包括根節(jié)點)。 不支持XML標(biāo)簽重復(fù)時的情況
     *
     * @param xml
     * @param map
     * @return
     */
    public static Map<String, String> parseXmlToMap(String xml, Map<String, String> map) {
        try {
            SAXReader reader = new SAXReader();
            Document doc = reader.read(new StringReader(xml));
            Element root = doc.getRootElement();
            String path = "";
            if (map.containsKey(root.getName().trim())) {
                path = map.get(root.getName().trim());
                map.remove(root.getName().trim());
            }
            for (Iterator i = root.elementIterator(); i.hasNext();) {
                Element element = (Element) i.next();
                if (element.isTextOnly()) {
                    if (path.length() > 0) {
                        map.put(path + element.getName().trim(), element.getTextTrim());
                    } else {
                        map.put(element.getName().trim(), element.getTextTrim());
                    }
                } else {
                    map.put(element.getName().trim(), path+ element.getName().trim() + ".");
                    parseXmlToMap(element.asXML(), map);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
}
 

5、配置文件config

package com.ruoyi.common.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
public class QyWxConfig {
    /**
     *  請求路徑
     */
    @Value("${qiyewx.url}")
    private String url;
    /**
     * 企業(yè)微信ID
     */
    @Value("${qiyewx.corpid}")
    private String corpid;
    /**
     * 企業(yè)應(yīng)用的憑證密鑰
     */
    @Value("${qiyewx.corpsecret}")
    private String corpsecret;
    /**
     * 開發(fā)者設(shè)置的token
     */
    @Value("${qiyewx.token}")
    private String token;
    /**
     * 開發(fā)者設(shè)置的EncodingAESKey
     */
    @Value("${qiyewx.encodingAESKey}")
    private String encodingAESKey;
}

三、測試示例

一、測試3.1 支持Http Get請求驗證URL有效性

企業(yè)微信開發(fā)者中心測試工具  

所要參數(shù)依次寫入,測試

二、測試3.2支持Http Post請求接收業(yè)務(wù)數(shù)據(jù) 

1、演示關(guān)于接收客戶變更事件回調(diào)通知,企業(yè)微信開發(fā)者中心 回調(diào)

2、通俗點就是手機(jī)企業(yè)微信添加客戶將數(shù)據(jù)回調(diào)到本地,按照文檔說明講相關(guān)參數(shù)設(shè)置好。如圖所示:

 3、對返回結(jié)果按照自己需求進(jìn)行處理

如下紅框所示: 

 備注:要根據(jù)事件的類型Event判斷回調(diào)的事件,在回調(diào)事件中根據(jù)ChangeType判斷事件性質(zhì)

4、查看日志

總結(jié)

到此這篇關(guān)于Java實現(xiàn)企業(yè)微信回調(diào)配置的詳細(xì)步驟與測試的文章就介紹到這了,更多相關(guān)Java企業(yè)微信回調(diào)配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用@CacheEvict清除指定下所有緩存

    使用@CacheEvict清除指定下所有緩存

    這篇文章主要介紹了使用@CacheEvict清除指定下所有緩存,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java查找文件夾下最新生成的文件的方法

    java查找文件夾下最新生成的文件的方法

    在本篇文章中我們給大家分享了關(guān)于java怎么查找文件夾下最新生成的文件的相關(guān)方法和知識點,有需要的朋友們參考下。
    2019-07-07
  • Java中Collections.sort()排序方法舉例詳解

    Java中Collections.sort()排序方法舉例詳解

    很多時候都需要對一些數(shù)據(jù)進(jìn)行排序的操作,這篇文章主要給大家介紹了關(guān)于Java中Collections.sort()方法舉例詳解的相關(guān)資料,使用Collections.sort()可以使用其sort()方法來對List、Set等集合進(jìn)行排序,需要的朋友可以參考下
    2024-02-02
  • Java logback日志的簡單使用

    Java logback日志的簡單使用

    這篇文章主要介紹了Java logback日志的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Java class文件格式之屬性詳解_動力節(jié)點java學(xué)院整理

    Java class文件格式之屬性詳解_動力節(jié)點java學(xué)院整理

    這篇文章主要介紹了Java class文件格式之屬性詳解,需要的朋友可以參考下
    2017-06-06
  • 簡單了解Java中的可重入鎖

    簡單了解Java中的可重入鎖

    這篇文章主要介紹了簡單了解Java中的可重入鎖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • SpringBoot為什么要禁止循環(huán)依賴

    SpringBoot為什么要禁止循環(huán)依賴

    Spring?Boot禁止循環(huán)依賴主要因其會增加代碼復(fù)雜性、可能導(dǎo)致內(nèi)存泄漏和啟動失敗,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-05-05
  • Java兩整數(shù)相除向上取整的方式詳解(Math.ceil())

    Java兩整數(shù)相除向上取整的方式詳解(Math.ceil())

    在調(diào)外部接口獲取列表數(shù)據(jù)時,需要判斷是否已經(jīng)取完了所有的值,因此需要用到向上取整,下面這篇文章主要給大家介紹了關(guān)于Java兩整數(shù)相除向上取整的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Spring Boot集成Ehcache緩存解決方式

    Spring Boot集成Ehcache緩存解決方式

    在本篇文章里小編給大家整理的是關(guān)于Spring Boot集成Ehcache緩存解決方式,需要的朋友們可以學(xué)習(xí)下。
    2019-12-12
  • Java使用數(shù)組實現(xiàn)ArrayList的動態(tài)擴(kuò)容的方法

    Java使用數(shù)組實現(xiàn)ArrayList的動態(tài)擴(kuò)容的方法

    這篇文章主要介紹了Java使用數(shù)組實現(xiàn)ArrayList的動態(tài)擴(kuò)容的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評論

枞阳县| 万年县| 怀宁县| 团风县| 灵武市| 宜兰市| 安新县| 博乐市| 文昌市| 如东县| 临泽县| 桃源县| 曲阳县| 阆中市| 平江县| 南和县| 昔阳县| 南川市| 含山县| 晋宁县| 吉安县| 定结县| 桦南县| 澄迈县| 晋中市| 青川县| 湖州市| 武汉市| 乳源| 河南省| 牙克石市| 达孜县| 盐城市| 蒙自县| 吉林市| 开鲁县| 揭阳市| 清镇市| 湄潭县| 芦山县| 富宁县|