转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/45042549

http://www.llwjy.com/blogdetail/43b9fff3f2b827f4444826aeee756ec7.html

个人博客站已经上线了,网址 www.llwjy.com ~欢迎各位吐槽~
-------------------------------------------------------------------------------------------------

从这篇博客起,个人开启另一个板块的开发介绍:微信公众平台。官方给的参考文档多数都是基于PHP的,所以关于如何使用PHP开发参考官方文档即可,这里只介绍如何基于java做开发。

微信公共平台官网地址:https://mp.weixin.qq.com/ 没有公共帐号的可以直接在上面注册,注册部分自己实践,这里不做介绍,下面的部分都是在您已有微信公共号的前提下,微信公共平台开发者文档:http://mp.weixin.qq.com/wiki/home/index.html。

开发环境准备

java IDE:MyEclipse;web服务:apache+tomcate;计算机:需要有外网独立IP(如果没有的话,可以搜索下花生壳)。

接入指南

在开发者文档的新手指南--接入指南中我们可以看到,在实现具体业务之前,需要验证服务器的有效性,因此我们需要先开发一个接口来完成这个验证。注:微信公众号接口只支持80接口,所以apache的监听端口是80。

项目开发

在MyEclipse中新建一个web项目,自己这边的包分布如下图所示:

在开发者文档中我们可以得知,服务器验证是对一些信息做sha1加密处理,我们需要写加密算法,具体代码如下:

 /**  *@Description: JAVA实现常见加密算法*/
