Java微信公众平台开发模式+自定义按钮源码

首先,想用开放模式需要先成为开发者。成为开发者有两种写法。

  一是:通过jsp页面,用out.print("echostr")//SHA1加密的字符串;

  二是:通过Servlet。doGet返回exhostr,给微信平台。

  这里我只写第二种方式的请求(这里的请求是以get方式请求),代码如下:

  import java.io.IOException;

  import java.io.InputStream;

  import java.io.PrintWriter;

  import java.util.Arrays;

  import javax.servlet.ServletException;

  import javax.servlet.http.HttpServlet;

  import javax.servlet.http.HttpServletRequest;

  import javax.servlet.http.HttpServletResponse;

  import org.jdom.JDOMException;

  /**

  * 微信统一入口

  * @author slz

  * 2013-7-26 上午10:17:08

  */

  public class WeixinServlet extends HttpServlet {

  public WeixinServlet() {

  super();

  }

  public void destroy() {

  super.destroy();

  }

  /**

  * 微信公众平台  成为开发者验证入口

  */

  public void doGet(HttpServletRequest request, HttpServletResponse
response)

  throws ServletException, IOException {

  doPost(request, response);

  }

  /**

  * 微信公众平台  所有接口入口

  */

  public void doPost(HttpServletRequest request, HttpServletResponse
response)

  throws ServletException, IOException {

  response.setCharacterEncoding("UTF-8");

  request.setCharacterEncoding("UTF-8");

  PrintWriter out = response.getWriter();

  String TOKEN = "sun";//Token

  String signature = request.getParameter("signature");//SHA1加密字符串

  String timestamp = request.getParameter("timestamp");//时间

  String nonce = request.getParameter("nonce");//随机数

  String echoStr = request.getParameter("echostr");//随机字符串

  if(StrUtil.isNotNull(echoStr)){

  String[] a = {TOKEN,timestamp,nonce};

  Arrays.sort(a);//数组排序

  String str = "";

  for(int i=0;i<a.length;i++){

  str += a[i];

  }

  String echo = new SHA1().getDigestOfString(str.getBytes());//SHA1加密

  if(echo.equals(signature)){

  out.print(echoStr);

  }else{

  out.print("123");

  }

  }else{

  try {

  InputStream is = request.getInputStream();

  PushManage push = new PushManage();

  String getXml = push.PushManageXml(is);

  System.out.println("getXml:"+getXml);

  out.print(getXml);

  } catch (JDOMException e) {

  out.print("");

  }

  }

  out.flush();

  out.close();

  }

  }

  当我们完成第一步成为开发者后,我们就可以用微信提供给我们的接口。

  大家应该也看见上面有doPost方法(微信公共平台 
所有接口入口)。当我们成为开发者后,微信用户向我们的公众账号发信息都是post请求。

  //这里写法多种,怎么写就要看你这么获取微信请求时发给我们的XML

  InputStream is = request.getInputStream();

  PushManage push = new PushManage();

  String getXml = push.PushManageXml(is);

  此方法代码如下:

  import java.io.IOException;

  import java.io.InputStream;

  import java.text.SimpleDateFormat;

  import java.util.Date;

  import java.util.List;

  import org.jdom.Document;

  import org.jdom.Element;

  import org.jdom.JDOMException;

  import org.jdom.input.SAXBuilder;

  import org.jdom.output.XMLOutputter;

  /**

  * 微信所有接口入口

  * @author slz

  * 2013-7-26 上午11:01:08

  */

  public class PushManage {

  public String PushManageXml(InputStream is) throws JDOMException{

  String returnStr = "";

  String toName = "";

  String FromName = "";

  String type = "";

  String content = "";

  String con = "";

  String event = "";//自定义按钮事件请求

  String eKey = "";//事件请求key值

  try {

  SAXBuilder sax = new SAXBuilder();

  Document doc = sax.build(is);

  //获得文件的根元素

  Element root = doc.getRootElement();

  //获得根元素的第一级子节点

  List list = root.getChildren();

  for(int j=0;j<list.size();j++){

  //获得结点

  Element first = (Element) list.get(j);

  if(first.getName().equals("ToUserName")){

  toName = first.getValue().trim();

  }else if(first.getName().equals("FromUserName")){

  FromName = first.getValue().trim();

  }else if(first.getName().equals("MsgType")){

  type = first.getValue().trim();

  }else if(first.getName().equals("Content")){

  con = first.getValue().trim();

  }else if(first.getName().equals("Event")){

  event = first.getValue().trim();

  }else if(first.getName().equals("EventKey")){

  eKey = first.getValue().trim();

  }

  }

  } catch (IOException e) {

  e.printStackTrace();

  }

  if(type.equals("event")){

  if(event.equals("subscribe")){//此为关注事件

  content = "您好,欢迎关注我!";

  }

  }else if(type.equals("text")){

  if(con.equals("help")||con.equals("帮助")||con.equals("?")||con.equals("?")){

  content = "帮助中心\n\n";

  }else if(con.equals("bind")||con.equals("绑定")){

  content = "点击 <A \‘\‘" target=_blank>绑定账户</A>";

  }else if(con.startsWith("ck")||con.startsWith("CK")){

  String order_id = "0";

  con.toLowerCase();

  if(con.startsWith("ck")){

  order_id = con.substring(con.indexOf("ck")+2);

  }else if(con.startsWith("CK")){

  order_id = con.substring(con.indexOf("CK")+2);

  }

  if(!"".equals(order_id)){

  StringBuffer sb = new StringBuffer();

  sb.append("订单详情...\n");

  content = sb.toString();

  }else{

  content = "未查询到相应信息,请重新输入!";

  }

  }

  }

  //以下为自定义按钮事件

  if(eKey.equals("music")){//音乐请求

  returnStr = getBackXMLTypeMusic(toName, FromName,

  }else if(eKey.equals("img")){//图片请求

  content

  returnStr = getBackXMLTypeImg(toName, FromName, content);

  }else{//无自定义按钮返回上面的文本信息

  returnStr = getBackXMLTypeText(toName, FromName, content);

  }

  return returnStr;

  }

  public String getBackXMLTypeText(String toName, String FromName, String
content){

  String returnStr = "";

  SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHHmmss");

  String times = format.format(new Date());

  Element rootXML = new Element("xml");

  rootXML.addContent(new Element("ToUserName").setText(FromName));

  rootXML.addContent(new Element("FromUserName").setText(toName));

  rootXML.addContent(new Element("CreateTime").setText(times));

  rootXML.addContent(new Element("MsgType").setText("text"));

  rootXML.addContent(new Element("Content").setText(content));

  Document doc = new Document(rootXML);

  XMLOutputter XMLOut = new XMLOutputter();

  returnStr = XMLOut.outputString(doc);

  return returnStr;

  }

  public String getBackXMLTypeImg(String toName, String FromName, String
content){

  String returnStr = "";

  SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHHmmss");

  String times = format.format(new Date());

  Element rootXML = new Element("xml");

  rootXML.addContent(new Element("ToUserName").setText(FromName));

  rootXML.addContent(new Element("FromUserName").setText(toName));

  rootXML.addContent(new Element("CreateTime").setText(times));

  rootXML.addContent(new Element("MsgType").setText("news"));

  rootXML.addContent(new Element("ArticleCount").setText("3"));

  Element fXML = new Element("Articles");

  Element mXML = null;

  String url = "";

  String ss = "";

  for(int i = 1 ;i<=3;i++){

  mXML = new Element("item");

  mXML.addContent(new Element("Title").setText("图片"+i));

  mXML.addContent(new Element("Description").setText("美女"+i));

  mXML.addContent(new Element("PicUrl").setText(ss));

  mXML.addContent(new Element("Url").setText(url));

  fXML.addContent(mXML);

  }

  rootXML.addContent(fXML);

  Document doc = new Document(rootXML);

  XMLOutputter XMLOut = new XMLOutputter();

  returnStr = XMLOut.outputString(doc);

  return returnStr;

  }

  public String getBackXMLTypeMusic(String toName, String FromName, String
content){

  String returnStr = "";

  SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHHmmss");

  String times = format.format(new Date());

  Element rootXML = new Element("xml");

  rootXML.addContent(new Element("ToUserName").setText(FromName));

  rootXML.addContent(new Element("FromUserName").setText(toName));

  rootXML.addContent(new Element("CreateTime").setText(times));

  rootXML.addContent(new Element("MsgType").setText("music"));

  Element mXML = new Element("Music");

  mXML.addContent(new Element("Title").setText("音乐"));

  mXML.addContent(new Element("Description").setText("音乐让人心情舒畅!"));

  mXML.addContent(new Element("MusicUrl").setText(content));

  mXML.addContent(new Element("HQMusicUrl").setText(content));

  rootXML.addContent(mXML);

  Document doc = new Document(rootXML);

  XMLOutputter XMLOut = new XMLOutputter();

  returnStr = XMLOut.outputString(doc);

  return returnStr;

  }

  }

  以上方法用到的jar包:jdom.jar

Java微信公众平台开发模式+自定义按钮源码,布布扣,bubuko.com

时间: 2024-12-27 23:18:16

Java微信公众平台开发模式+自定义按钮源码的相关文章

微信公众平台开发模式 自定义菜单 指南与菜单新建错误代码分析

简介 开发者获取使用凭证(如何获取凭证)后,可以使用该凭证对公众账号的自定义菜单进行创建.查询和删除等操作. 自定义菜单接口可实现以下类型按钮: click(点击事件): 用户点击click类型按钮后,微信服务器会通过消息接口(event类型)推送点击事件给开发者,并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值进行消息回复. 创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来.建议测试时可以尝试取消关注公众账号后,再次关注,则可以看到创建后的效果. 菜单

Java微信公众平台开发_02_启用服务器配置

一.准备阶段 需要准备事项: 1.一个能在公网上访问的项目: 见:[  Java微信公众平台开发_01_本地服务器映射外网  ] 2.一个微信公众平台账号: 去注册:(https://mp.weixin.qq.com/) 3.策略文件 见:[ Java企业微信开发_Exception_02_java.security.InvalidKeyException: Illegal key size ] 4.微信官方消息加解密工具包 需要下载微信官方的消息加解密的工具包,主要是AES加密工具 下载地址:

微信公众平台开发模式详解图文教程

这部分主要讲解微信公众平台的开发模式,首先说明一下我不是程序员,所以本篇并非讲编程代码之类的,但是由于我们正在开发微信POP营销系统,所以我对开发模式有一定了解,这些了解应该会对准备尝试做微信开发的朋友会有一定帮助,少走部分弯路吧.如果对本篇教程有任何疑问或错漏之处欢迎留言或直接联系我进行更正修改. 微信公众平台开发模式 首先我们要明确开发模式什么可以做,什么不可以做: 一.开发模式可以实现的功能 可以接收用户发送过来的消息,通过你自己开发的系统把对应内容反馈回去.可以接收用户发送过来的地理位置

微信公众平台-开发模式配置 URL Token

微信公众平台-开发模式配置需要拥有自己的服务器,配置页面有明文:"请填写接口配置信息,此信息需要你拥有自己的服务器资源."  这句话就是说有自己的服务器,独立ip,80端口开放的.并且这台服务器要能提供服务,就是说要能够被微信后台的服务器访问到.这需要服务器有一个外网IP.我们的Web Server监听外网IP的80端口之后就能收到微信后台的请求了. 可能很多读者希望能在自己的PC机上做接入的测试,但是笔者建议不要这么做,因为这可能会遇到很多的麻烦.如果你的确想这么做,请注意以下事情:

微信公众平台开发(99) 自定义菜单获取OpenID

关键字 微信公众平台 自定义菜单 OpenID作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin-menu-get-openid.html 在这篇微信公众平台开发教程中,我们将介绍如何在自定义菜单中获得用户的OpenID. 本篇开发教程的实质是微信自定义菜单及OAuth2.0授权的灵活运用. 本文分为以下四个部分: 拥有高级接口权限时的获取(基于view事件) 没有高级接口权限时的获取(基于click事件) 一.拥有高级接口权限 拥有高级接口权限

微信公众平台开发模式

微信公众平台提供了开发者模式,开启开发者模式的方法入下图 在右侧的工具栏最后一项“开发者中心”.点击进入“开发者中心”,需要配置服务器路径URL,和表示符Token.之后完成申请接入: (1)将微信提供的php文件放到服务器上,下载地址:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip; (2)确认文件名和配置URL中的文件名一致; (3)修改php文件中define("TOKEN", "weixin&qu

Java微信公众平台开发--番外篇,对GlobalConstants文件的补充

转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是很完全所以导致部分同学在有些地方做开发的时候遇到了一些阻力,收到这些朋友同学们的咨询反馈之后我也做了一些反思和总结,其中一部分同学说少了GlobalConstants这个文件(这个真心占的不少),还有一部分就是说源码的问题,所以今天特意抽了时间补充下这两点! (一)关于GlobalConstants

java微信公众平台开发事件推送

import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.springframework.stereotype.Service; import com.ifp.weixin.biz.cor

微信公众平台开发(104) 自定义菜单扫一扫、发图片、发地理位置

关键字:微信公众平台 自定义菜单 扫一扫 发图片 发地理位置作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin-menu-new-type.html 自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的重要功能.微信增加了点击菜单后调起扫一扫(支持二维码/一维码).发图片.发地理位置的能力,需开发实现.原有自定义菜单开发权限的公众号,均可获得以上能力. 在这篇微信公众平台开发教程中,我们将介绍如何在自定义菜单上开发扫一扫.发图片.发地理