亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

java版微信公眾號開發(fā)(二):配置token

URLOS / 868人閱讀

摘要:掃碼登陸微信公眾號平臺,此時默認的是編輯模式,需要修改為開發(fā)者模式。若確認此次請求來自微信服務(wù)器,請原樣返回參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。

掃碼登陸微信公眾號平臺,此時默認的是編輯模式,需要修改為開發(fā)者模式。

找到開發(fā)--->基本配置,

設(shè)置AppId以及APPSecret,并填寫IP白名單(在線ip查詢:http://www.ip138.com/)。


下面進行服務(wù)器配置,這里需要進行token的驗證,會根據(jù)你填寫的url進行token的匹配驗證,官網(wǎng)描述的很清楚:https://mp.weixin.qq.com/wiki...

開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請求到填寫的服務(wù)器地址URL上,GET請求攜帶參數(shù)如下表所示:

開發(fā)者通過檢驗signature對請求進行校驗(下面有校驗方式)。若確認此次GET請求來自微信服務(wù)器,請原樣返回echostr參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。加密/校驗流程如下:

1)將token、timestamp、nonce三個參數(shù)進行字典序排序
2)將三個參數(shù)字符串拼接成一個字符串進行sha1加密
3)開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信

官網(wǎng)也給出了校驗實例,但是是php的,需要我們轉(zhuǎn)換成java。具體步驟如下:


創(chuàng)建springboot項目,添加依賴


    
        dom4j
        dom4j
        1.6.1
    

    
        com.thoughtworks.xstream
        xstream
        1.4.9
    

創(chuàng)建WechatIndexController類,實現(xiàn)一個get請求方法:

@RestController
@RequestMapping("/index")
public class WechatIndexController {
    private static final Logger LOGGER = LoggerFactory.getLogger(WechatIndexController.class);

    @RequestMapping(method = RequestMethod.GET)
    public void get(HttpServletRequest request, HttpServletResponse response) {
        // 微信加密簽名,signature結(jié)合了開發(fā)者填寫的token參數(shù)和請求中的timestamp參數(shù)、nonce參數(shù)。
        String signature = request.getParameter("signature");
        // 時間戳
        String timestamp = request.getParameter("timestamp");
        // 隨機數(shù)
        String nonce = request.getParameter("nonce");
        // 隨機字符串
        String echostr = request.getParameter("echostr");

        PrintWriter out = null;
        try {
            out = response.getWriter();
            // 通過檢驗signature對請求進行校驗,若校驗成功則原樣返回echostr,否則接入失敗
            if (SignUtil.checkSignature(signature, timestamp, nonce)) {
                out.print(echostr);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            out.close();
            out = null;
        }
    }

}

SignUtil類:

public class SignUtil {
    //token可以自己進行定義,必須為英文或者是數(shù)字,長度為3-32字符,這個token要跟服務(wù)器配置中的token一致
    private static String token = "woshiyigetokenaaa123qqq";

    /**
     * 校驗簽名
     * @param signature 簽名
     * @param timestamp 時間戳
     * @param nonce 隨機數(shù)
     * @return 布爾值
     */
    public static boolean checkSignature(String signature,String timestamp,String nonce){
        String checktext = null;
        if (null != signature) {
            //對ToKen,timestamp,nonce 按字典排序
            String[] paramArr = new String[]{token,timestamp,nonce};
            Arrays.sort(paramArr);
            //將排序后的結(jié)果拼成一個字符串
            String content = paramArr[0].concat(paramArr[1]).concat(paramArr[2]);

            try {
                MessageDigest md = MessageDigest.getInstance("SHA-1");
                //對接后的字符串進行sha1加密
                byte[] digest = md.digest(content.toString().getBytes());
                checktext = byteToStr(digest);
            } catch (NoSuchAlgorithmException e){
                e.printStackTrace();
            }
        }
        //將加密后的字符串與signature進行對比
        return checktext !=null ? checktext.equals(signature.toUpperCase()) : false;
    }

