在进行微信公众平台开发前,前先做好准备工作,好了以后,我们可以开始啦!
 
第一、准备好服务端接口
 
定义一个http服务接口,主要分为如下几步:
 
1、创建一个servlet类,用来接收请求:

 package com.wechat;

 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 org.apache.commons.io.IOUtils; import com.wechat.utility.WeChatUtil; public class WechatConService extends HttpServlet
{ private static final long serialVersionUID = 1L;
/**
* 确认请求来自微信服务器
*/
public 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(); System.out.println(signature);
System.out.println(timestamp);
System.out.println(nonce);
System.out.println(echostr); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
if (WeChatUtil.checkSignature(signature, timestamp, nonce))
{
out.print(echostr);
} out.close();
out = null;
} /**
* 处理微信服务器发来的消息
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
// TODO 消息的接收、处理、响应
System.out.println("接口调用了一次"); String ret = IOUtils.toString(request.getInputStream(), "utf-8").toString();
System.out.println(ret); WeChatMsgBL tWeChatMsgBL = new WeChatMsgBL();
String result = tWeChatMsgBL.dealWechatMsg(ret); response.setCharacterEncoding("UTF-8"); // 返回文本消息,将处理结果返回
PrintWriter out = response.getWriter(); System.out.println(result); out.print(result); out.close(); } }

2、配置web.xml

 <!-- 微信公众号测试接口  add by Damon start-->
<servlet>
<servlet-name>WechatconService</servlet-name>
<servlet-class>com.wechat.WechatConService</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>WechatconService</servlet-name>
<url-pattern>/Servlet/WechatconService</url-pattern>
</servlet-mapping> <!-- 微信公众号测试接口 add by Damon end-->
 
3、接口配置校验:
在配置微信服务信息时,会进行基础支持的校验,只有校验通过才会配置成功,因此我们首先要实现与微信对接的校验功能。具体参见
 /**
* 方法名:checkSignature</br> 详述:验证签名</br> 开发人员:Damon</br> 创建时间:2017-07-11
* </br>
* @param signature
* @param timestamp
* @param nonce
* @return
* @throws
*/
public static boolean checkSignature(String signature, String timestamp, String nonce)
{
// 1.将token、timestamp、nonce三个参数进行字典序排序
String[] arr = new String[]
{ token, timestamp, nonce };
Arrays.sort(arr); // 2. 将三个参数字符串拼接成一个字符串进行sha1加密
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;
// 3.将sha1加密后的字符串可与signature对比,标识该请求来源于微信
return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
} /**
* 方法名:byteToStr</br> 详述:将字节数组转换为十六进制字符串</br> 开发人员:Damon </br>
* 创建时间:2017-07-11 </br>
* @param byteArray
* @return
* @throws
*/
private static String byteToStr(byte[] byteArray)
{
String strDigest = "";
for (int i = 0; i < byteArray.length; i++)
{
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
} /**
* 方法名:byteToHexStr</br> 详述:将字节转换为十六进制字符串</br> 开发人员:Damon</br>
* 创建时间:2017-07-11 </br>
* @param mByte
* @return
* @throws
*/
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;
}

 
到这里,服务的基本配置就完成了,下面我们来进行验证
 
第二步,配置微信服务器
 

URL:你的应用接口公网访问地址(即上面配置的服务器接口地址)
Token:自己定义的标识
Endcoding AESKey:加解密密钥
 
保存信息,微信会进行验证,如果调用成功,则顺利完成配置(可服务器后台打印调用信息以确认)。
 
配置好,就可以开始我们的开发工作啦!

玩玩微信公众号Java版之一:配置微信公众平台服务器信息的更多相关文章

  1. 玩玩微信公众号Java版之六:微信网页授权

    我们经常会访问一些网站,用微信登录的时候需要用到授权,那么微信网页授权是怎么一回事呢,一起来看看吧!   参考官方文档:https://mp.weixin.qq.com/wiki?t=resource ...

  2. 玩玩微信公众号Java版之四:自定义公众号菜单

    序: 微信公众号基本的菜单很难满足个性化及多功能的实现,那么微信能否实现自定菜单呢,具体的功能又如何去实现么?下面就来学习一下微信自定义公众号菜单吧! 自定义菜单接口可实现多种类型按钮,如下: 1.c ...

  3. 玩玩微信公众号Java版之七:自定义微信分享

    前面已经学会了微信网页授权,现在微信网页的功能也可以开展起来啦! 首先,我们先来学习一下分享,如何在自己的页面获取分享接口及让小伙伴来分享呢? 今天的主人公: 微信 JS-SDK, 对应官方链接为:微 ...

  4. 玩玩微信公众号Java版之五:获取关注用户信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同).公众号可通过本接口来根据Op ...

  5. 玩玩微信公众号Java版之三:access_token及存储access_token

    微信官方参考文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183   基本说明: access_token是 ...

  6. 玩玩微信公众号Java版之准备

    微信自2013年流行起来,现在的发展已经超过了我们的想象,那么对应的公众平台,小程序等都是让人眼前一亮的东西,这里来学习一下微信工作号的对接,实现为Java,希望大家一起学习!   这里大概描述一下所 ...

  7. 玩玩微信公众号Java版之二:接收、处理及返回微信消息

    前面已经配置了微信服务器,那么先开始最简单的接收微信消息吧~   可以用我们的微信号来直接进行测试,下面先看测试效果图:   这是最基本的文本消息的接收.处理及返回,来看看是怎么实现的吧!   首先可 ...

  8. 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

    一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...

  9. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...

随机推荐

  1. Implement a Linked List

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Lin ...

  2. Web前端的路该怎么走?很迷茫

    “路漫漫其修远兮,吾将上下而求索”,这句出自<离骚>. 虽然端午已过,但是还是不影响一个程序员想表(zhuang)达(boy)自己此刻心情的冲动. 偶然路过同事旁边,不(tou)小(kan ...

  3. 仿flash轮播

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...

  4. DiscuzX3.1搬家全过程

    最近做了一个安全交流小社区,由于太卡了,之后换了服务器,要给论坛搬家 所以在这里写一下记录. 首先,搬家前要做好以下准备: 1.在网站后台-站长-数据库-备份-网站-Discuz! 和 UCenter ...

  5. DllImport 自动选择x64或x86 dll

    前言 标题不知道怎么确切地命名,在.net的托管世界里,有时不得不使用c的某个动态库,比如ocr.opencv等,如果幸运,有前人已经包装出.net版本,但有些不非常流行的库,只能自己使用pinvok ...

  6. 用php+mysql+ajax实现淘宝客服或阿里旺旺聊天功能 之 前台页面

    首先来看一下我已经实现的效果图: 消费者页面:(本篇随笔) (1)会显示店主的头像 (2)当前用户发送信息显示在右侧,接受的信息,显示在左侧 店主或客服页面:(下一篇随笔) (1)在左侧有一个列表 , ...

  7. Treasure Hunt

    Treasure Hunt time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  8. POJ 1459-Power Network(网络流-最大流-ISAP)C++

    Power Network 时间限制: 1 Sec  内存限制: 128 MB 题目描述 A power network consists of nodes (power stations, cons ...

  9. angular-ui-alert

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. Codeforces 818B Permutation Game

    首先看一下题目 B. Permutation Game time limit per test 1 second memory limit per test 256 megabytes input s ...