• 玩玩微信公众号Java版之一:配置微信公众平台服务器信息


    在进行微信公众平台开发前,前先做好准备工作,好了以后,我们可以开始啦!
     
    第一、准备好服务端接口
     
    定义一个http服务接口,主要分为如下几步:
     
    1、创建一个servlet类,用来接收请求:
     
     1 package com.wechat;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintWriter;
     5 
     6 import javax.servlet.ServletException;
     7 import javax.servlet.http.HttpServlet;
     8 import javax.servlet.http.HttpServletRequest;
     9 import javax.servlet.http.HttpServletResponse;
    10 
    11 import org.apache.commons.io.IOUtils;
    12 
    13 import com.wechat.utility.WeChatUtil;
    14 
    15 public class WechatConService extends HttpServlet
    16 {
    17 
    18     private static final long serialVersionUID = 1L;
    19     /**
    20      * 确认请求来自微信服务器
    21      */
    22     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    23     {
    24 
    25         // 微信加密签名
    26         String signature = request.getParameter("signature");
    27         // 时间戳
    28         String timestamp = request.getParameter("timestamp");
    29         // 随机数
    30         String nonce = request.getParameter("nonce");
    31         // 随机字符串
    32         String echostr = request.getParameter("echostr");
    33 
    34         PrintWriter out = response.getWriter();
    35 
    36         System.out.println(signature);
    37         System.out.println(timestamp);
    38         System.out.println(nonce);
    39         System.out.println(echostr);
    40 
    41         // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
    42         if (WeChatUtil.checkSignature(signature, timestamp, nonce))
    43         {
    44             out.print(echostr);
    45         }
    46 
    47         out.close();
    48         out = null;
    49     }
    50 
    51     /**
    52      * 处理微信服务器发来的消息
    53      */
    54     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    55     {
    56         // TODO 消息的接收、处理、响应
    57         System.out.println("接口调用了一次");
    58 
    59         String ret = IOUtils.toString(request.getInputStream(), "utf-8").toString();
    60         System.out.println(ret);
    61 
    62         WeChatMsgBL tWeChatMsgBL = new WeChatMsgBL();
    63         String result = tWeChatMsgBL.dealWechatMsg(ret);
    64 
    65         response.setCharacterEncoding("UTF-8");
    66 
    67         // 返回文本消息,将处理结果返回
    68         PrintWriter out = response.getWriter();
    69 
    70         System.out.println(result);
    71 
    72         out.print(result);
    73 
    74         out.close();
    75 
    76     }
    77 
    78 }
    View Code

    2、配置web.xml

     
     1 <!-- 微信公众号测试接口  add by Damon start-->
     2   <servlet>
     3     <servlet-name>WechatconService</servlet-name>
     4     <servlet-class>com.wechat.WechatConService</servlet-class>
     5   </servlet>
     6   
     7   <servlet-mapping>
     8     <servlet-name>WechatconService</servlet-name>
     9     <url-pattern>/Servlet/WechatconService</url-pattern>
    10   </servlet-mapping> 
    11 
    12  <!-- 微信公众号测试接口  add by Damon end-->
    View Code
     
    3、接口配置校验:
    在配置微信服务信息时,会进行基础支持的校验,只有校验通过才会配置成功,因此我们首先要实现与微信对接的校验功能。具体参见
     1 /**
     2      * 方法名:checkSignature</br> 详述:验证签名</br> 开发人员:Damon</br> 创建时间:2017-07-11
     3      * </br>
     4      * @param signature
     5      * @param timestamp
     6      * @param nonce
     7      * @return
     8      * @throws
     9      */
    10     public static boolean checkSignature(String signature, String timestamp, String nonce)
    11     {
    12         // 1.将token、timestamp、nonce三个参数进行字典序排序
    13         String[] arr = new String[]
    14         { token, timestamp, nonce };
    15         Arrays.sort(arr);
    16 
    17         // 2. 将三个参数字符串拼接成一个字符串进行sha1加密
    18         StringBuilder content = new StringBuilder();
    19         for (int i = 0; i < arr.length; i++)
    20         {
    21             content.append(arr[i]);
    22         }
    23         MessageDigest md = null;
    24         String tmpStr = null;
    25         try
    26         {
    27             md = MessageDigest.getInstance("SHA-1");
    28             // 将三个参数字符串拼接成一个字符串进行sha1加密
    29             byte[] digest = md.digest(content.toString().getBytes());
    30             tmpStr = byteToStr(digest);
    31         }
    32         catch (NoSuchAlgorithmException e)
    33         {
    34             e.printStackTrace();
    35         }
    36 
    37         content = null;
    38         // 3.将sha1加密后的字符串可与signature对比,标识该请求来源于微信
    39         return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
    40     }
    41 
    42     /**
    43      * 方法名:byteToStr</br> 详述:将字节数组转换为十六进制字符串</br> 开发人员:Damon </br>
    44      * 创建时间:2017-07-11 </br>
    45      * @param byteArray
    46      * @return
    47      * @throws
    48      */
    49     private static String byteToStr(byte[] byteArray)
    50     {
    51         String strDigest = "";
    52         for (int i = 0; i < byteArray.length; i++)
    53         {
    54             strDigest += byteToHexStr(byteArray[i]);
    55         }
    56         return strDigest;
    57     }
    58 
    59     /**
    60      * 方法名:byteToHexStr</br> 详述:将字节转换为十六进制字符串</br> 开发人员:Damon</br>
    61      * 创建时间:2017-07-11 </br>
    62      * @param mByte
    63      * @return
    64      * @throws
    65      */
    66     private static String byteToHexStr(byte mByte)
    67     {
    68         char[] Digit =
    69         { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    70         char[] tempArr = new char[2];
    71         tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
    72         tempArr[1] = Digit[mByte & 0X0F];
    73         String s = new String(tempArr);
    74         return s;
    75     }
    View Code

     
    到这里,服务的基本配置就完成了,下面我们来进行验证
     
    第二步,配置微信服务器
     
    URL:你的应用接口公网访问地址(即上面配置的服务器接口地址)
    Token:自己定义的标识
    Endcoding AESKey:加解密密钥
     
    保存信息,微信会进行验证,如果调用成功,则顺利完成配置(可服务器后台打印调用信息以确认)。
     
    配置好,就可以开始我们的开发工作啦!
  • 相关阅读:
    Apple Magic Trackpad All In One
    git tag All In One
    Python 字符串插值 All In One
    Pycharm 如何自定义新建的 Python 文件的注释模版 All in One
    How to Create a New File on Mac with Finder All In One
    Python & PEP 8 & Style Guide All In One
    python 中(序列)内置函数enumerate
    c语言中枚举类型
    c语言中利用函数递归求阶乘
    linux 中sed命令如何删除第一列和最后一列
  • 原文地址:https://www.cnblogs.com/cooldamon/p/7208612.html
Copyright © 2020-2023  润新知