    /**
     * 將字節(jié)數(shù)組轉(zhuǎn)化我16進制字符串
     * @param byteArrays 字符數(shù)組
     * @return 字符串
     */
    private static String byteToStr(byte[] byteArrays){
        String str = "";
        for (int i = 0; i < byteArrays.length; i++) {
            str += byteToHexStr(byteArrays[i]);
        }
        return str;
    }

    /**
     *  將字節(jié)轉(zhuǎn)化為十六進制字符串
     * @param myByte 字節(jié)
     * @return 字符串
     */
    private static String byteToHexStr(byte myByte) {
        char[] Digit = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
        char[] tampArr = new char[2];
        tampArr[0] = Digit[(myByte >>> 4) & 0X0F];
        tampArr[1] = Digit[myByte & 0X0F];
        String str = new String(tampArr);
        return str;
    }
}

先啟動ngrok,再啟動tomcat項目,將外網(wǎng)地址/index填入對應(yīng)url,token按照剛才定義的書寫,加密秘鑰隨機生成即可:

提交成功?。?/p>

當然,如果有自己的外網(wǎng)服務(wù)器,只需要將項目打包發(fā)布到外網(wǎng),url和token根據(jù)自己定義的來書寫,也沒有什么問題。注意,一定要保證切換到開發(fā)者模式。


服務(wù)器配置成功之后,就可以進行后續(xù)開發(fā)啦,下面會介紹如何訂閱回復(fù)圖文消息。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/35959.html

相關(guān)文章

  • java微信公眾開發(fā)):配置token

    摘要:掃碼登陸微信公眾號平臺,此時默認的是編輯模式,需要修改為開發(fā)者模式。若確認此次請求來自微信服務(wù)器,請原樣返回參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。 掃碼登陸微信公眾號平臺,此時默認的是編輯模式,需要修改為開發(fā)者模式。 找到開發(fā)--->基本配置, showImg(https://segmentfault.com/img/bVbdTk2?w=323&h=786); showI...

    1fe1se 評論0 收藏0
  • java微信公眾開發(fā)(三):自動回復(fù)功能實現(xiàn)

    摘要:微信公眾平臺服務(wù)器配置通過后,就能進行下面的開發(fā)啦首先可以查看官方的說明文檔普通消息的類型分為種文本消息圖片消息語音消息視頻消息小視頻消息地理位置消息鏈接消息下面介紹實現(xiàn)文本的自動回復(fù)文本消息的結(jié)構(gòu)是參數(shù)包含根據(jù)開發(fā)文檔直接上手實體類 微信公眾平臺服務(wù)器配置通過后,就能進行下面的開發(fā)啦~~首先可以查看官方的說明文檔:https://mp.weixin.qq.com/wiki... sh...

    hlcfan 評論0 收藏0
  • java微信公眾開發(fā)(三):自動回復(fù)功能實現(xiàn)

    摘要:微信公眾平臺服務(wù)器配置通過后,就能進行下面的開發(fā)啦首先可以查看官方的說明文檔普通消息的類型分為種文本消息圖片消息語音消息視頻消息小視頻消息地理位置消息鏈接消息下面介紹實現(xiàn)文本的自動回復(fù)文本消息的結(jié)構(gòu)是參數(shù)包含根據(jù)開發(fā)文檔直接上手實體類 微信公眾平臺服務(wù)器配置通過后,就能進行下面的開發(fā)啦~~首先可以查看官方的說明文檔:https://mp.weixin.qq.com/wiki... sh...

    Cciradih 評論0 收藏0
  • java微信公眾開發(fā)(四):自定義菜單的實現(xiàn)

    摘要:想要實現(xiàn)自定義菜單的功能,需要有已認證訂閱號和已認證服務(wù)號。測試時可以嘗試取消關(guān)注公眾賬號后再次關(guān)注,則可以看到創(chuàng)建后的效果。 想要實現(xiàn)自定義菜單的功能,需要有已認證訂閱號和已認證服務(wù)號。對于測試開發(fā)來說,可以直接申請一個測試賬號:http://mp.weixin.qq.com/debug... 同樣需要token的驗證,前期接口已經(jīng)定義好了,直接拿來就可以 showImg(https...

    mo0n1andin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<