注册公众号主要的步骤在“选择类型”,三种类型都有具体描述根据自己的实际情况进行选择,一般个人开发测试选择“订阅号”,公司企业选择服务号。
进入页面后可以看到页面左侧的功能列表,这些基本功能一般可以满足我们的使用需求。但是作为开发者显然不会满足于在界面上点来点去的“开发”方式,故弃之!
功能列表中 基本配置->服务器配置,按要求填写配置。其中URL和Tocken下面我们会介绍。
首先需要准备一个云服务器(阿里云或者新浪云等),推荐使用阿里云服务器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中有一些暂时没用到的东西,后面的笔记中会说到,不要删哦~
我们一般申请订阅号进行测试开发,很多API接口没有权限调用,所以需要用测试号进行测试开发,方法:开发者工具->公众号平台测试账号
用自己的微信绑定登陆,则可以看到测试账号信息,下面的appID和appsecret将伴随你的整个开发过程。