中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

微信公眾平臺開發(fā)之token驗證和消息處理的示例分析

這篇文章主要介紹了微信公眾平臺開發(fā)之token驗證和消息處理的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)公司主營鐵東網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā),鐵東h5小程序制作搭建,鐵東網(wǎng)站營銷推廣歡迎鐵東等地區(qū)企業(yè)咨詢

/**
 *
 * @Description: 微信消息處理以及用戶分組
 */
public class WeiXinMessageAction extends BaseAction{
    /**
     *
     */
    private static final long serialVersionUID = 1L;
       
    private IFeWeiXinMessageService weiXinExternalService;
       
    private String wxNo;
       
    public String responseMessgaeInfo(){
        Boolean isGet = request.getMethod().equalsIgnoreCase("GET");
        if(isGet){
            validateSignature();
        }else{
            saveWxMessage();
        }
        return null;
    }
    /**
     *
     * @Description: 接收post保存接受的消息 只保存MsgType類型為text信息
     * @param   
     * @return void
     * @throws
     */
    private void saveWxMessage(){
        InputStream inputStream;
        try {
            request.setCharacterEncoding("UTF-8");
            Document doc = null;
            SAXReader reader = new SAXReader();
            inputStream = request.getInputStream();
            doc = reader.read(inputStream);
            Element root = doc.getRootElement();
            String toUserName = root.element("ToUserName").getTextTrim();
            String fromUserName = root.element("FromUserName").getTextTrim();
            String content = root.element("Content").getTextTrim();
            String msgType=root.element("MsgType").getTextTrim();
            String msgId=root.element("MsgId").getTextTrim();
            String createTime=root.element("CreateTime").getTextTrim();
            //只保存文本消息
            //時間
            System.out.println("接收消息內(nèi)容:"+content+"-----------------msgType:"+msgType);
            if(WeiXinMsgType.TEXT.type.equals(msgType)){
                weiXinExternalService.addWxMessage(toUserName, fromUserName, content, msgType, msgId, formatTime(createTime));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
       
    /**
     *
     * @Description: 傳入的CreateTime轉(zhuǎn)換成long類型
     * @param @param createTime
     * @param @return  
     * @return Date
     * @throws
     */
    private   Date formatTime(String createTime) {
        long msgCreateTime = Long.parseLong(createTime) * 1000L;
        return new Date(msgCreateTime);
    }
       
    /**
     *
     * @Description: 校驗微信簽名
     * @param   
     * @return void
     * @throws
     */
    private void validateSignature(){
        PrintWriter out = null;
        try {
            String signature = request.getParameter("signature");
            String timestamp = request.getParameter("timestamp");
            String nonce = request.getParameter("nonce");
            out = response.getWriter();
            if (checkSignature(signature, timestamp, nonce)) {
                out.print(request.getParameter("echostr"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            out.close();
            out = null;
        }
    }
       
    /**
     *
     * @Description: 判斷token是否合法
     * @param @param signature
     * @param @param timestamp
     * @param @param nonce
     * @param @return  
     * @return boolean
     * @throws
     */
    private  boolean checkSignature(String signature, String timestamp, String nonce) {
            //根據(jù)微信賬號獲取token并校驗
            Map<String,Object> map=new HashMap<String,Object>();
            map.put("wxNo", wxNo);
            WeiXinMasterConfig  masterConfig= weiXinExternalService.selectWeiXinMasterConfig(map);
            if(masterConfig==null){
                return false;
            }
            String[] arr = new String[] {masterConfig.getWxToken(), timestamp, nonce };
            Arrays.sort(arr);
            StringBuilder content = new StringBuilder();
            for (int i = 0; i < arr.length; i++) {
                content.append(arr[i]);
            }
            MessageDigest md = null;
            String tmpStr = null;
            try {
                md = MessageDigest.getInstance("SHA-1");
                byte[] digest = md.digest(content.toString().getBytes());
                tmpStr = byteToStr(digest);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            content = null;
            return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
    }
    // 將字節(jié)轉(zhuǎn)換為十六進制字符串
    private static String byteToHexStr(byte ib) {
        char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
                'B', 'C', 'D', 'E', 'F' };
        char[] ob = new char[2];
        ob[0] = Digit[(ib >>> 4) & 0X0F];
        ob[1] = Digit[ib & 0X0F];
        String s = new String(ob);
        return s;
    }
    // 將字節(jié)數(shù)組轉(zhuǎn)換為十六進制字符串
    private static String byteToStr(byte[] bytearray) {
        String strDigest = "";
        for (int i = 0; i < bytearray.length; i++) {
            strDigest += byteToHexStr(bytearray[i]);
        }
        return strDigest;
    }

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“微信公眾平臺開發(fā)之token驗證和消息處理的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

當(dāng)前標(biāo)題:微信公眾平臺開發(fā)之token驗證和消息處理的示例分析
本文網(wǎng)址:http://www.rwnh.cn/article40/jscdeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站維護營銷型網(wǎng)站建設(shè)、商城網(wǎng)站、定制開發(fā)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
德江县| 五大连池市| 贵溪市| 自贡市| 喀喇| 洪洞县| 监利县| 旌德县| 苍溪县| 竹溪县| 万山特区| 临泽县| 安顺市| 汝城县| 保定市| 达拉特旗| 塔城市| 郓城县| 五峰| 嘉定区| 萨迦县| 陆丰市| 德化县| 扶余县| 石楼县| 毕节市| 甘南县| 静海县| 调兵山市| 台州市| 鲁山县| 丰镇市| 容城县| 沙湾县| 德庆县| 依安县| 黄陵县| 普洱| 万全县| 遵义市| 茂名市|