欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

java微信公眾號開發(fā)之各種事件推送 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們在追求其視覺表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏壧峁┍憬莸闹С郑?

您當(dāng)前位置>首頁 » 新聞資訊 » 公眾號相關(guān) >

java微信公眾號開發(fā)之各種事件推送

發(fā)表時(shí)間:2020-11-5

發(fā)布人:葵宇科技

瀏覽次數(shù):52

1.配置微信公眾服務(wù)器

在這里插入圖片描述

2.提前下好公眾號SHA1算法生成安全簽名類

/**
 * SHA1 class
 *
 * 計(jì)算公眾平臺的消息簽名接口.
 */
public class SHA1 {

	/**
	 * 用SHA1算法生成安全簽名
	 * @param token 票據(jù)
	 * @param timestamp 時(shí)間戳
	 * @param nonce 隨機(jī)字符串
	 * @param encrypt 密文
	 * @return 安全簽名

	 */
	public static String getSHA1(String token, String timestamp, String nonce, String encrypt)
			  {
		try {
			String[] array = new String[] { token, timestamp, nonce, encrypt };
			StringBuffer sb = new StringBuffer();
			// 字符串排序
			Arrays.sort(array);
			for (int i = 0; i < 4; i++) {
				sb.append(array[i]);
			}
			String str = sb.toString();
			// SHA1簽名生成
			MessageDigest md = MessageDigest.getInstance("SHA-1");
			md.update(str.getBytes());
			byte[] digest = md.digest();

			StringBuffer hexstr = new StringBuffer();
			String shaHex = "";
			for (int i = 0; i < digest.length; i++) {
				shaHex = Integer.toHexString(digest[i] & 0xFF);
				if (shaHex.length() < 2) {
					hexstr.append(0);
				}
				hexstr.append(shaHex);
			}
			return hexstr.toString();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}






}

3.創(chuàng)建一個(gè)接口,就是配置公眾號服務(wù)的接口

 //微信公眾號驗(yàn)證
    @RequestMapping("openWx/gzhVerification")
    public String gzhVerification(HttpServletRequest request){
        log.info("微信公眾號驗(yàn)證");
        String signature=request.getParameter("signature");
        String timestamp=request.getParameter("timestamp");
        String nonce=request.getParameter("nonce");
        String echostr=request.getParameter("echostr");
        String token="token";//這里填基本配置中的token
        String jiami="";
        try {


            jiami= SHA1.getSHA1(token, timestamp, nonce,"");//這里是對三個(gè)參數(shù)進(jìn)行加密
          
        if(echostr!=null && jiami.equals(signature)){
            log.info("第一次申請驗(yàn)證成功");
            return  echostr;
        }
        //判斷是否是公眾號發(fā)來的請求
        if(jiami==null || !jiami.equals(signature)){

            log.info("錯(cuò)誤的請求");
            return null;
        }
          //----------------------事件推送
            Map<String, String> stringStringMap = parseXml(request);
        //---按鈕事件
          if("CLICK".equalsIgnoreCase(stringStringMap.get("Event"))){

              log.info("按鈕事件");
            //因?yàn)橹挥幸粋€(gè)按鈕所以不用判斷key了
              String fromUserName = toXML(stringStringMap.get("FromUserName"),stringStringMap.get("ToUserName"));
              log.info("fromUserName:"+fromUserName);
              //發(fā)送消息
              return  fromUserName;
              //關(guān)注公眾號數(shù)據(jù)
          }else if("subscribe".equalsIgnoreCase(stringStringMap.get("Event")) && stringStringMap.get("EventKey")==null  && stringStringMap.get("Ticket")==null){
              log.info("關(guān)注公眾號");
              customerWxGzhService._add(stringStringMap.get("FromUserName"),null);

              //取消關(guān)注
          }else if("unsubscribe".equalsIgnoreCase(stringStringMap.get("Event"))) {
              log.info("取消關(guān)注");

              customerWxGzhService._delete(stringStringMap.get("FromUserName"));

             //二維碼關(guān)注
          }else if("subscribe".equalsIgnoreCase(stringStringMap.get("Event")) && stringStringMap.get("EventKey")!=null  && stringStringMap.get("Ticket")!=null){

              log.info("二維碼關(guān)注");
              //獲取二維碼參數(shù)值
              String eventKey =stringStringMap.get("EventKey");
              eventKey= eventKey.substring(8);
              customerWxGzhService._add(stringStringMap.get("FromUserName"),eventKey);
          }

        } catch (Exception e) {
            // TODO Auto-generated catch block

            e.printStackTrace();
        }

        return  null;
    }


    /**
     * dom4j 解析 xml 轉(zhuǎn)換為 map
     * @param request
     * @return
     * @throws Exception
     */
    public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {
        // 將解析結(jié)果存儲在HashMap中
        Map<String, String> map = new HashMap<String, String>();
        // 從request中取得輸入流
        InputStream inputStream = request.getInputStream();
        // 讀取輸入流
        SAXReader reader = new SAXReader();
        Document document = reader.read(inputStream);
        // 得到xml根元素
        Element root = document.getRootElement();
        // 得到根元素的所有子節(jié)點(diǎn)
        List<Element> elementList = root.elements();

        // 遍歷所有子節(jié)點(diǎn)
        for (Element e : elementList)
            map.put(e.getName(), e.getText());

        // 釋放資源
        inputStream.close();
        inputStream = null;
        return map;
    }


    //發(fā)送聯(lián)系我們
    public String toXML(String toUserName,String fromUserName){
        StringBuilder sb = new StringBuilder();
        sb.append("<xml>");
        sb.append("<ToUserName><![CDATA["+toUserName+"]]></ToUserName>");
        sb.append("<FromUserName><![CDATA["+fromUserName+"]]></FromUserName>");
        sb.append("<CreateTime>"+System.currentTimeMillis()/1000+"</CreateTime>");
        sb.append("<MsgType><![CDATA[text]]></MsgType>");
        sb.append("<Content><![CDATA[您好]]></Content>");
        sb.append("</xml>");
        return sb.toString();
    }

公眾號事件的提示只有一個(gè)接口 就是不斷判斷Event參數(shù)來處理事件,

相關(guān)案例查看更多