package com.lulei.util;  import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class Encrypt {/*** @param str 需要加密的字符串* @param encName 加密种类  MD5 SHA-1 SHA-256* @return* @Author:lulei  * @Description: 实现对字符串的加密*/public static String encrypt(String str, String encName){String reStr = null;try {MessageDigest md5 = MessageDigest.getInstance(encName);byte[] bytes = md5.digest(str.getBytes());StringBuffer stringBuffer = new StringBuffer();for (byte b : bytes){int bt = b&0xff;if (bt < 16){stringBuffer.append(0);} stringBuffer.append(Integer.toHexString(bt));}reStr = stringBuffer.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return reStr;}public static void main(String[] args) {System.out.println(Encrypt.encrypt("nihao", null));}}

加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

对于微信公共平台的加密,我们创建SignUtil类,让他来完成具体的验证工作,源代码如下:

 /**  *@Description:  微信验证 */
package com.lulei.weixin.util;  import java.util.Arrays;import com.lulei.util.Encrypt;
import com.lulei.weixin.config.Config;public class SignUtil {/*** @param signature* @param timestamp* @param nonce* @return* @Author:lulei  * @Description: 微信权限验证*/public static boolean checkSignature(String signature, String timestamp, String nonce) {String[] arr = new String[] { Config.TOKEN, timestamp, nonce };//按字典排序Arrays.sort(arr);StringBuilder content = new StringBuilder();  for (int i = 0; i < arr.length; i++) {  content.append(arr[i]);  }//加密并返回验证结果return signature == null ? false : signature.equals(Encrypt.encrypt(content.toString(), "SHA-1"));}}

在上面有一个常量Config.TOKEN,这个是来自配置文件,也就是即将要在微信公共平台填写的Token值,可以根据自己的需要填写(英文或数字,3~32位)。在阅读相关开发者文档后发现,微信公共平台的接口几乎都是输出json字符串或者xml字符串,因此我们创建一个接口父类StringServletBase,具体代码如下:

 /**  *@Description:*/
package com.lulei.weixin.servlet;  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;public abstract class StringServletBase extends HttpServlet {private static final long serialVersionUID = 1L;/*** Constructor of the object.*/public StringServletBase() {super();}/*** Destruction of the servlet. <br>*/public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/*** The doGet method of the servlet. <br>** This method is called when a form has its tag value method equals to get.* * @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();response.setContentType("text/plain");String str = parseString(request);if (str != null) {out.print(str);}out.flush();out.close();}/*** The doPost method of the servlet. <br>** This method is called when a form has its tag value method equals to post.* * @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}/*** Initialization of the servlet. <br>** @throws ServletException if an error occurs*/public void init() throws ServletException {}/*** @param request* @return* @Author:lulei  * @Description: 接口需要输出的字符串*/protected abstract String parseString(HttpServletRequest request);}

在接入指南中,还有一个URL项目需要填写,这个URL地址就是微信服务器和自己服务器互相通信的接口,因此我们创建WeiXinServlet接口类,源代码如下:

 /**  *@Description:     */
package com.lulei.weixin.servlet;  import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;import com.lulei.util.ParseRequest;
import com.lulei.weixin.util.SignUtil;public class WeiXinServlet extends StringServletBase {private static final long serialVersionUID = 1L;/*** @param request* @return* @throws ServletException* @throws IOException* @Author:lulei  * @Description: 这里是微信服务器验证*/protected String check(HttpServletRequest request) { String signature = ParseRequest.getString(request, "signature", "");String timestamp = ParseRequest.getString(request, "timestamp", "");String nonce = ParseRequest.getString(request, "nonce", "");String echostr = ParseRequest.getString(request, "echostr", "");if (SignUtil.checkSignature(signature, timestamp, nonce)) {return echostr;}return null;}@Overrideprotected String parseString(HttpServletRequest request) {//微信首次验证return check(request);}}

配置web.xml

在web.xml文件中,添加如下代码:

<!-- 微信服务器 -->
<servlet><servlet-name>WeiXinServlet</servlet-name><servlet-class>com.lulei.weixin.servlet.WeiXinServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>WeiXinServlet</servlet-name><url-pattern>/weixin.do</url-pattern>
</servlet-mapping>

到现在为止,所有的准备工作都已经做好,下面就开始配置项的填写( 注:自己的这个weixin.do接口必须可以通过外网ip的80端口访问到

填写配置项

登录微信公共平台,在左侧最下方选择开发者中心菜单,如下图:

在右侧选择配置项启用左侧按钮),在页面上填写与自己开发想匹配的信息,如下图:

EncodingAESKey直接选择随机生成即可,如果你填写的信息都正确的话,提价就完成了服务器有效性验证,这时候点击启用就可以开始自己的微信公共平台开发之旅。下一篇博客将介绍如何采集百小度的聊天信息,实现微信小机器人功能~

微信公共平台开发(一):服务器配置相关推荐

  1. 微信公共平台开发(1)

    最近与以前的同学闲聊,他有一个创业的想法.虽然其前景我没看到,但是也不愿意泼这位同学的凉水.我可能是他周围少有的会开发的人,所以就找我给他开发一个微信服务号(或者小程序),这重燃了我对后台开发的热情. ...

  2. 豆瓣搜索—微信公共平台测试帐号申请

    最近稍微有些时间,打算折腾下python微信公共平台开发,豆瓣书籍基本功能是输入需要查询的书籍名称,然后会返回从豆瓣上查询到的该书籍相关的信息. 首先本篇主要说一下如何申请公共平台测试帐号,由于个人帐 ...

  3. 微信公众 mysql回复图片_微信公众号开发之微信公共平台消息回复类实例

    本文实例讲述了微信公众号开发之微信公共平台消息回复类.分享给大家供大家参考.具体如下: 微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,这里就给各位 ...

  4. 微信/易信公共平台开发(一):开发了一个简单易用的PHP类(提供源码),十几行代码搞定一个公众号

    这两天学习了一下微信公共平台和易信公共平台的开发 (易信与微信协议是基本一样的)(PS:没听说过易信?你out了?) 公共平台开发原理这里就不讲了,如果是初次接触的同学,建议先看 David_Tang ...

  5. [PHP]如何使用Face++接口开发微信公共平台的人脸识别系统

    效果图如下: 具体步骤如下: 首先,先登录Face++的官网注册账号:官网链接 注册之后会获取到api_secret和api_key,这些在调用接口的时候需要用到. 然后接下来的就是使用PHP脚本调用 ...

  6. php蜜欧斯,微信公共平台怎么连接数据库,开发语言是PHP

    微信公共平台怎么连接数据库,开发语言是PHP0 我想开发一个微信公共平台,具体功能是输入关键词题号,自动回复这个题目的答案.题目数量在4000道左右.大约160W字本来我用的是网上DOWN的简易PHP ...

  7. 微信公众平台开发 - 动手篇。使用weinxinFundation开始一个微信公众平台的开发

    本文主要讲解如何使用 weinxinFundation 进行二次开发. 步骤如下: 1.创建新的web项目. 在eclipse里新建一个dynamicly web project,比如本文叫weixi ...

  8. Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发

    接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 资料准备: 1.一个可以访问的外网,即80的访问端口,因为微信公众号接 ...

  9. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——3.3 微信开发者中心...

    本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第3章,第3.3节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...

  10. 微信公众平台开发入门教程[2019版]

    关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 我们将使用微信公 ...

最新文章

  1. linux中html图标格式,如何在Linux上将HTML页面转化成png图片
  2. 国内外好用的协同办公软件有哪些?
  3. 为什么在用Vivado生成存储器配置文件时找不到相应型号的Flash芯片呢?
  4. python3.8使用requests_python3.8.1 入门基础学习 之 【 requests 基础学习,python3爬虫必备基础】...
  5. Day2-springmvc初解
  6. 视频号扩展链接助手小程序功能模块源码v1.5.0
  7. 数千万智能手机集体脱机?罪魁祸首是……
  8. Machine Learning Algorithms Study Notes--Supervised Learning
  9. JS Date.Format
  10. php源码查后门,某一次排查源码后门的过程
  11. PDF文件如何转CAD格式?教你几个简单有效的方法
  12. 七大数据分析模型详解,做分析不再没思路
  13. Hadoop发展编年史
  14. Hive源码分析——Alter Table操作执行流程分析
  15. android edittext 取消软键盘,android Edittext输入修改软键盘并关闭软键盘
  16. 如何在微信中下载APP
  17. gazebo仿真时在加入差分运动插件后没有cmd_vel话题
  18. matlab 狄利克雷函数代码,狄利克雷函数
  19. DELL 电脑 重装系统出现 no boottable devices found
  20. 黑马程序员——C语言学习——概述

热门文章

  1. 普通高中信息技术课程标准( 必修 选修科目)
  2. 微信公众号订阅号开发的学习(一):基础知识
  3. php之——常用的字符串函数
  4. FYI| Free online events
  5. 路由器怎么设置WiFi短信认证?
  6. python设置计算题_python tkinter做的生成计算题的GUI
  7. C# 生成word文件 小学一年级口算题生成器(代码)
  8. mysql创建临时表
  9. Python实现简单拼音输入法
  10. 详解DAO类(数据库操作对象)