微信公众号开发-java版 腾讯课堂(开发接入)
微信测试号申请地址: 微信二维码直接扫描登录
1.新建web项目
2.内网穿透映射公网ip (免费隧道需要支付宝实名认证)
3.微信接入验证签名 TOKEN自己定义 接入成功微信保存 路径和TOKEN
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:
参数 | 描述 |
---|---|
signature | 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:
1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
package wxTest; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; /** * Created by Administrator on 2019/3/15/0015. */ public class wxService { /** * 验证签名 * @param TOKEN * @param timestamp * @param nonce * @param signature * @return * 1)将token、timestamp、nonce三个参数进行字典序排序 * 2)将三个参数字符串拼接成一个字符串进行sha1加密 * 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 */ public static boolean check(String TOKEN, String timestamp, String nonce, String signature) { //1)将token、timestamp、nonce三个参数进行字典序排序 String[] strings = {TOKEN, timestamp, nonce}; Arrays.sort(strings); String str =strings[0]+strings[1]+strings[2]; // 将三个参数字符串拼接成一个字符串进行sha1加密 String mysid =sha1(str); System.err.println(mysid); System.err.println(signature); return mysid.equalsIgnoreCase(signature); } private static String sha1(String str) { //获取加密对象 MessageDigest md = null; StringBuffer sb = new StringBuffer(); try { md = MessageDigest.getInstance("sha1"); byte[] digest = md.digest(str.getBytes()); char[] chars={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; for (byte b:digest){ sb.append(chars[(b>>4)&15]); sb.append(chars[b&15]); } } catch (Exception e) { e.printStackTrace(); } return sb.toString(); } }
package wxTest; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; /** * Created by Administrator on 2019/3/15/0015. */ @WebServlet("/wx") public class wxServlet extends HttpServlet { public static final String TOKEN ="13245"; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { System.err.println("post"); } protected void doGet( HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException { System.err.println("get"); /** * 验证消息的确来自微信服务器 * * signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 timestamp 时间戳 nonce 随机数 echostr 随机字符串 */ String signature = request.getParameter("signature"); String timestamp = request.getParameter("timestamp"); String nonce = request.getParameter("nonce"); String echostr = request.getParameter("echostr"); if (wxService.check(TOKEN,timestamp,nonce,signature)){ System.err.println("接入成功"); PrintWriter writer = response.getWriter(); writer.print(echostr); writer.flush(); writer.close(); }else{ System.err.println("接入失败"); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix