首页 微信 微信简单接入(一)接入开发者模式springmvc

微信简单接入(一)接入开发者模式springmvc

/** * 微信验证 * 收/发送信息 */ @RequestMapping(“serial”) @ResponseBo…

/**
 * 微信验证
 * 收/发送信息
 */
@RequestMapping("serial")
@ResponseBody
public void serial(HttpServletRequest request, HttpServletResponse response) throws IOException {
    // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
    request.setCharacterEncoding("UTF-8"); //微信服务器POST消息时用的是UTF-8编码,在接收时也要用同样的编码,否则中文会乱码;
    response.setCharacterEncoding("UTF-8"); //在响应消息(回复消息给用户)时,也将编码方式设置为UTF-8,原理同上;
    boolean isGet = request.getMethod().toLowerCase().equals("get");
    PrintWriter out = response.getWriter();
    String signature = request.getParameter("signature");        // 随机字符串
    String echostr = request.getParameter("echostr");        // 时间戳
    String timestamp = request.getParameter("timestamp");        // 随机数
    String nonce = request.getParameter("nonce");

    String result = "";
    // 确认请求来至微信
    if (SignUtil.checkSignature(ConstantWeiXin.TOKEN, signature, timestamp, nonce)) {
        {
            /** 读取接收到的xml消息 */
            StringBuffer sb = new StringBuffer();
            InputStream is = request.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "UTF-8");
            BufferedReader br = new BufferedReader(isr);
            String s = "";
            while ((s = br.readLine()) != null) {
                sb.append(s);
            }
            String xml = sb.toString();    //次即为接收到微信端发送过来的xml数据

            /** 判断是否是微信接入激活验证,只有首次接入验证时才会收到echostr参数,此时需要把它直接返回 */
            if (echostr != null && echostr.length() > 1) {
                result = echostr;
            } else {
                //正常的微信处理流程
                result = new WechatProcess().processWechatMag(xml);
            }
            response.setContentType("application/xml;charset=UTF-8");
            out.print(result);
            System.out.println("说的什么" + result);
        }

    }

}

验证签名

/**
 * 验证签名
 *
 * @param token 微信服务器token,在env.properties文件中配置的和在开发者中心配置的必须一致
 * @param signature 微信服务器传过来sha1加密的证书签名
 * @param timestamp 时间戳
 * @param nonce 随机数
 * @return
 */
public static boolean checkSignature(String token,String signature, String timestamp, String nonce) {
    String[] arr = new String[] { token, timestamp, nonce };
    // 将token、timestamp、nonce三个参数进行字典序排序
    Arrays.sort(arr);

    // 将三个参数字符串拼接成一个字符串进行sha1加密
    String tmpStr = SHA1.encode(arr[0] + arr[1] + arr[2]);

    // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
    return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
}
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

小程序报Error: errCode: -502005 database collection

小程序报Error: errCode: -502005 database collection

Error: errCode: -502005 database collection not exists | err...
小程序文字水平垂直居中对齐问题(完美解决方案)

小程序文字水平垂直居中对齐问题(完美解决方案)

我们知道常用的居中对齐方式有很多种例如: text-align:center; align-items:center; ...
获取oppenId 微信简单流程

获取oppenId 微信简单流程

用户要求在微信端登录一次后,以后不需要再登录.  我的系统是单独的一个网站. 使用MVC的记住密码功能, 如果用户重启,...
(亲测可用)Element ‘mvc:annotation-driven’ must have no character or element information item

(亲测可用)Element ‘mvc:annotation-driven’ must have no character or element information item

使用SpringMVC,启动tomcat报这个错误 解决办法 首先将Spring版本提升到3.1及以上 如果还不行替换x...
快要5月20号了

快要5月20号了

快要5月20号了喜欢我的人可以提前发微信红包发5.20元, 爱我的人就发13.14元, 自认为是土豪的发88.88元, ...
返回顶部