微信公众号JAVA开发学习笔记(一) 公众号开发准备

时间:2022-12-22 22:56:22

1. 注册申请公众号

注册公众号主要的步骤在“选择类型”,三种类型都有具体描述根据自己的实际情况进行选择,一般个人开发测试选择“订阅号”,公司企业选择服务号。

微信公众号JAVA开发学习笔记(一) 公众号开发准备

2. 基本配置

进入页面后可以看到页面左侧的功能列表,这些基本功能一般可以满足我们的使用需求。但是作为开发者显然不会满足于在界面上点来点去的“开发”方式,故弃之!

2.1.  服务器配置

功能列表中 基本配置->服务器配置,按要求填写配置。其中URL和Tocken下面我们会介绍。

微信公众号JAVA开发学习笔记(一) 公众号开发准备

         首先需要准备一个云服务器(阿里云或者新浪云等),推荐使用阿里云服务器ECS,申请后用远程桌面连接即可操作很方便。我简单写了一个Java web的微信公众号服务器端(链接: https://pan.baidu.com/s/1o8banou 密码: xmmm),在云服务器上搭建环境运行即可。假设你的云服务器IP是127.0.0.1,则配置的URL为http://127.0.0.1/wechat Token为mlqfly。主要处理代码内容如下:

【WechatServlet】

package demo.servlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import demo.process.WechatProcess;
import demo.util.SHA1;

public class WechatServlet extends HttpServlet {
private static final long serialVersionUID = 1140202829587508149L;
private String TOKEN = "mlqfly";

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String signature = request.getParameter("signature");
String echostr = request.getParameter("echostr");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String[] str = { TOKEN, timestamp, nonce };
Arrays.sort(str);
String bigStr = str[0] + str[1] + str[2];
String digest = new SHA1().getDigestOfString(bigStr.getBytes()).toLowerCase();
if (digest.equals(signature)) {
response.getWriter().print(echostr);
}
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

/** 读取接收到的xml消息 */
StringBuffer sb = new StringBuffer();
InputStream is = request.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String s = "";
while ((s = br.readLine()) != null) {
sb.append(s);
}
String xml = sb.toString(); //次即为接收到微信端发送过来的xml数据
System.out.println("接收到消息 :" + xml);
String result = new WechatProcess().processWechatMag(xml);
try {
OutputStream os = response.getOutputStream();
os.write(result.getBytes("UTF-8"));
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}

}

【web.xml】

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>weixin</servlet-name>
<servlet-class>demo.servlet.WechatServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>weixin</servlet-name>
<url-pattern>/wechat</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>pay</servlet-name>
<servlet-class>demo.servlet.PayServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>pay</servlet-name>
<url-pattern>/pay</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


注意:Demo中有一些暂时没用到的东西,后面的笔记中会说到,不要删哦~

2.2.  测试号配置

     我们一般申请订阅号进行测试开发,很多API接口没有权限调用,所以需要用测试号进行测试开发,方法:开发者工具->公众号平台测试账号

微信公众号JAVA开发学习笔记(一) 公众号开发准备

    用自己的微信绑定登陆,则可以看到测试账号信息,下面的appIDappsecret将伴随你的整个开发过程。

微信公众号JAVA开发学习笔记(一) 公众号开发准备