微信公众号开发第一步 - 接入
2016-08-26 10:57
246 查看
本文写给没有公众号开发经验的程序员阅读,也是我第一篇博客。因为之前开发过程中遇到很多问题都是上百度查解决方案,大部分都来源于CSDN,一直在索取却没有回报,感觉很不厚道!哈哈,废话不多说。
一、公众号开发准备。
1 申请微信公众号。具体是订阅号还是服务号,根据你的业务需求,官方平台有详细说明。开发阶段可以去申请微信测试号。
2 准备花生壳。项目开发阶段,可以去安装一个花生壳,配置好域名与ip的映射,这个ip是你本机的ip,然后把你tomcat的端口号也配置上去,就可以实现访问域名http://fuyang7412.vicp.cc/weixinDemo就定位到你的eclipse中的项目了。
3 准备云服务器。项目上线阶段,你需要去购买云服务器,然后去申请一个域名,这是因为你开发的web项目要接入微信公众平台,那么需要在公众平台配置域名,公众平台才能够访问到你的项目,才能互相通信。
4 准备公众平台开发者key、secret
二、接入代码
1 创建类PublicString.java。测试我就不暴露我自己的key和secret了,token随意填写
2 创建类VerifyMessageUtil.java。用于对微信服务器发来的接入参数进行验证,再将验证结果返回。
3 创建WeixinSvc.java。接收微信服务器的get请求,并将处理结果返回给微信服务器。
4 配置web.xml。
5 运行项目,然后在微信公众平台配置上你的域名、key、secret、token,提交。如果弹出提交成功代表你和系统和微信公众号平台接入成功了!
一、公众号开发准备。
1 申请微信公众号。具体是订阅号还是服务号,根据你的业务需求,官方平台有详细说明。开发阶段可以去申请微信测试号。
2 准备花生壳。项目开发阶段,可以去安装一个花生壳,配置好域名与ip的映射,这个ip是你本机的ip,然后把你tomcat的端口号也配置上去,就可以实现访问域名http://fuyang7412.vicp.cc/weixinDemo就定位到你的eclipse中的项目了。
3 准备云服务器。项目上线阶段,你需要去购买云服务器,然后去申请一个域名,这是因为你开发的web项目要接入微信公众平台,那么需要在公众平台配置域名,公众平台才能够访问到你的项目,才能互相通信。
4 准备公众平台开发者key、secret
二、接入代码
1 创建类PublicString.java。测试我就不暴露我自己的key和secret了,token随意填写
public class PublicString { /**公众号Key**/ public static final String appKey = "XXXXXXXXXXXXXX"; /**公众号Secret**/ public static final String appSecret = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"; /**加密字符串**/ public static final String Token = "helloweixin"; }
2 创建类VerifyMessageUtil.java。用于对微信服务器发来的接入参数进行验证,再将验证结果返回。
import java.io.IOException; import java.io.PrintWriter; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class VerifyMessageUtil { private String token; public String getToken() { return token; } public void setToken(String token) { this.token = token; } public VerifyMessageUtil() { super(); } public VerifyMessageUtil(String token) { super(); this.token = token; } /** * 验证 消息请求 是否 合法 * @param request * @param response * @throws IOException */ public void rerifyRequest(HttpServletRequest request, HttpServletResponse response) throws IOException { if(token == null) throw new IllegalArgumentException("未指定要验证的token"); /** * 第二步:验证URL有效性 * * 开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数: * * 参数 描述 signature * 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 timestamp * 时间戳 nonce 随机数 echostr 随机字符串 * 开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器 * ,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。 * * 加密/校验流程如下: 1. 将token、timestamp、nonce三个参数进行字典序排序 2. * 将三个参数字符串拼接成一个字符串进行sha1加密 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 * 检验signature的PHP示例代码: * * */ Logger logger = Logger.getLogger("pdwy"); logger.log(Level.INFO, "日志开始"); String signature = request.getParameter("signature"); String nonce = request.getParameter("nonce"); String timestamp = request.getParameter("timestamp"); String echostr = request.getParameter("echostr"); logger.log(Level.INFO, String.format("收到:signature=%s,nonce=%s,timestamp=%s,echostr=%s", signature,nonce, timestamp, echostr)); if(signature == null && nonce == null && timestamp== null && echostr== null){ logger.log(Level.INFO, "参数不全"); response.sendError(500,"参数不全"); return; } // logger.log(Level.INFO, String.format( // "收到:signature=%s,nonce=%s,timestamp=%s,echostr=%s", signature, // nonce, timestamp, echostr)); if (null == signature || "".equals(signature)) { response.sendError(500); return; } String[] arrs = new String[] { token, timestamp, nonce }; Arrays.sort(arrs); StringBuilder sb = new StringBuilder(); for (int i = 0; i < arrs.length; i++) { sb.append(arrs[i]); } String newSignature = sha1(sb.toString()); if (signature.equals(newSignature)) { PrintWriter pw = response.getWriter(); pw.write(echostr); pw.close(); } } private static String sha1(String content) { // 首先用生成一个MessageDigest类,确定计算方法 java.security.MessageDigest alga; try { alga = java.security.MessageDigest.getInstance("SHA"); // 添加要进行计算摘要的信息 alga.update(content.getBytes()); // 计算出摘要 byte[] digesta = alga.digest(); return byteArrayToHexString(digesta); // String s1 = alga.digest().toString(); // return s1; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } public static String byteArrayToHexString(byte[] b) { String result = ""; for (int i = 0; i < b.length; i++) { result += Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1); } return result; } }
3 创建WeixinSvc.java。接收微信服务器的get请求,并将处理结果返回给微信服务器。
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 WeixinSvc extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /****************** 验证消息的合法性 ******************/ VerifyMessageUtil util = new VerifyMessageUtil(); util.setToken(PublicString.Token); util.rerifyRequest(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
4 配置web.xml。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" 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_3_0.xsd"> <display-name></display-name> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>WeixinSvc</servlet-name> <servlet-class>WeixinSvc</servlet-class> </servlet> <servlet-mapping> <servlet-name>WeixinSvc</servlet-name> <url-pattern>/wxsvc</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
5 运行项目,然后在微信公众平台配置上你的域名、key、secret、token,提交。如果弹出提交成功代表你和系统和微信公众号平台接入成功了!
相关文章推荐
- nodejs微信公众号开发第一步(接入指南)--wechat模块
- java微信公众号开发第一步 公众号接入和access_token管理
- 微信公众号(服务号)接入开发(1)
- 微信公众号开发_如何接入微信支付?[网页发起支付]
- 微信公众号开发教程01:接入指南
- 用java开发微信公众号:公众号接入和access_token管理(二)
- 微信公众号开发之接入
- C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台
- 1.开发模式接入(微信公众号开发实战)
- 微信公众号开发小记——3.接入三方登录
- 微信公众号开发---微信支付之H5页面WAP端接入
- C#微信公众号开发系列教程二(新手接入指南)
- java微信公众号开发 - 微信服务器的接入和验证
- php之微信公众号开发(一)接入微信验证和创建自定义菜单
- java微信开发API第一步 服务器接入
- 微信后台开发第一步:nodeJS+express接入微信后台详细教程
- ASP.NET微信公众号开发实记之一 接入配置
- (2)查开发文档,接入微信公众号
- java微信开发API第一步 服务器接入