首先附上微信公众平台开发技术文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5

本文主要描述文档中1.4部分的开发者的接入部分,省略掉了之前的申请公众号步骤。

准备工作:

1.必须要有一个可以外网访问的地址(个人建议:1.内网传统,如natapp,本人所用的就是natapp  2.买一个云服务器,百度腾讯等都有)

2.端口号必须设置为80

补充:

本人搭建的是 ssm 框架,IDE为 idea

附上开发配置页面:

流程:

微信公众平台会访问用户输入的URL,并传递四个参数,signature, timestamp, nonce,echostr,我们在方法里接收到这四个参数后,通过 Token(网页上基本配置里自己输入的Token),timestamp 和 nonce 排序后拼接成一个字符串,用SHA1加密返回一个新的字符串,用这个字符串与signature比较是否相同,相同则说明是此次请求来自微信公众平台,返回echostr回去,否则返回一个空字符串即可;

实现:

  

@RequestMapping("/wx")
@Controller
public class WeChatController {    // 开发配置里自己填写的Token值
private final String TOKEN = "***********************"; /**
* 1.NeedLogin是自定义的注解,用来拦截未登录的用户,微信公众号开发,不需要登陆拦截,自己开发的时候可以不配置拦截
* 2.文档说明请求方法为GET请求
* @param request
* @return
*/
@NeedLogin(false)
@RequestMapping(value = "/view.json", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
@ResponseBody
public String view(HttpServletRequest request){
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
if (checkSignature(signature, timestamp, nonce)){
return echostr;
}
return "";
} private boolean checkSignature(String signature, String timestamp, String nonce){
String [] arr = {TOKEN, timestamp, nonce};
Arrays.sort(arr);
StringBuffer sbf = new StringBuffer();
for (String str : arr){
sbf.append(str);
}
String getSignature = Sha1Util.encode(sbf.toString());
return signature.equals(getSignature);
}
} SHA1加密的util类网上有很多,本人也是从网上找的一个,代码如下:
import java.security.MessageDigest;

public class Sha1Util {
private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; private static String getFormattedText(byte[] bytes) {
int len = bytes.length;
StringBuilder buf = new StringBuilder(len * 2);
// 把密文转换成十六进制的字符串形式
for (int j = 0; j < len; j++) {
buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
}
return buf.toString();
} public static String encode(String str) {
if (str == null) {
return null;
}
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
messageDigest.update(str.getBytes());
return getFormattedText(messageDigest.digest());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
} 最后点击提交按钮即可。

java开发微信公众号----开发者基本配置的的更多相关文章

  1. Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发

    接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 资料准备: 1.一个可以访问的外网,即80的访问端口,因为微信公众号接 ...

  2. Java开发微信公众号(五)---微信开发中如何获取access_token以及缓存access_token

    获取access_token是微信api最重要的一个部分,因为调用其他api很多都需要用到access_token.比如自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等在请求的时候 ...

  3. Java开发微信公众号(四)---微信服务器post消息体的接收及消息的处理

    在前几节文章中我们讲述了微信公众号环境的搭建.如何接入微信公众平台.以及微信服务器请求消息,响应消息,事件消息以及工具处理类的封装:接下来我们重点说一下-微信服务器post消息体的接收及消息的处理,这 ...

  4. Java开发微信公众号(三)---微信服务器请求消息,响应消息,事件消息以及工具处理类的封装

    在前面几篇文章我们讲了微信公众号环境的配置 和微信公众号服务的接入,接下来我们来说一下微信服务器请求消息,响应消息以及事件消息的相关内容,首先我们来分析一下消息类型和返回xml格式及实体类的封装. ( ...

  5. Java开发微信公众号(一)---初识微信公众号以及环境搭建

    ps:1.开发语言使用Java springMvc+Mybaits+spring maven实现 2.使用微信接口测试账号进行本地测试 https://mp.weixin.qq.com/debug/c ...

  6. 用java开发微信公众号:公众号接入和access_token管理(二)

    本文为原创,原始地址为http://www.cnblogs.com/fengzheng/p/5027630.html 上一篇说了微信开发的准备工作,准备工作完成之后,就要开始步入正题了.其实微信公众号 ...

  7. 用java开发微信公众号:测试公众号与本地测试环境搭建(一)

    本文为原创,原始地址为:http://www.cnblogs.com/fengzheng/p/5023678.html 俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一 ...

  8. 用java开发微信公众号:接收和被动回复普通消息(三)

    上篇说完了如何接入微信公众号,本文说一下微信公众号的最基本功能:普通消息的接收和回复.说到普通消息,那么什么是微信公众号所定义的普通消息呢,微信开发者文档中提到的接收的普通消息包括如下几类: 1.文本 ...

  9. Java开发微信公众号模板消息【同步|异步】

    第一步:申请模板消息功能并添加模板 在微信公众平台找到你需要的模板,并添加上即可: 第二步:添加功能模块后开始开发 功能中使用的类及代码: 发送数据主实体类: Template.java packag ...

随机推荐

  1. pgpool-ii 安装手册 基于Centos7.3

    http://www.bkjia.com/jQuery/1173582.html地址被占用pgpool启动失败 Nov 15 02:33:56 node3 pgpool: 2016-11-15 02: ...

  2. 2.关键字global,nonlocal

    count=0 def func(): print(count) count+=1 func() UnboundLocalError: local variable 'count' reference ...

  3. JS数组去重精简版

    看了很多人写的好几个去重方法,我在这里精简组合下,适用于已排序与未排序的数组. 废话不多说,上代码. <!DOCTYPE html> <html> <head> & ...

  4. HTML+CSS注意点

    1. 对于中文网页,需要在header中使用<meta charset="utf-8">声明编码,否则会出现乱码. 2. 属性 属性 描述 class 为html元素定 ...

  5. 如何在JMeter中使用ForEach控制器

    Jmeter中的ForEach Controller遍历变量数组. 在这个JMeter教程中,我们将使用ForEach控制器循环访问JSON数组. 有时我们需要解析响应并提取某些信息.例如,在测试AP ...

  6. CodeForces - 361A-Levko and Table (思维)

    Levko loves tables that consist of n rows and n columns very much. He especially loves beautiful tab ...

  7. StatusCodePagesMiddleware中间件如何针对响应码呈现错误页面

    StatusCodePagesMiddleware中间件如何针对响应码呈现错误页面 StatusCodePagesMiddleware中间件与ExceptionHandlerMiddleware中间件 ...

  8. spring的2种类型转换器

    spring有2种类型转换器,一种是propertyEditor,一种是Converter.虽然都是类型转换,但是还是有细微差别. 所以这里以一个例子的形式来分析一下这2种类型转换的使用场景和差别. ...

  9. ubuntu中安装vsftp

    1.安装 $ sudo apt-get install vsftpd 2. 配置 需要配置文件/etc/vsftpd.conf 来进行设置参数以对FTP进行控制,包括访问权限,流量等进行控制. 执行s ...

  10. IO流----File,递归,字节流,字符流

    要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘.光盘.U盘等)上. 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读 ...