微信公众平台+Java+新浪云(SinaAppEngine)快速接入方法
来源:互联网 发布:乐高nxt编程软件下载 编辑:程序博客网 时间:2024/04/30 04:09
近期突然对微信公众号开发有点感兴趣,参考了CSDN博客,我便开始搭建java web项目,发布项目需要主机,在网上搜索了一番,因为只是临时测试使用,免费的原因选择了新浪云应用,结果发现各种坑
开发工具:Eclipse Java EE IDE for Web Developers. Mars Release (4.5.0)
1. 创建Maven项目 选择webapp类型 过程略过,如果不懂maven,自行补习maven知识
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ljg</groupId> <artifactId>weixin_server</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>weixin_server Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>weixin_server</finalName> </build></project>
上面就是普通的maven web项目的pom,无任何特别之处
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>CrazyServlet</servlet-name> <servlet-class> com.ljg.weixin.servlet.CrazyServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>CrazyServlet</servlet-name> <url-pattern>/Javen</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
新建servlet
package com.ljg.weixin.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;import com.ljg.weixin.util.SignUtil;/** * 核心请求处理类 * @author 简爱微萌 * @Email zyw205@gmail.com * */public class CrazyServlet extends HttpServlet { private static final long serialVersionUID = -5021188348833856475L; @Override protected 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(); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 if (SignUtil.checkSignature(signature, timestamp, nonce)) { out.print(echostr); } out.close(); out = null; } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO 消息的接收、处理、响应 }}签名工具类
package com.ljg.weixin.util;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Arrays;/** * 请求校验工具类 * * @author 简爱微萌 * @Email zyw205@gmial.com * */public class SignUtil { // 与接口配置信息中的Token要一致 private static String token = "Javen"; /** * 验证签名 * * @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); 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(); } System.out.println(tmpStr); 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; } public static void sort(String a[]) { for (int i = 0; i < a.length - 1; i++) { for (int j = i + 1; j < a.length; j++) { if (a[j].compareTo(a[i]) < 0) { String temp = a[i]; a[i] = a[j]; a[j] = temp; } } } } public static void main(String[] args) {boolean checkSignature = checkSignature("3EA0FC1149E97F47A2FE9FEB5E79E308F4ED864A", "1393224944", "1392553418");System.out.println(checkSignature);}}加servlet必须的jar包 javax.servlet-api-3.1.0.jar,我用的是这个,是仿照新浪云项目的入门例子:https://github.com/sinacloud/java-getting-started
打包成war,上传。
这时要把javax.servlet-api-3.1.0.jar去掉!!!如果不小心忘记去掉了,那么后果是这样的:
去掉之后,上传再访问: http://1.xxxx.applinzi.com/Javen?signature=3EA0FC1149E97F47A2FE9FEB5E79E308F4ED864A&echostr=helloworld×tamp=1393224944&nonce=1392553418(xxxx是新浪云web应用名称)
页面显示
helloworld5、微信测试。此步暂时还没做
0 0
- 微信公众平台+Java+新浪云(SinaAppEngine)快速接入方法
- 微信公众平台+Java+新浪云(SinaAppEngine)快速接入方法
- java接入微信公众平台
- 微信公众平台 java 接入 1
- 微信公众平台java接入
- 微信公众平台接入
- 微信公众平台接入
- 微信公众平台接入
- 微信公众平台接入
- 接入微信公众平台
- Java微信公众平台开发(一)——接入微信公众平台
- Java微信公众平台开发(一)--接入微信公众平台
- 微信公众平台接入Java实例,结合BAE
- 微信公众平台接入Java实例,结合BAE
- Java 微信公众号平台接入 视频
- 微信公众平台接入java示例代码
- 微信公众平台后台接入Java版Demo
- Java微信公众平台开发之接入
- 分治法——基本思想
- SVN clean失败解决方法
- Maven搭建多模块企业级项目
- 异步和多线程的关系
- 小数在内存中的存储方式
- 微信公众平台+Java+新浪云(SinaAppEngine)快速接入方法
- Ubuntu版本号查询
- 111
- javaweb学习总结(四)——Http协议
- shell学习-10-函数
- JavaEE 获取路径全攻略
- JQ实现函数连续不断的重复执行
- 选择排序
- SymmetricAlgorithmHelper对称加密辅助类,支持DES,3DES,AES,RC2