文档章节

微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java

Zero零_度
 Zero零_度
发布于 2016/04/07 09:43
字数 1103
阅读 15
收藏 1
点赞 1
评论 0

 创建一个Java Web工程,命名任意, 代码如下 

复制代码

 1 package com.javen.course.servlet; 2  3 import java.io.IOException; 4 import java.io.PrintWriter; 5  6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse;10 11 import com.javen.course.service.CrazyService;12 import com.javen.course.util.SignUtil;13 14 /**15  * 核心请求处理类 
16  * @author 简爱微萌17  * @Email zyw205@gmail.com18  * 
19  */20 public class CrazyServlet extends HttpServlet {21 22     private static final long serialVersionUID = -5021188348833856475L;23     @Override24     protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {25         // 微信加密签名  26         String signature = request.getParameter("signature");  
27         // 时间戳  28         String timestamp = request.getParameter("timestamp");  
29         // 随机数  30         String nonce = request.getParameter("nonce");  
31         // 随机字符串  32         String echostr = request.getParameter("echostr");  
33         PrintWriter out = response.getWriter();  
34         // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败  35         if (SignUtil.checkSignature(signature, timestamp, nonce)) {  
36             out.print(echostr);  
37         }  
38         out.close();39         out = null;40     }41     42     43     @Override44     protected void doPost(HttpServletRequest request, HttpServletResponse response)45             throws ServletException, IOException {46         // TODO 消息的接收、处理、响应  47     }48 }

复制代码

代码中只完成了doGet方法,它的作用正是确认请求是否来自于微信服务器;而doPost方法这里验证不需要我们先放着。

在doGet方法中调用了SignUtil.java 实现代码如下 1 package com.javen.course.util;

 

复制代码

 1 package com.javen.course.util; 2  3 import java.security.MessageDigest; 4 import java.security.NoSuchAlgorithmException; 5 import java.util.Arrays; 6  7 /** 8  * 请求校验工具类 9  * 
10  * @author 简爱微萌11  * @Email zyw205@gmial.com12  * 
13  */14 public class SignUtil {15     // 与接口配置信息中的Token要一致16     private static String token = "Javen";17 18     /**19      * 验证签名20      * 
21      * @param signature22      * @param timestamp23      * @param nonce24      * @return25      */26     public static boolean checkSignature(String signature, String timestamp,27             String nonce) {28         String[] arr = new String[] { token, timestamp, nonce };29         // 将token、timestamp、nonce三个参数进行字典序排序30         //Arrays.sort(arr);31         sort(arr);32         StringBuilder content = new StringBuilder();33         for (int i = 0; i < arr.length; i++) {34             content.append(arr[i]);35         }36         MessageDigest md = null;37         String tmpStr = null;38 39         try {40             md = MessageDigest.getInstance("SHA-1");41             // 将三个参数字符串拼接成一个字符串进行sha1加密42             byte[] digest = md.digest(content.toString().getBytes());43             tmpStr = byteToStr(digest);44         } catch (NoSuchAlgorithmException e) {45             e.printStackTrace();46         }47 48         content = null;49         // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信50         return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;51     }52 53     /**54      * 将字节数组转换为十六进制字符串55      * 
56      * @param byteArray57      * @return58      */59     private static String byteToStr(byte[] byteArray) {60         String strDigest = "";61         for (int i = 0; i < byteArray.length; i++) {62             strDigest += byteToHexStr(byteArray[i]);63         }64         return strDigest;65     }66 67     /**68      * 将字节转换为十六进制字符串69      * 
70      * @param mByte71      * @return72      */73     private static String byteToHexStr(byte mByte) {74         char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',75                 'B', 'C', 'D', 'E', 'F' };76         char[] tempArr = new char[2];77         tempArr[0] = Digit[(mByte >>> 4) & 0X0F];78         tempArr[1] = Digit[mByte & 0X0F];79 80         String s = new String(tempArr);81         return s;82     }83 84     public static void sort(String a[]) {85         for (int i = 0; i < a.length - 1; i++) {86             for (int j = i + 1; j < a.length; j++) {87                 if (a[j].compareTo(a[i]) < 0) {88                     String temp = a[i];89                     a[i] = a[j];90                     a[j] = temp;91                 }92             }93         }94     }95 }

复制代码

 

 

 

注意:SignUtil类中的成员变量token,这里赋予什么值,在接口配置信息中的Token就要填写什么值,两边要保持一致

最后再来看一下CoreServlet是怎么配置的,web.xml中的配置代码如下:

复制代码

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 3   <display-name></display-name> 4   <servlet> 5     <servlet-name>CrazyServlet</servlet-name> 6     <servlet-class>   7             com.javen.course.servlet.CrazyServlet 
 8         </servlet-class> 9   </servlet>15 16   <servlet-mapping>17     <servlet-name>CrazyServlet</servlet-name>18     <url-pattern>/Javen</url-pattern>19   </servlet-mapping>20   24   <welcome-file-list>25     <welcome-file>index.jsp</welcome-file>26   </welcome-file-list>27 </web-app>

复制代码

 

到目前为止,所有编码都完成了,就是这么简单。接下来就是将工程发布到公网服务器上,如果没有公网服务器环境,可以去了解下BAE、SAE或者租赁一个服务器。发布到服务器上后,我们在浏览器里访http://你服务器的Ip或者域名/Javen(项目名)/Javen,如果看到如下界面就表示我们的代码没有问题:

PS:在浏览器中直接访问就相当于提交的是GET请求,而我们什么参数都没有传,在验证的时候当然会报空指针异常。

 

最好在功能>>高级功能>>开发模式中填写对应的URL和Token即可  没有找到页面的可以参考  http://www.cnblogs.com/zyw-205520/p/3500761.html


本文转载自:http://www.cnblogs.com/zyw-205520/p/3581250.html

共有 人打赏支持
Zero零_度
粉丝 67
博文 1245
码字总数 252866
作品 0
程序员
微信公众帐号开发教程第4篇-消息及消息处理工具的封装

工欲善其事必先利其器!本篇内容主要讲解如何将微信公众平台定义的消息及消息相关的操作封装成工具类,方面后期的使用。这里需要明确的是消息其实是由用户发给你的公众帐号的,消息先被微信平...

bliver
2013/11/29
0
2
微信公众帐号开发教程第3篇-开发模式启用及接口配置

编辑模式与开发模式 微信公众帐号申请成功后,要想接收处理用户的请求,就必须要在“高级功能”里进行配置,点击“高级功能”,将看到如下界面: 从上图中可以看到,高级功能包含两种模式:编...

刘靖煌
2013/10/31
0
0
微信公众帐号开发教程第1篇-引言

接触微信公众帐号已经有两个多月的时间了,在这期间,除了陆续完善个人公众帐号xiaoqrobot以外,还带领团队为公司开发了两个企业应用:一个是普通类型的公众帐号,另一个是会议类型的公众帐号...

bliver
2013/11/29
0
0
微信公众帐号开发系列教程第1篇-引言 (Java版)

接触微信公众帐号已经有两个多月的时间了,在这期间,除了陆续完善个人公众帐号xiaoqrobot以外,还带领团队为公司开发了两个企业应用:一个是普通类型的公众帐号,另一个是会议类型的公众帐号...

刘靖煌
2013/10/31
0
4
在百度BAE2.0 JAVA环境下搭建属于自己的微信公众平台接口

在讲之前先唠几句,之前闲来无事接触微信搞到现在已经有一段时间了。期间折腾过很多东西。本来想在微信上搞点实质性的东西,搞着搞着就搞成娱乐的玩意了。不过也好,朋友们无聊的时候拿来当成...

using
2013/10/10
0
18
微信公众平台开发教程新手解惑40则

【编者按】由CSDN和《程序员》杂志联合主办的 2014年微信开发者大会 将于8月23日在北京举行,邀请了来自于一线的微信开发商技术负责人或资深工程师从企业应用开发高级篇、智能客服与LBS、微信...

DavidBao
2015/04/29
0
0
一大波编程视频资料赠送(亲自整理)

为了感恩大家长久以来的关注和支持,小编准备了一些福利,整理了包含前端,Java,产品经理,微信小程序,Python,网站源码,Android应用视频教程,微信公众平台开发教程及材料等资源合集大放...

祈澈姑娘
05/08
0
0
[037] 微信公众帐号开发教程第13篇-图文消息全攻略

引言及内容概要 已经有几位读者抱怨“柳峰仅仅用到文本消息作为演示例子,从来不提图文消息,都不知道图文消息该怎样使用”,好吧,我错了,原本以为把基础API封装完、框架搭建好,再给出一个...

云栖希望。
2017/12/04
0
0
微信公众帐号开发教程第3篇-开发模式启用及接口配置

编辑模式与开发模式 微信公众帐号申请成功后,要想接收处理用户的请求,就必须要在“高级功能”里进行配置,点击“高级功能”,将看到如下界面: 从上图中可以看到,高级功能包含两种模式:编...

bliver
2013/11/29
0
0
轻量级支付整合轻松嵌入任何系统 - pay-java-parent

轻量级支付模块集成(微信支付,友店扫码,支付宝,富友,银联, payoneer皮卡 )支付整合,app,扫码,即时到帐刷卡付条码付、支持多种支付类型多支付账户,支付与业务完全剥离,简单几行代码即可实...

egzosn
2017/02/17
0
8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CVE-2013-0077 堆溢出分析

找了很久才发现这个环境比较容易搭建分析... 环境: 系统---Win XP SP3 漏洞程序:QQPlayer 3.7.892.400 出错DLL:quartz.dll 6.5.2600.5512 调试工具:x32db+gflag.exe 过程: 首先gflag设置...

Explorer0
14分钟前
5
0
python上传文件

//注意 <form action="/login/" method="post" enctype="multipart/form-data"> f=request.FILES.get('fafa') ff=open(f.name,mode='wb') for i in f.chunks(): ff.write(i) ff.close()......

南桥北木
26分钟前
0
0
CISCO VPN Client Reason 442 WIN8/10错误解决方案

http://jdkleo.iteye.com/blog/2163493 引用 http://my.oschina.net/cloudcoder/blog/220391?p={{currentPage 1}} 在使用cisco VPN 客户端登录时,产生Reason 442:Failedto enable Virtual......

chenfj_fer
29分钟前
0
0
信号量有没有容量限制?

之前一直误以为信号量初始化的时候那个初始化的值是信号量的“容量”,昨天同事指出了我的错误,最初我是不相信的,经过以下代码实践,证明了我的错误: Java版: import java.util.concurr...

锟斤拷烫烫烫
33分钟前
0
0
【RocketMQ】Message存储笔记

概述 消息中间件存储分为三种,一是保存在内存中,速度快但会因为系统宕机等因素造成消息丢失;二是保存在内存中,同时定时将消息写入DB中,好处是持久化消息,如何读写DB是MQ的瓶颈;三是内...

SaintTinyBoy
44分钟前
0
0
Android应用Context详解及源码解析

Android应用Context详解及源码解析 本文定位:优质文章收集 本文转载 1 背景 今天突然想起之前在上家公司(做TV与BOX盒子)时有好几个人问过我关于Android的Context到底是啥的问题,所以就马...

lichuangnk
今天
0
0
PostgreSQL的昨天今天和明天

PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS), 也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。 这个起源于伯克利(...

闻术苑
今天
1
0
Mysql对自增主键ID进行重新排序

1,删除原有主键: ALTER TABLE `table_name` DROP `id`; 2,添加新主键字段: ALTER TABLE `table_name` ADD `id` MEDIUMINT( 8 ) NOT NULL FIRST; 3,设置新主键: ALTER TABLE `table_nam......

niithub
今天
0
0
福利篇:免费csdn vip账号分享

分享一个发布免费csdn vip账号的网站:啰嗦vip www.lostvip.com , 各种软件开发类的视频教程:慕课网、动脑学院、黑马各大培训机构VIP视频教程,非常不错!

在水一方发盐人
今天
1
0
Nginx+Tomcat搭建高性能负载均衡集群

一、 工具   nginx-1.8.0   apache-tomcat-6.0.33 二、 目标   实现高性能负载均衡的Tomcat集群:    三、 步骤   1、首先下载Nginx,要下载稳定版:      2、然后解压两个Tom...

码代码的小司机
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部