1、新建WeiXinServlet.java
package com.fgh.servlet;
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;
/**
* 微信servlet
*
* @author Administrator
*
*/
public class WeiXinServlet extends HttpServlet {
private static final long serialVersionUID = 7534232612712558319L;
public WeiXinServlet() {
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// 微信加密签名
String signature = request.getParameter("signature");
// 时间戳
String timestamp = request.getParameter("timestamp");
// 随机数
String nonce = request.getParameter("nonce");
// 随机字符串
String echostr = request.getParameter("echostr");
PrintWriter out = response.getWriter();
// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
out.print(echostr);
}
out.close();
out = null;
} catch (Exception e) {
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
2、新建SignUtil.java
package com.fgh.servlet;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* 签名验证工具类
* @author Administrator
*
*/
public class SignUtil {
// 与接口配置信息中的Token要一致
private static String token = "weixin";
/**
* 验证签名
*
* @param signature
* @param timestamp
* @param nonce
* @return
*/
public static boolean checkSignature(String signature, String timestamp,
String nonce) {
String[] arr = new String[] { token, timestamp, nonce };
// 将token、timestamp、nonce三个参数进行字典序排序
Arrays.sort(arr);
StringBuilder content = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
content.append(arr[i]);
}
MessageDigest md = null;
String tmpStr = null;
try {
md = MessageDigest.getInstance("SHA-1");
// 将三个参数字符串拼接成一个字符串进行sha1加密
byte[] digest = md.digest(content.toString().getBytes());
tmpStr = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
content = null;
// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
}
/**
* 将字节数组转换为十六进制字符串
*
* @param byteArray
* @return
*/
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
/**
* 将字节转换为十六进制字符串
*
* @param mByte
* @return
*/
private static String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}
}
3、修改Web.xml
<servlet>
<servlet-name>WeiXinServlet</servlet-name>
<servlet-class>com.fgh.servlet.WeiXinServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WeiXinServlet</servlet-name>
<url-pattern>/WeiXinServlet</url-pattern>
</servlet-mapping>
以上就是项目中需要开发的,项目结构如下:
用tomcat部署项目,context配置为test,在浏览器中访问http://localhost:8080/test/WeiXinServlet,如果没有报错,说明就可以了
然后将项目打包成war包,上传到sae上面(申请SAE 新浪云平台)
注意:将打包后的war包中的servlet-api.jar一定要删除了,因为SAE自己使用Jetty服务器,里面带有jar包,否则访问会报404
上传好war包后,访问应用地址:http://coffeebean.sinaapp.com/WeiXinServlet(我自己的)
如果没有报错,说明成功了,然后在微信开发认证中填写Url和TOKEN
URL |
http://coffeebean.sinaapp.com/WeiXinServlet |
Token |
weixin |
点击提交,认证成功。
分享到:
相关推荐
【标题】: "基于Java企业微信的开源应用开发框架&引擎" 这个标题表明我们讨论的是一个专注于企业微信集成的开源框架,它完全用Java语言编写。这个框架的主要目的是简化和加速开发者在企业微信平台上的应用开发工作...
1. **JSSDK**:JavaScript SDK是微信为企业号提供的前端开发工具包,允许开发者在网页中调用微信的功能,如分享、扫一扫、获取地理位置等。使用JSSDK前,需要先通过服务器获取access_token和jsapi_ticket,然后根据...
在企业微信的开发中,Java作为一种广泛使用的后端编程语言,常常被用来构建与企业微信API交互的应用。本文将深入探讨如何使用Java进行企业微信通用开发配置,以及Servlet在其中的作用。 首先,企业微信(Work ...
这个Java实现的示例Demo旨在帮助开发者理解并实现在自己的应用程序中集成微信二维码支付功能。下面将详细介绍这个Demo中的关键知识点。 1. **微信支付接口**:微信提供了一系列API,包括生成二维码、发起支付请求、...
微信接口是微信开放平台提供的一系列服务,允许第三方开发者构建基于微信的应用。这些接口涵盖了消息处理、用户管理、支付、地理位置等多个方面。其中,语音识别接口是专门用于处理语音输入的,它接收音频数据并返回...
微信群机器人源码是一种基于Java编程语言开发的智能应用程序,它主要设计用于微信平台,实现自动回复、群管理以及群聊中的交互功能。这种机器人能够帮助用户高效地管理和维护微信群组,提升群内的互动性和智能化水平...
在Java微信开发API解析系列的第七篇中,我们聚焦于微信网页授权,这是一个重要的功能,允许开发者通过微信平台为用户提供服务。微信网页授权是微信开放平台提供的一种接口,用于实现用户在第三方网站或应用上的一键...
在Java开发中,微信第三方平台授权是一个常见的任务,它涉及到微信开放平台的API接口使用,以便为用户提供服务或实现特定功能。在这个过程中,开发者需要利用Java Web技术来构建应用程序,与微信服务器进行交互,...
其中,微信作为一个集社交、支付、生活服务等功能于一体的超级应用,其开发接口为开发者提供了丰富的功能支持。本文将详细介绍如何使用Java SpringMVC框架对接收到的微信运动数据进行解密处理。 #### 一、背景介绍 ...
上述知识点不仅涉及企业微信的基本功能操作,还深入到了企业微信的安全架构和高级特性使用,这些都是企业微信开发者在进行应用开发和集成时必须掌握的核心技能。企业微信作为腾讯公司推出的一款企业级通讯和工作平台...
1. **微信小程序**:微信小程序是一种轻量级的应用开发框架,它无需安装即可使用,具有快速加载、占用空间小的特点。开发者可以使用微信提供的开发工具进行设计和调试,生成的小程序可以在微信内直接运行。商城小...
8. **第三方库集成**:在项目`yaphone-itchat4j-74be989`中,`itchat4j`可能是一个用于微信机器人开发的Java库,它封装了上述提到的一些复杂逻辑,为开发者提供了一套更简单的API来操作微信。 9. **持续集成与部署*...
- `统一下单接口`:这是支付流程的第一步,开发者需要通过此接口向微信服务器提交订单信息,获取预支付交易会话标识。 - `支付结果通知`:微信支付成功后,会主动向商户服务器发送通知,开发者需要在此处编写处理...
在这个JAVA版的微信二次开发项目中,开发者可能使用了Spring Boot框架,它简化了Java Web应用的开发流程,并且便于集成各种第三方库。通过创建一个RESTful API,开发者可以将微信接口的功能暴露出来,供前端或其他...
这个项目使用了SpringBoot框架,这是一个广泛应用于构建微服务的轻量级框架,以其便捷的配置、内置服务器和自动配置功能而受到开发者的喜爱。 首先,让我们详细探讨微信登录的实现过程。微信提供了一种OAuth2.0授权...
课程简介 从0到1完成企业微信第三方网页应用及第三方小程序应用开发到上线 课程对象 企业微信第三方应用开发者 教学目标 从0到1完成企业微信第三方网页应用及第三方小程序应用开发到上线 章节内容 企业微信第三方...
开发者需要掌握微信企业号的API,理解OAuth2.0授权,熟悉Java Web开发和前端框架的使用,以及进行有效的测试。这个源码可以作为一个学习和参考的例子,帮助开发者更好地理解和实践微信企业号的开发。
在Java环境下开发微信企业号应用,涉及到的主要技术包括JSSDK、access_token、ticket、OAuth认证以及媒体文件的上传下载、通讯录管理和菜单管理等。下面将详细介绍这些知识点。 1. **JSSDK(JavaScript SDK)** ...
在Java开发中,获取微信用户信息通常涉及到微信官方提供的OAuth2.0授权协议。OAuth2.0是一个开放标准,允许用户提供一个令牌,而不是用户名和密码来访问他们存储在特定服务提供者上的信息。这种方式允许用户授权第三...
总的来说,这个项目为Java开发者提供了一个完整的企业微信第三方应用的开发实例,涵盖了从API对接、前后端交互、数据库操作到部署和测试的全过程,是学习和实践企业微信开发的宝贵资源。通过深入研究这个Demo,...