連小白都能看懂的微信入門開發之環境搭建

微信開發之環境搭建

接入指南

接入概述

接入微信公衆平臺開發,開發者須要按照以下步驟完成:java

一、填寫服務器配置git

二、驗證服務器地址的有效性安全

三、依據接口文檔實現業務邏輯服務器

下面詳細介紹這3個步驟。微信

流程圖
圖片描述微信開發

第一步:填寫服務器配置

登陸微信公衆平臺官網後,在公衆平臺官網的開發-基本設置頁面勾選協議成爲開發者,點擊「修改配置」按鈕,填寫服務器地址(URL)、Token和EncodingAESKey,其中URL是開發者用來接收微信消息和事件的接口URL。Token可由開發者能夠任意填寫,用做生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)。EncodingAESKey由開發者手動填寫或隨機生成,將用做消息體加解密密鑰。 app

在這裏插入圖片描述

消息解密類型選擇推薦兼容,方便調試和開發。微信公衆平臺

若是選擇安全模式,返回的xml是進行加密,解密方式參考 文檔工具

若是沒有域名 推薦使用內網穿透工具 小花生或者 ngrok 等微信支付

詳細 請看 ngrok 教程: https://blog.csdn.net/weixin_...

官網 : https://www.ngrok.cc

第二步:驗證消息的確來自微信服務器

開發者經過檢驗signature對請求進行校驗(下面有校驗方式)。
若確認這次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成爲開發者成功,不然接入失敗。

signature         微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。
           timestamp    時間戳
           nonce        隨機數
           echostr        隨機字符串

代碼以下:

@GetMapping("getToken")
    @ResponseBody
    public String getToken(HttpServletRequest request) {

        String signature = request.getParameter("signature");
        String timestamp= request.getParameter("timestamp");
        String nonce= request.getParameter("nonce");
        String echostr = request.getParameter("echostr");

        logger.info(signature);
        logger.info(timestamp);
        logger.info(nonce);
        logger.info(echostr);
        //校驗請求
        boolean check = RequestParamType.check(timestamp, nonce ,signature);
        if (check) {
            logger.info("接入成功。。");
            return echostr;
        }else{
            logger.info("接入失敗。。");
            return null;
        }
    }

check工具類:

//token
    private final static String token = "test";

    //獲取token驗證
    public static  boolean check( String timestamp, String nonce,String signature){
        /**
         *
         1)將token、timestamp、nonce三個參數進行字典序排序
         2)將三個參數字符串拼接成一個字符串進行sha1加密
         3)開發者得到加密後的字符串可與signature對比,標識該請求來源於微信
         */
        logger.info("token = "+token);
        String [] strings = new String[] {token,timestamp,nonce};
        Arrays.sort(strings);
        String sha1Str = strings[0] + strings[1] + strings[2];
        //sha1加密
        String string2Sha1 = Sha1Util.getSha1(sha1Str);
        logger.info("加密前:" + signature);
        logger.info("加密後:"+string2Sha1);
        //signature 與生成的signature 對比
        if (string2Sha1 != null && string2Sha1.equalsIgnoreCase(signature)){
            return  true;
        }
        return  false;
    }

sha1加密 工具類 :

/**
     * sha1加密
     * @param str 返回加密字符串
     * @return
     */
    public static String getSha1(String str) {
        if (str == null || str.length() == 0) {
            return null;
        }
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        try {
            MessageDigest mdTemp = MessageDigest.getInstance("sha1");
            mdTemp.update(str.getBytes("UTF-8"));
            byte[] md = mdTemp.digest();
            int j = md.length;
            char buf[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
                buf[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(buf);
        } catch (Exception e) {
            logger.error(" sha1 加密異常!" + e);
            e.getStackTrace();
            return null;
        }

    }

第三步:依據接口文檔實現業務邏輯

驗證URL有效性成功後即接入生效,成爲開發者。你能夠在公衆平臺網站中申請微信認證,認證成功後,將得到更多接口權限,知足更多業務需求。

成爲開發者後,用戶每次向公衆號發送消息、或者產生自定義菜單、或產生微信支付訂單等狀況時,開發者填寫的服務器配置URL將獲得微信服務器推送過來的消息和事件,開發者能夠依據自身業務邏輯進行響應,如回覆消息。

公衆號調用各接口時,通常會得到正確的結果,具體結果可見對應接口的說明。返回錯誤時,可根據返回碼來查詢錯誤緣由。全局返回碼說明

用戶向公衆號發送消息時,公衆號方收到的消息發送者是一個OpenID,是使用用戶微信號加密後的結果,每一個用戶對每一個公衆號有一個惟一的OpenID。

此外,因爲開發者常常有需在多個平臺(移動應用、網站、公衆賬號)之間共通用戶賬號,統一賬號體系的需求,微信開放平臺(open.weixin.qq.com)提供了UnionID機制。開發者可經過OpenID來獲取用戶基本信息,而若是開發者擁有多個應用(移動應用、網站應用和公衆賬號,公衆賬號只有在被綁定到微信開放平臺賬號下後,纔會獲取UnionID),可經過獲取用戶基本信息中的UnionID來區分用戶的惟一性,由於只要是同一個微信開放平臺賬號下的移動應用、網站應用和公衆賬號,用戶的UnionID是惟一的。換句話說,同一用戶,對同一個微信開放平臺賬號下的不一樣應用,UnionID是相同的。詳情請在微信開放平臺的資源中心-移動應用開發-微信登陸-受權關係接口調用指引-獲取用戶我的信息(UnionID機制)中查看。

url接入成功後,就能夠進行微信開發了,用戶經過微信發送消息時,微信服務器會將此消息簡單的簡單包裝成xml數據包格式,而後推送到你本身的服務器上(也就是你填入的url 控制器中),經過這個url獲取到用戶的消息,而後處理相應的業務邏輯!

一圖勝千言 流程圖以下:
圖片描述

另請注意,微信公衆號接口必須以http://或https://開頭,分別支持80端口和443端口。

關注我

clipboard.png

相關文章
相關標籤/搜索