前言:微信公众平台支持将普通客户发送过来的消息,转发到你自己的WEB服务器上,你可以根据自己的业务判断逻辑,回复不同的消息内容给普通客户。下面开始讲我的实战过程:

1、登陆微信公众平台后,进入菜单"高级功能",选择进入"开发模式",此时,它会提示你输入你的消息转发的网址和token,如下图所示:

java 微信分享sdk java分享到微信_JAVA

在这个例子里头,我们的URL采用的方式是用JAVA写一个servlet,然后填上该servlet在公网的地址(servlet是什么我就不解释了,java最基础的东西),Token可以随便写。这个步骤最重要的一点是,URL只支持80端口,如果你提供的的URL不是80端口,就不要做后续步骤了。

2、在第一个步骤点击"提交"按钮的时候,微信会向你的serlet以GET协议向你发四个参数,如果要让微信相信你的URL,最简单的方式就是获取echostr参数并直接返回。上doGet的代码段:

java 微信分享sdk java分享到微信_微信_02

3、如果这个微信那边能提交成功,恭喜你,第一步成功完成了,下面就可以在你的代码中接收普通客户发送过来的消息了。不过你得先在微信平台中将你的模式改成"开发者模式",修改方式如下:

先进入"高级功能",选择进入"编辑模式",将"编辑模式"关闭;

在进入"高级功能",选择进入"开发者模式",将"开发者模式"开启;

4、开始编写接收消息的JAVA代码了,微信以POST方式,将普通用户发送的消息转发到你的servlet上,所以我们现在要在doPost里头写接收和回复消息的代码:

java 微信分享sdk java分享到微信_JAVA_03

这时候你用你的普通账户,向你的公众账户发个"hello"的消息,这时候在你的控制台会打印出类似以下的内容:

java 微信分享sdk java分享到微信_微信_04

偷懒一下,自行去写XML解析代码去获取各个数据项的内容,下面我们该向该客户端回复消息了,上代码:

java 微信分享sdk java分享到微信_JAVA_05

此时,在我的普通微信客户端,收到了"hello ,thank you to call me"的字样,连接成功!

5、微信支持图片、声音等回复,详细请见微信的官方API网址:

6、贴上整个JAVA代码:

import java.io.BufferedInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WXService extends HttpServlet {
private static final long serialVersionUID = 2L;
/**
* 普通账户向微信发送的消息,以POST方式提交
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//从流里头获取普通用户发送的XML消息串
BufferedInputStream bf = new BufferedInputStream(request.getInputStream());
byte receiveByte[] = new byte[bf.available()];
bf.read(receiveByte);
bf.close();
//将收到消息内容打印出来
String receiveMsg = new String(receiveByte);
System.out.println("receiveMsg="+receiveMsg);
//TODO 解析XML串中的各个数据项
//回复消息给发送者
String responseXML = " "+
""+
""+
"12345678"+
""+
""+
"0"+
"";
response.getWriter().println(responseXML);
}
/**
* 微信对你的服务认证方式采用GET协议
*/
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");//随机字符串
//TODO 对接收到的参数做数据验证,来确认该请求来自微信,避免被第三方随意攻击
//验证通过后,需要将随机字符串原样返回给微信,微信才确认你的这个服务正常
response.getWriter().print(echostr);
}
}