微信服务号开发之接入验证

思路

  • 微信公众平台上开启开发者模式
  • 服务器后台代码实现

具体实现如下:

  1. 微信公众平台上开启开发者模式
    登录微信公众平台,在 开发 —-> 基本配置菜单中
    这里写图片描述

  2. 服务器端
    spring.xml 文件中添加如下代码

<servlet>
    <servlet-name>wechatServlet</servlet-name>
    <servlet-class>你的实现接口验证的类,我这里是AccessAndDo</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>wechatServlet</servlet-name>
    <url-pattern>/wechat.do</url-pattern>
</servlet-mapping>

AccessAndDo 类

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import *.Constant;  // 涉及到公司隐私,路径以*号代替
import *.CheckSignature;
import *.CreateMenu;
import *.GetAccessToken;

/**
 * 链接微信接口,获取来自微信的请求,并响应
 * @author ligj
 *
 */
public class AccessAndDo extends HttpServlet {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    /**
     * 确认请求来自微信服务器
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String signature = request.getParameter("signature");
        String timestamp = request.getParameter("timestamp");
        String nonce = request.getParameter("nonce");
        String echostr = request.getParameter("echostr");
        PrintWriter out = response.getWriter();
        if (CheckSignature.checkSign(signature, timestamp, nonce, Constant.authToken)) {
            out.print(echostr); // 校验通过,原样返回echostr参数内容
        }

    }

    /**
     * 处理微信服务器发来的消息
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");




        // 调用核心业务类接收消息、处理消息
        String respMessage = HandlingEvents.handlingEvents(request);

        // 响应消息
        PrintWriter out = response.getWriter();
        out.print(respMessage);
        out.close();
    }
}

CheckSignature.checkSign 方法如下

/**
 * 链接微信时,验证是否时微信发来的请求
 * 
 * @author liguiji
 * 
 */
public class CheckSignature {
    public static Boolean checkSign(String signature, String timestamp,
            String nonce, String token) {
        String[] arr = new String[] { token, timestamp, nonce };

        // 按字典顺序排序
        Arrays.sort(arr);

        // 生成字符串
        StringBuilder content = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            content.append(arr[i]);
        }

        // sha1加密
        String temp = SHA1.getSha1(content.toString());

        // 与微信传递过来的签名进行比较
        return temp.equals(signature);
    }
}

Constant 类如下

import cn.eleph.util.PropertyUtil;

public class Constant {
    // 微信服务号开发 账号
    public static final String appid = PropertyUtil.getProperty("appId");

    // 微信服务号开发 密码
    public static final String secret = PropertyUtil.getProperty("appSecret");

    // 微信服务号开发 链接微信接口校验码 即在微信公众平台上填写的 令牌(Token) 内容
    public static final String authToken = PropertyUtil.getProperty("authToken");

}

PropertyUtil 类详见这里写链接内容

接入验证成功后,微信公众平台上方会有一个绿色的验证成功提示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值