首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 微信開發第一步:服務器接入與簽名驗證完整指南

     編輯:Java 相關知識

接入流程總覽

  1. 填寫服務器配置(URL、Token)
  2. 驗證服務器地址有效性(GET 請求簽名校驗)
  3. 依據接口文檔實現業務邏輯

簽名驗證核心算法

微信服務器發送 GET 請求攜帶四參數:signature、timestamp、nonce、echostr。開發者需:

  1. 將 token、timestamp、nonce 字典序排序
  2. 拼接成單一字串進行 SHA1 加密
  3. 比對加密結果與 signature,相等則原樣返回 echostr,接入成功

Servlet 完整實作(含 SHA1 工具方法)

@WebServlet("/CoreServlet")
public class CoreServlet extends HttpServlet {
    private static final String TOKEN = "wgyscsf";

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();

        String signature = req.getParameter("signature");
        String timestamp = req.getParameter("timestamp");
        String nonce = req.getParameter("nonce");
        String echostr = req.getParameter("echostr");

        String[] arr = {TOKEN, timestamp, nonce};
        Arrays.sort(arr); // 字典序
        StringBuilder sb = new StringBuilder();
        for (String s : arr) sb.append(s);
        String sha1 = SHA1.encode(sb.toString()); // 需自行實現或引用工具類

        if (sha1.equals(signature)) {
            out.print(echostr); // 驗證通過
        } else {
            out.print(""); // 驗證失敗
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp); // 後續消息推送也走此入口
    }
}

SHA1 工具類片段

public class SHA1 {
    public static String encode(String str) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            byte[] digest = md.digest(str.getBytes(StandardCharsets.UTF_8));
            StringBuilder hex = new StringBuilder();
            for (byte b : digest) {
                String h = Integer.toHexString(b & 0xFF);
                if (h.length() == 1) hex.append('0');
                hex.append(h);
            }
            return hex.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
}

服務器配置要點

  • Tomcat 部署後確保公網可訪問 https://IP:Port/ContextPath/CoreServlet
  • 微信測試號後台填入該 URL 與 Token(需與代碼一致)
  • 提交驗證,成功即可進入業務開發
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved