文档章节

java 实现微信公众平台的接口

陆朋
 陆朋
发布于 2014/04/23 16:23
字数 451
阅读 412
收藏 21
  1. <%@page  import="java.util.Date"%>

  2. <%@page  import="org.dom4j.Element"%>

  3. <%@page  import="org.dom4j.DocumentHelper"%>

  4. <%@page  import="org.dom4j.Document"%>

  5. <%@page  import="java.io.IOException"%>

  6. <%@page  import="java.io.InputStreamReader"%>

  7. <%@page  import="java.io.BufferedReader"%>

  8. <%@page  import="java.io.Reader"%>

  9. <%@page  import="java.security.MessageDigest"%>

  10. <%@page  import="java.util.Arrays"%>

  11. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

  12. <%

  13. //WeiXinHandler为内部类不能使用非final类型的对象

  14. final String TOKEN="weixin";

  15. final HttpServletRequest final_request=request;

  16. final HttpServletResponse final_response=response;

  17. %>

  18. <%

  19. class WeiXinHandler{

  20. public void valid(){

  21. String echostr=final_request.getParameter("echostr");

  22. if(null==echostr||echostr.isEmpty()){

  23. responseMsg();

  24. }else{

  25. if(this.checkSignature()){

  26. this.print(echostr);

  27. }else{

  28. this.print("error");

  29. }

  30. }

  31. }

  32. //自动回复内容

  33. public void responseMsg(){

  34. String postStr=null;

  35. try{

  36. postStr=this.readStreamParameter(final_request.getInputStream());

  37. }catch(Exception e){

  38. e.printStackTrace();

  39. }

  40. //System.out.println(postStr);

  41. if (null!=postStr&&!postStr.isEmpty()){

  42. Document document=null;

  43. try{

  44. document = DocumentHelper.parseText(postStr);

  45. }catch(Exception e){

  46. e.printStackTrace();

  47. }

  48. if(null==document){

  49. this.print("");

  50. return;

  51. }

  52. Element root=document.getRootElement();

  53. String fromUsername = root.elementText("FromUserName");

  54. String toUsername = root.elementText("ToUserName");

  55. String keyword = root.elementTextTrim("Content");

  56. String time = new Date().getTime()+"";

  57. String textTpl = "<xml>"+

  58. "<ToUserName><![CDATA[%1$s]]></ToUserName>"+

  59. "<FromUserName><![CDATA[%2$s]]></FromUserName>"+

  60. "<CreateTime>%3$s</CreateTime>"+

  61. "<MsgType><![CDATA[%4$s]]></MsgType>"+

  62. "<Content><![CDATA[%5$s]]></Content>"+

  63. "<FuncFlag>0</FuncFlag>"+

  64. "</xml>";

  65.  

  66. if(null!=keyword&&!keyword.equals(""))

  67. {

  68. String msgType = "text";

  69. String contentStr = "Welcome to wechat world!";

  70. String resultStr = textTpl.format(textTpl, fromUsername, toUsername, time, msgType, contentStr);

  71. this.print(resultStr);

  72. }else{

  73. this.print("Input something...");

  74. }

  75.  

  76. }else {

  77. this.print("");

  78. }

  79. }

  80. //微信接口验证

  81. public boolean checkSignature(){

  82. String signature = final_request.getParameter("signature");

  83. String timestamp = final_request.getParameter("timestamp");

  84. String nonce = final_request.getParameter("nonce");

  85. String token=TOKEN;

  86. String[] tmpArr={token,timestamp,nonce};

  87. Arrays.sort(tmpArr);

  88. String tmpStr=this.ArrayToString(tmpArr);

  89. tmpStr=this.SHA1Encode(tmpStr);

  90. if(tmpStr.equalsIgnoreCase(signature)){

  91. return true;

  92. }else{

  93. return false;

  94. }

  95. }

  96. //向请求端发送返回数据

  97. public void print(String content){

  98. try{

  99. final_response.getWriter().print(content);

  100. final_response.getWriter().flush();

  101. final_response.getWriter().close();

  102. }catch(Exception e){

  103.  

  104. }

  105. }

  106. //数组转字符串

  107. public String ArrayToString(String [] arr){

  108. StringBuffer bf = new StringBuffer();

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

  110. bf.append(arr[i]);

  111. }

  112. return bf.toString();

  113. }

  114. //sha1加密

  115. public String SHA1Encode(String sourceString) {

  116. String resultString = null;

  117. try {

  118. resultString = new String(sourceString);

  119. MessageDigest md = MessageDigest.getInstance("SHA-1");

  120. resultString = byte2hexString(md.digest(resultString.getBytes()));

  121. } catch (Exception ex) {

  122. }

  123. return resultString;

  124. }

  125. public final String byte2hexString(byte[] bytes) {

  126. StringBuffer buf = new StringBuffer(bytes.length * 2);

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

  128. if (((int) bytes[i] & 0xff) < 0x10) {

  129. buf.append("0");

  130. }

  131. buf.append(Long.toString((int) bytes[i] & 0xff, 16));

  132. }

  133. return buf.toString().toUpperCase();

  134. }

  135. //从输入流读取post参数

  136. public String readStreamParameter(ServletInputStream in){

  137. StringBuilder buffer = new StringBuilder();

  138. BufferedReader reader=null;

  139. try{

  140. reader = new BufferedReader(new InputStreamReader(in));

  141. String line=null;

  142. while((line = reader.readLine())!=null){

  143. buffer.append(line);

  144. }

  145. }catch(Exception e){

  146. e.printStackTrace();

  147. }finally{

  148. if(null!=reader){

  149. try {

  150. reader.close();

  151. } catch (IOException e) {

  152. e.printStackTrace();

  153. }

  154. }

  155. }

  156. return buffer.toString();

  157. }

  158. }

  159. %>

  160. <%

  161. WeiXinHandler handler=new WeiXinHandler();

  162. handler.valid();

  163. %>

