`

JAVA微信开发总结

阅读更多
  最近研究了一下微信,感觉不是很难,借鉴了marker(www.yl-blog.com)的开源代码,修改了几处小BUG(在作者的开源网站上留了言,详见其开源网站),很快就实现关键的逻辑:
  1、开发者验证
  2、通过程序接口自定义菜单
  3、用户关注后,发送欢迎消息
  4、根据用户输入为其选择感兴趣的话题
  5、发送文件消息、发送图文消息
  6、使用静态网页模拟了微信网站的简单模板

  公众号,daydayup_it,正在紧张的策划开发中,近期上线,计划主要提供一些优质的教育资源,敬请大家关注。

  准备有空把关键技术整理一下,贴出来跟大家交流。

  一、开发者验证,其实主要是写个Servlet,有点Web开发经验就很容易搞定
package org.marker.weixin.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 处理微信服务器请求的Servlet URL地址:http://xxx/weixin/dealwith.do
 * 
 * @author marker
 * @blog www.yl-blog.com
 * @weibo http://t.qq.com/wuweiit
 */
public class WinXinServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static Log log = LogFactory.getLog(WinXinServlet.class);

	// TOKEN 是你在微信平台开发模式中设置的字符串
	public static final String TOKEN = "YourToken";

	/**
	 * 处理微信服务器验证
	 * http://wallimn.iteye.com, 2014-09-11
	 */
	protected 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");// 随机字符串
		Writer out = response.getWriter();
		System.out.println("收到验证请求:");
		System.out.println("  signature="+signature);
		System.out.println("  timestamp="+timestamp);
		System.out.println("  nonce="+nonce);
		System.out.println("  echostr="+echostr);
		if(signature==null || timestamp==null || nonce==null || echostr==null){
			//这几个参数为空时,排序会报错。
			out.write("parameter is null!");
		}
		else{
			// 重写totring方法,得到三个参数的拼接字符串
			List<String> list = new ArrayList<String>(3) {
				private static final long serialVersionUID = 2621444383666420433L;
				public String toString() {
					return this.get(0) + this.get(1) + this.get(2);
				}
			};
			list.add(TOKEN);
			list.add(timestamp);
			list.add(nonce);
			Collections.sort(list);// 排序
			String tmpStr = new MySecurity().encode(list.toString(),
					MySecurity.SHA_1);// SHA-1加密
			if (signature.equals(tmpStr)) {
				out.write(echostr);// 请求验证成功,返回随机码
			} else {
				out.write("check error!");
			}
		}
		out.flush();
		out.close();
	}

	
	/**
	 * 处理微信服务器发过来的各种消息,包括:文本、图片、地理位置、音乐等等
	 * http://wallimn.iteye.com, 2014-09-11
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		log.info("收到POST请求:"+(new Date()));
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		InputStream is = request.getInputStream();
		OutputStream os = response.getOutputStream();
		//TODO:写微信平台推送过来的各种信息的处理逻辑
	}
}


  二、微信网站的测试主页效果及代码,借助bootstrap,支持媒体查询,当手机水平看时,栏目会变成2*2布局,index.jsp,需要JSTL的支持,也可以自行去掉,不影响效果,注意连接文件的路径即可




<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<c:set var="ctx" value="${pageContext.request.contextPath}"></c:set>
    <title>DayDayUp网站</title>

    <!-- Bootstrap -->
    <link href="${ctx}/css/bootstrap.min.css" rel="stylesheet">

    <style type="text/css">
    	body,th,td{
    		font-size:1.5em;
    		font-family:宋体;
    	}
    	body{
    		margin:1px;
    	}
    	a{
    		text-decoration:none;  
    	}
		a:link,a:visited,a:hover,a:active{  
		    text-decoration:none;  
		}  
		  
		a:focus{  
		    outline:0;   
		} 
    	.wxc a{
    		display:block;
    		overflow:hidden;
    		text-decoration:none;  
    		line-height:1.5em;
    		padding:0 10px;
    		border-bottom:1px dotted #a0a0a0;  	
    		margin:0 5px;	
    	}
    	.wxc a:last-child{
    		border-width:0 !important;
    	}
    	.topbar,.bottombar{
    		padding:0 2px;
    		line-height:2em;
    		background-color:#980404;
    		color:white;
    	}
    	.topbar{
    		font-weight:bold;
    		font-size:150%;
    	}
    	.item img{
    		margin:0 auto;
    	}
    	#search_panel{
    		margin:5px 0;
    	}
    	.panel{
    		margin:5px 2px;
    	}
    	.nopadding{
    		padding:0;
    	}
    </style>
  </head>
  <body>
	<div class="topbar">欢迎访问DayDayUp(建设中...)</div>
  
	<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
	  <!-- Indicators -->
	<ol class="carousel-indicators">
	  <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
	  <li data-target="#carousel-example-generic" data-slide-to="1"></li>
	  <li data-target="#carousel-example-generic" data-slide-to="2"></li>
	</ol>
	
	<!-- Wrapper for slides -->
	<div class="carousel-inner" role="listbox">
	  <div class="item active">
	    <img src="./images/p1.jpg" alt="图片1">
	    <div class="carousel-caption">
	    	<h4>Word办会全解决</h4>
	    	<p>您办过会吗?您被各种各样的文件、表格折磨过吗?那请您花几分钟时间来看一下本站提供的解决方案,包您受益匪浅!</p>
	    </div>
	  </div>
	  <div class="item">
	    <img src="./images/p2.jpg" alt="图片2">
	    <div class="carousel-caption">
	    	<h4>Excel财务规划</h4>
	    	<p>您用Excel做过家庭财务规划吗?这里提供给您一个完整的案例,非常方便,您一学就会,一看就会。</p>
	    </div>
	  </div>
	  <div class="item">
	    <img src="./images/p3.jpg" alt="图片3">
	    <div class="carousel-caption">
	    	<h4>PPT秀出别样的精彩</h4>
	    	<p>您用Excel做过家庭财务规划吗?这里提供给您一个完整的案例,非常方便,您一学就会,一看就会。</p>
	    </div>
	  </div>
	</div>
	
	  <!-- Controls -->
	  <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
	    <span class="glyphicon glyphicon-chevron-left"></span>
	    <span class="sr-only">前一个</span>
	  </a>
	  <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
	    <span class="glyphicon glyphicon-chevron-right"></span>
	    <span class="sr-only">下一个</span>
	  </a>
	</div>

	<div id="search_panel">
	  <div class="input-group">
	    <input type="text" class="form-control" placeholder="请输入关键字">
	    <span class="input-group-btn">
	      <button class="btn btn-default" type="button"><span class="glyphicon glyphicon-search"></span></button>
	    </span>
	  </div><!-- /input-group -->
	</div>
  
	<div class="col-xs-12 col-sm-6 nopadding">
		<div class="panel panel-default wxc">
		  <div class="panel-heading">最近发表</div>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		</div>  
	</div>  
	<div class="col-xs-12 col-sm-6 nopadding">
		<div class="panel panel-default wxc">
		  <div class="panel-heading">热门问题</div>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		</div>  
	</div>  
	<div class="col-xs-12 col-sm-6 nopadding">
		<div class="panel panel-default wxc">
		  <div class="panel-heading">劳模排行</div>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		</div>  
	</div>  
	<div class="col-xs-12 col-sm-6 nopadding">
		<div class="panel panel-default wxc">
		  <div class="panel-heading">赞率最高</div>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		  <a href="#">问题1</a>
		</div>  
	</div>  
	
	<div class="text-center">
	  	<a href="">首页</a>&nbsp;|&nbsp;<a href="">文章</a>&nbsp;|&nbsp;<a href="">视频</a>&nbsp;|&nbsp;<a href="">留言</a>
	</div>
	<div class="bottombar">浙ICP备######号</div>
  
    <script src="${ctx}/js/jquery-1.11.1.min.js"></script>
    <script src="${ctx}/js/bootstrap.min.js"></script>
  </body>
</html>


三、微信模板美化
  发现一个网站,效果不错。http://xiumi.us/,提供大量的模板。

四、使用JQuery Mobile开发心理测评网站
  JQuery Mobile用起来还挺方便。体验地址:http://www.day2up.com/post1.htm
  • 大小: 169.7 KB
  • 大小: 529.5 KB
分享到:
评论

相关推荐

    java 微信退款接口

    总结来说,Java微信退款接口涉及到的技术点有Java网络编程、HTTPS安全通信、PKCS12证书管理、数字签名、JSON数据处理以及错误处理。理解并熟练掌握这些知识,将有助于开发者成功实现微信退款功能。

    java微信登录授权demo

    总结,Java微信登录授权涉及到OAuth2.0授权流程、微信API的调用以及数据的处理。通过理解并实践这些步骤,你可以有效地在你的应用中集成这一功能,提供便捷的微信登录体验。同时,对"chapter-06"中的代码进行深入...

    微信开发学习总结(四)——自定义菜单——自定义菜单创建接口——项目源码

    微信开发学习总结(四)——自定义菜单——自定义菜单创建接口——项目源码; 博客:微信开发学习总结(四)——自定义菜单——自定义菜单创建接口; https://blog.csdn.net/qq_29914837/article/details/82928890

    微信开发学习总结(三)——消息管理—接收普通消息—(1)文本消息——项目源码

    微信开发学习总结(三)——消息管理—接收普通消息—(1)文本消息——项目源码; 参考博客: https://blog.csdn.net/qq_29914837/article/details/82903594

    微信开发jar包

    微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用的jar包总结和归纳微信开发需要用...

    java微信登陆

    总结起来,Java微信登录涉及前后端的交互,包括获取用户授权、处理微信API请求以及集成相关SDK。通过理解和实践这些步骤,开发者可以成功地将微信登录功能整合进自己的应用中。提供的"java微信登陆demo"应该是一个...

    微信公众号开发Java版-学习总结(csdn)————程序.pdf

    微信公众号开发Java版-学习总结(csdn)————程序

    java springmvc实现微信运动数据解密

    其中,微信作为一个集社交、支付、生活服务等功能于一体的超级应用,其开发接口为开发者提供了丰富的功能支持。本文将详细介绍如何使用Java SpringMVC框架对接收到的微信运动数据进行解密处理。 #### 一、背景介绍 ...

    java开发的微信小游戏狼人杀

    总结,开发Java版的微信小游戏狼人杀是一项综合性的工程,涵盖了Java编程、游戏逻辑设计、UI制作、网络通信等多个领域。开发者需要具备扎实的编程基础,良好的逻辑思维,以及一定的美术和设计能力。通过不断地学习和...

    java微信退款的代码片段 支持部分退款

    ### Java微信退款功能详解 #### 一、概述 在电商及各类在线交易场景中,退款功能是必不可少的一个环节。微信支付作为国内主流的第三方支付工具之一,提供了丰富的API接口来支持商家实现各种支付与退款需求。本文将...

    java项目之微信休闲小游戏(源码+说明文档+演示视频).zip

    这是一个基于Java技术的毕业设计或课程设计项目,主要涉及微信平台上的休闲小游戏开发。通过提供的压缩包文件,我们可以深入理解并学习到多个重要的Java编程和软件开发知识点。 首先,从"所需开发环境.txt"文件来看...

    微信公众平台java开发详解.zip_微信公众平台java开发详解_微信开发 java

    本次的教程主要是对微信公众平台开发者模式的讲解,网络上很多类似文章,但很多都让初学微信开发的人一头雾水,所以总结自己的微信开发经验,将微信开发的整个过程系统的列出,并对主要代码进行讲解分析,让初学者...

    java微信支付DEMO, 微信JSAPI支付, 微信退款, 微信提现, 微信付款查询

    总结来说,这个Java微信支付DEMO是开发者实现微信支付功能的宝贵资源,它提供了完整的业务流程,可以帮助开发者快速理解和接入微信支付系统,同时也展示了如何使用Maven进行项目管理和构建。对于Java后端开发者,...

    java微信小程序支付demo

    总结,Java微信小程序支付涉及前后端的协同工作,从接口开发到支付回调,再到异常处理和安全策略,每个环节都需要细致考虑。理解并掌握这些知识点,对于构建稳定、安全的微信支付系统至关重要。

    微信开发学习总结(三)——消息管理(2)-接受普通消息和被动回复用户消息——项目源码

    微信开发学习总结(三)——消息管理(2)-接受普通消息和被动回复用户消息——项目源码; 博客:微信开发学习总结(三)——消息管理(2)-接受普通消息和被动回复用户消息; ...

    java微信开发之上传下载多媒体文件_.docx

    ### Java微信开发之上传下载多媒体文件 #### 一、引言 在微信开发过程中,上传和下载多媒体文件是一项常见的需求。这些多媒体文件包括但不限于图片、音频、视频等。本篇文章将详细介绍如何使用Java来实现这一功能,...

    微信公众平台java开发代码

    微信公众平台深度开发JAVA版 1.课程研发环境 开发语言:JAVA WEBServer:TOMAT DATABASE:MySQL 开发工具:myeclipse、MySQL-Front等 其他:在手机应用中的CSS3+div布局、DWR、mybatis、gson、quartz、generator等 ...

    java企业微信和钉钉向普通用户发送消息

    总结来说,本案例提供了一个实用的起点,通过学习`RemoteServiceUtil.java`、`AccessToken.java`、`DingDingNotify.java`、`WeiXinNotify.java`这四个文件,你可以理解如何利用Java与企业微信和钉钉进行集成,实现向...

    java 微信OAuth2.0网页授权登陆源码

    总结,这个Java微信OAuth2.0网页授权登录源码提供了从用户授权到获取和使用微信用户信息的完整流程,对于开发微信相关的Web应用非常有价值。通过深入研究和实践,你可以有效地将微信登录功能整合到自己的项目中,...

    python前端c语言c++java微信小程序Linux嵌入式开发+驱动开发PHP最全资源

    根据提供的标题、描述和部分上下文内容,我们可以总结出该资源集合主要涵盖了多个IT领域的学习资料与工具,包括但不限于编程语言、软件开发框架、特定技术领域等。下面将逐一介绍这些知识点及其相关内容。 ### 1. ...

Global site tag (gtag.js) - Google Analytics