首页 > 家庭装修 > java版微信开发是什么?

快速发布【家庭装修】相关需求,专业顾问为您服务 快速发布

用此手机号发布,您还可以点击 更换

发布需求
请输入正确的手机号
请输入正确的验证码

您是不是要找:

  • 专家问诊,提供专业建议
  • 急速响应,体验省心
  • 根据需求灵活定制解决方案

java版微信开发是什么?

标签:- 2017-9-19 作者:猫Fine

相信很多人对java版微信开发已经不那么陌生,我也是从一个微信开发的菜鸟经过各种问题的折磨,然后去搜索引擎搜索各种文章阅读,但是基本都是零散的资料,没有一个统一、系统的阐述微信应用如何开发。作者结合自己的实际开发经验,归纳整理出来分享给微信开发的入门者或正在研究的开发者。

 

  准备工作

 

  1.  下载 Jdk1.7  安装

 

  2.  下载 Tomcat 7.0

 

  3.  下载 Myeclipse 6.5

 

  4.  下载 Json-lib第三方jar .

 

  1.      申请一个公网IP地址,发布自己的应用。

 

  例如: 192.168.1.102

 

  2.      打开myeclipse 创建一个工程

 

  3.  创建一个微信应用接入Servlet类

 

  J**A实现类 :WeixinServlet

 

  [java] view plain copy

 

  package com.wx.servlet;

 

  import java.io.IOException;

 

  import java.io.InputStream;

 

  import java.io.OutputStream;

 

  import java.security.MessageDigest;

 

  import java.security.NoSuchAlgorithmException;

 

  import java.util.Arrays;

 

  import java.util.logging.Logger;

 

  import javax.servlet.ServletException;

 

  import javax.servlet.http.HttpServlet;

 

  import javax.servlet.http.HttpServletRequest;

 

  import javax.servlet.http.HttpServletResponse;

 

  import net.sf.json.JSONObject;

 

  import net.sf.json.xml.XMLSerializer;

 

  /**

 

  * @author haibing.xiao

 

  * @since jdk1.6

 

  * @version 1.0

 

  */

 

  public class WeixinServlet extends HttpServlet{

 

  private Logger log =Logger.getLogger(this.getClass().getName());

 

  private static final long serialVersionUID = 1L;

 

  private   String Token;

 

  private   String echostr;

 

  @Override

 

  protected void doGet(HttpServletRequest request, HttpServletResponse response)

 

  throws ServletException, IOException {

 

  connect(request,response);

 

  }

 

  @Override

 

  protected void doPost(HttpServletRequest request, HttpServletResponse response)

 

  throws ServletException, IOException {

 

  message(request,response);

 

  }

 

  /**

 

  *@author haibing.xiao

 

  *@return

 

  *@exception

 

  *@param

 

  *

 

  *

接入连接生效验证

 

  */

 

  private void connect(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{

 

  log.info("RemoteAddr: "+ request.getRemoteAddr());

 

  log.info("QueryString: "+ request.getQueryString());

 

  if(!accessing(request, response)){

 

  log.info("服务器接入失败.......");

 

  return ;

 

  }

 

  String echostr=getEchostr();

 

  if(echostr!=null && !"".equals(echostr)){

 

  log.info("服务器接入生效..........");

 

  response.getWriter().print(echostr);//完成相互认证

 

  }

 

  }

 

  /**

 

  * @author haibing.xiao

 

  * Date 2013-05-29

 

  * @return boolean

 

  * @exception ServletException, IOException

 

  * @param

 

  *

 

  *

用来接收微信公众平台的验证

 

  */

 

  private boolean accessing(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");

 

  if( isEmpty(signature)){

 

  return false;

 

  }

 

  if(isEmpty(timestamp)){

 

  return false;

 

  }

 

  if(isEmpty(nonce)){

 

  return false;

 

  }

 

  if(isEmpty(echostr)){

 

  return false;

 

  }

 

  String[] ArrTmp = { Token, timestamp, nonce };

 

  Arrays.sort(ArrTmp);

 

  StringBuffer sb = new StringBuffer();

 

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

 

  sb.append(ArrTmp[i]);

 

  }

 

  String pwd = Encrypt(sb.toString());

 

  log.info("signature:"+signature+"timestamp:"+timestamp+"nonce:"+nonce+"pwd:"+pwd+"echostr:"+echostr);

 

  if(trim(pwd).equals(trim(signature))){

 

  this.echostr =echostr;

 

  return true;

 

  }else{

 

  return false;

 

  }

 

  }

 

  private String Encrypt(String strSrc) {

 

  MessageDigest md = null;

 

  String strDes = null;

 

  byte[] bt = strSrc.getBytes();

 

  try {

 

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

 

  md.update(bt);

 

  strDes = bytes2Hex(md.digest()); //to HexString

 

  } catch (NoSuchAlgorithmException e) {

 

  System.out.println("Invalid algorithm.");

 

  return null;

 

  }

 

  return strDes;

 

  }

 

  public String bytes2Hex(byte[] bts) {

 

  String des = "";

 

  String tmp = null;

 

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

 

  tmp = (Integer.toHexString(bts[i] & 0xFF));

 

  if (tmp.length() == 1) {

 

  des += "0";

 

  }

 

  des += tmp;

 

  }

 

  return des;

 

  }

 

  public String getEchostr(){

 

  return echostr;

 

  }

 

  /**

 

  *@author haibing.xiao

 

  *@return

 

  *@exception ServletException, IOException

 

  *@param

 

  *

 

  *

XML组装组件

 

  */

 

  private void message(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{

 

  InputStream is = request.getInputStream();

 

  // 取HTTP请求流长度

 

  int size = request.getContentLength();

 

  // 用于缓存每次读取的数据

 

  byte[] buffer = new byte[size];

 

  // 用于存放结果的数组

 

  byte[] xmldataByte = new byte[size];

 

  int count = 0;

 

  int rbyte = 0;

 

  // 循环读取

 

  while (count < size) {

 

  // 每次实际读取长度存于rbyte中

 

  rbyte = is.read(buffer);

 

  for(int i=0;i

 

  xmldataByte[count + i] = buffer[i];

 

  }

 

  count += rbyte;

 

  }

 

  is.close();

 

  String requestStr = new String(xmldataByte, "UTF-8");

 

  try{

 

  manageMessage(requestStr,request,response);

 

  }catch(Exception e){

 

  e.printStackTrace();

 

  }

 

  }

 

  /**

 

  * @author haibing.xiao

 

  * @return

 

  * @exception ServletException, IOException

 

  * @param

 

  *

 

  *

业务转发组件

 

  *

 

  */

 

  private void  manageMessage(String requestStr,HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{

 

  String responseStr;

 

  try {

 

  XMLSerializer xmlSerializer=new XMLSerializer();

 

  JSONObject jsonObject =(JSONObject) xmlSerializer.read(requestStr);

 

  String event =jsonObject.getString("Event");

 

  String msgtype =jsonObject.getString("MsgType");

 

  if("CLICK".equals(event) && "event".equals(msgtype)){ //菜单click事件

 

  String eventkey =jsonObject.getString("EventKey");

 

  if("hytd_001".equals(eventkey)){ // hytd_001 这是好友团队按钮的标志值

 

  jsonObject.put("Content", "欢迎使用好友团队菜单click按钮.");

 

  }

 

  }

 

  responseStr =creatRevertText(jsonObject);//创建XML

 

  log.info("responseStr:"+responseStr);

 

  OutputStream os =response.getOutputStream();

 

  os.write(responseStr.getBytes("UTF-8"));

 

  }   catch (Exception e) {

 

  e.printStackTrace();

 

  }

 

  }

 

  private String creatRevertText(JSONObject jsonObject){

 

  StringBuffer revert =new StringBuffer();

 

  revert.append("");

 

  revert.append("");

 

  revert.append("");

 

  revert.append(""+jsonObject.get("CreateTime")+"");

 

  revert.append("");

 

  revert.append("");

 

  revert.append("0");

 

  revert.append("");

 

  return revert.toString();

 

  }

 

  @Override

 

  public void init() throws ServletException {

 

  Token="test123";

 

  }

 

  private boolean isEmpty(String str){

 

  return null ==str || "".equals(str) ? true :false;

 

  }

 

  private String trim(String str){

 

  return null !=str  ? str.trim() : str;

 

  }

 

  }

 

  4.   本地部署应用  访问//localhost:端口号/上下文/wenxin

 

  5  .申请成为开发者

 

  访问 //mp.weixin.qq.com   ,开启开发者模式。填入URL和taken。

 

  填入URL://外网IP/TestWeixin/weixin 【必须80端】

 

  填入token :  test123【需要与代码中的token保持一致,Token的长度是有限制的,根据笔者的经验最好不超过10个字符。】

 

  好了,以上就是如何java版微信开发了。获取更多资讯,请关注服务购的后续更新哦。


最新文章推荐

家庭装修暂无最新文章查看全部推荐文章>

推荐人才