© 著作权归作者所有

共有 人打赏支持
陆朋
粉丝 8
博文 39
码字总数 30232
作品 0
深圳
后端工程师
私信 提问
Java微信开发_00_资源汇总贴

1.微信公众平台技术文档(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432) 2.微信企业号开发接口文档(http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%BB%E......

rayner
2017/08/07
0
0
在BAE代码部署中遇到问题

@using 你好,想跟你请教个问题:看了您分享的“在百度BAE java环境搭建属于自己的微信公众平台接口”,首先感谢您的无私分享,然后我先现在也申请到了资源,别且建了java-jetty类型应用,但...

山水与共
2014/03/06
329
3
微信公众帐号开发教程第4篇-消息及消息处理工具的封装

工欲善其事必先利其器!本篇内容主要讲解如何将微信公众平台定义的消息及消息相关的操作封装成工具类,方面后期的使用。这里需要明确的是消息其实是由用户发给你的公众帐号的,消息先被微信平...

bliver
2013/11/29
0
2
微信公众账号开发平台 JeeWx 2.0 发布,捷微(敏捷微信开发)

JeeWx,敏捷微信开发,简称“捷微”,捷微是一款免费开源的JAVA微信公众账号开发平台。 平台介绍: 一、简介 jeewx 是一个开源,高效,敏捷的微信开发平台采用JAVA语言,它是基于jeecg这个企...

Jeecg
2014/08/11
16.4K
19
微信发送视频的问题,请指教

微信公众平台,发送视频的接口,要求通过 media_id,请求到下述接口:https://file.api.weixin.qq.com/cgi-bin/media/uploadvideo?access_token=ACCESS_TOKEN ,这个接口用JAVA怎么实现,忘指...

淡定的米哥
2014/12/22
110
0

没有更多内容

加载失败,请刷新页面

加载更多

Spark in action on Kubernetes - Playground搭建与架构浅析

前言 Spark是非常流行的大数据处理引擎,数据科学家们使用Spark以及相关生态的大数据套件完成了大量又丰富场景的数据分析与挖掘。Spark目前已经逐渐成为了业界在数据处理领域的行业标准。但是...

阿里云官方博客
4分钟前
0
0
小白大数据学习路线

学习大数据首先了解大数据技术得板块划分: 数据计算(离线计算):Hadoop、spark 数据计算(实时计算):storm、spartstreaming、flink 其他框架:zookeeper 数据采集:flume、Kafka 数据存...

董黎明
16分钟前
0
0
mariadb 内存占用优化

本文由云+社区发表 作者:工程师小熊 摘要:我们在使用mariadb的时候发现有时候不能启动起来,在使用过程中mariadb占用的内存很大,在这里学习下mariadb与内存相关的配置项,对mariadb进行调...

腾讯云加社区
58分钟前
2
0
spring security 自定义登录认证

spring security 自定义认证登录 1.概要 1.1.简介 spring security是一种基于 Spring AOP 和 Servlet 过滤器的安全框架,以此来管理权限认证等。 1.2.spring security 自定义认证流程 1)认证...

EasyProgramming
58分钟前
1
0
Win下Jenkins-2.138源码编译及填坑笔记

源码编译篇 1、 安装JDK1.8-181,操作系统添加JDK环境变量。Java -version验证一下。 注:Jenkins2.138版本,JDK必须jkd1.8.0-101以上,不支持Java9,Maven必须3.5.3以上。 2、 解压Maven3....

编程SHA
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部