微信公衆號java後端開發記錄(一):公衆號後臺設置

·微信公衆號後端開發文檔:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

·開始一些必須設置解讀:

登陸公衆號後臺,進行開發者設置===》https://mp.weixin.qq.com/

1.網頁授權域名設置

具體設置

2.ip白名單配置(白名單來源的ip纔可獲得access_token)

access_token是公衆號的全局唯一接口調用憑據,公衆號調用各接口時都需使用access_token。開發者需要進行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前爲2個小時,需定時刷新,重複獲取將導致上次獲取的access_token失效。

 

3.服務器配置(可做自定義回覆、跳轉)

·後端接入指南原理:

開發者提交信息後,微信服務器將發送GET請求到填寫的服務器地址URL上,GET請求攜帶參數如下表所示:

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


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

1)將token、timestamp、nonce三個參數進行字典序排序

2)將三個參數字符串拼接成一個字符串進行sha1加密

3)開發者獲得加密後的字符串可與signature對比,標識該請求來源於微信

意思是說:對微信服務器發過來消息忠token、timestamp、nonce三個參數進行加密處理,然後加密得到的字符串與signature微信加密簽名相比較,如果相等則返回echostr隨機字符串。

·下面是後端提供回調接口:

@Slf4j
@Api(tags = {"微信回調API"})
@Controller
@RequestMapping("/plutoadmin/wechat")
public class WechatController {

    //公衆號授權驗籤
    @ApiOperation(value = "公衆號授權驗籤", notes = "公衆號授權驗籤")
    @RequestMapping(value = "/getWechatPublicAuthorization", method = RequestMethod.GET)
    @ResponseBody
    public String getWechatPublicAuthorizationHttpServletRequest(String signature, String timestamp, String nonce, String echostr) {
        if (WxPublicCheckSignature.checkSignature(signature, timestamp, nonce)) {
            // 如果校驗成功,將得到的隨機字符串原路返回
            log.info("驗簽字符串:{}", echostr);
            return echostr;
        }
        return "驗籤錯誤";
    }
}

驗籤工具類(網上很多此類代碼):

/**
 * @author hanyy
 * @Description: 公衆號後臺驗籤
 * @date 2019/8/21 18:18
 */
public class WxPublicCheckSignature {
    public static final String tooken = "Alan"; //開發者自行定義Token

    public static boolean checkSignature(String signature, String timestamp, String nonce) {

        //1.定義數組存放tooken,timestamp,nonce
        String[] arr = {tooken, timestamp, nonce};
        //2.對數組進行排序
        Arrays.sort(arr);
        //3.生成字符串
        StringBuffer sb = new StringBuffer();
        for (String s : arr) {
            sb.append(s);
        }

        //4.sha1加密,網上均有現成代碼
        String temp = getSha(sb.toString());
        //5.將加密後的字符串,與微信傳來的加密簽名比較,返回結果
        return temp.equals(signature);
    }

    public static String getSha(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) {
            // TODO: handle exception
            return null;
        }
    }
}

➡接口編寫完成後,將驗籤接口填入url,注意token要填寫後端驗籤工具類中定義的token,否則無法驗簽完成

➡點擊提交,若正常提交,則回調驗籤成功,服務器配置成功~

➡常見錯誤:token驗證失敗 這就是微信回調驗籤失敗,檢查一下後端代碼。

➡注意:點擊右側啓用後會提示自定義菜單會失效,所以目前暫未啓用。

 

4.推送消息模板設置

根據業務需要去模板庫搜索,消息模板格式無法自定義,只可以改模板內容

申請好模板,把模板id配置到後端配置文件裏,防止模板變更,一個模板對應一個唯一模板id。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章