公众服务号开启回调模式与企业号开始回调的区别
来源:互联网 发布:淘宝买airpods靠谱吗 编辑:程序博客网 时间:2024/06/08 10:56
我以前做过微信企业开发,后来去做了微信公众号开发,回调模式 应该是很简单的,可我 没认真看文档,以为与企业号一样,整整坑了我 1天时间 。
代码如下:
完整代码下载地址
http://note.youdao.com/yws/public/redirect/share?id=06bc08978584b66e3aba953375ecd912&type=false
package com.servlet;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Enumeration;import java.util.List;import java.util.logging.Logger;import com.qq.weixin.mp.aes.*;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.qq.weixin.mp.aes.WXBizMsgCrypt;public class Test extends HttpServlet {WXBizMsgCrypt wxcpt;private Logger log = Logger.getLogger(this.getClass().getName());public static String appid = "XXX";public static String sToken = "weixin";public static String sEncodingAESKey = "XXXwwwwwwwwwwwwwwwwwwwwwwww";public static void main(String[] args) throws Exception {//testForCheckMsgCrypt();testForCheckSignature();}public static void testForCheckSignature() throws Exception{String signature="7c1bb93774b9f5810e6f3d7bf0a5b730735581a9";String echostr="1467575823083721407";String timestamp="1465077934";String nonce="512769189";String csignature=CheckSignature(sToken, timestamp, nonce);System.out.println("csignature:"+csignature);System.out.println("csignature:"+csignature);}public static void testForCheckMsgCrypt() throws Exception{WXBizMsgCrypt wxcpt;wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, appid);testIllegalAesKey(sToken,sEncodingAESKey,appid);String signature="7c1bb93774b9f5810e6f3d7bf0a5b730735581a9";String echostr="1467575823083721407";String timestamp="1465077934";String nonce="512769189";System.out.println(echostr+":"+URLDecoder(echostr));String sEchoStr=wxcpt.verifyUrl(signature, timestamp, nonce, echostr);// 验证URL成功,将sEchoStr返回System.out.println("sEchoStr:"+sEchoStr);}/** * 确认请求来自微信服务器 * @throws IOException */public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{checkSignForService(request,response);}//服务号的校验public void checkSignForService(HttpServletRequest request, HttpServletResponse response) throws IOException{// 微信加密签名 String signature = request.getParameter("signature");// 随机字符串String echostr = request.getParameter("echostr");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");String csignature=CheckSignature(sToken, timestamp, nonce);PrintWriter out = response.getWriter(); if(csignature.equals(signature)){out.println(echostr);}out.close();}//企业号的校验public void checkSignForEnterprise(HttpServletRequest request, HttpServletResponse response) throws IOException{ response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); /////////////////////////////////////System.out.println("#############################");Enumeration enu=request.getParameterNames(); while(enu.hasMoreElements()){ String paraName=(String)enu.nextElement(); System.out.println(paraName+": "+URLDecoder(request.getParameter(paraName))); }System.out.println("#############################");/////////////////////////////////////// 微信加密签名 String signature = request.getParameter("signature");// 随机字符串String echostr = request.getParameter("echostr");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");String sEchoStr; //需要返回的明文PrintWriter out = response.getWriter(); try {wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, appid);testIllegalAesKey(sToken,sEncodingAESKey,appid);sEchoStr=wxcpt.verifyUrl(signature, timestamp, nonce, echostr);// 验证URL成功,将sEchoStr返回System.out.println("sEchoStr:"+sEchoStr);out.print(sEchoStr); } catch (Exception e1) {e1.printStackTrace();}out.print(signature);}/** * 处理微信服务器发来的消息 */public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Enumeration enu=request.getParameterNames(); while(enu.hasMoreElements()){ String paraName=(String)enu.nextElement(); System.out.println(paraName+": "+request.getParameter(paraName)); }}public static String URLDecoder(String para){String result=""; try { result=URLDecoder.decode(para,"utf-8");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} return result;}public static void testIllegalAesKey(String token,String sEncodingAESKey,String appId) {try {new WXBizMsgCrypt(token, sEncodingAESKey, appId);System.out.println("success!");} catch (Exception e) {e.printStackTrace();System.out.println("fail!");return;}}//自己写的签名方法public static String CheckSignature(String token,String timestamp,String nonce){List<String> params = new ArrayList<String>(); params.add(token); params.add(timestamp); params.add(nonce); // 1. 将token、timestamp、nonce三个参数进行字典序排序 Collections.sort(params, new Comparator<String>() { public int compare(String o1, String o2) { return o1.compareTo(o2); } }); // 2. 将三个参数字符串拼接成一个字符串进行sha1加密 String temp = SHA1.encode(params.get(0) + params.get(1) + params.get(2)); return temp;}}
0 0
- 公众服务号开启回调模式与企业号开始回调的区别
- 微信公众平台企业号开发—开启回调模式
- 微信公众平台 企业号与服务号、订阅号的区别
- 微信公众平台订阅号、服务号和企业号三者之间的区别与联系
- 微信公众平台订阅号,服务号和企业号三者之间的区别与联系
- 微信企业号开发之开启回调模式
- 微信企业号--回调模式开启php
- 微信企业号应用回调模式开启
- 微信企业号开发开启回调模式
- 回调模式开启--微信企业号--php
- 微信公众平台——企业号编辑模式的开启和使用
- 公众号平台服务号、订阅号、企业号区别
- 开启公众号开发者模式
- 公众号开启开发者模式
- 微信企业号开发02 -开启应用回调模式
- 企业公众号都离不开的四种运营模式
- 【JEEWX企业号专题】JEEWX与微信企业号对接,激活应用回调模式
- 微信公众号开启企业付款到用户
- SpringMVC深入信息提示(四)
- [SM] 双城地图,沿着小河走到一个位置附近的时候,脚下的河水就消失了。
- Linux内核:驱动程序
- SpringMVC国际化(i18n)(五)
- SpringMVC实现list表单(六)
- 公众服务号开启回调模式与企业号开始回调的区别
- 小结SpringMVC(一)
- TKRL论文:具有层次类型的知识图谱表示学习
- SpringMVC文件上传(一)
- [DevExpress]在Dev GridControl中添加颜色可变的ProgressBar z
- SpringMVC文件上传(二)指定文件
- SpringMVC文件上传(三)异常栈处理
- Java 网络编程
- LeetCode--No.24--Swap Nodes In Pairs