温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java怎么实现微信公众平台后台接入

发布时间:2021-09-06 16:23:31 来源:亿速云 阅读:207 作者:chen 栏目:编程语言

这篇文章主要讲解了“java怎么实现微信公众平台后台接入”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java怎么实现微信公众平台后台接入”吧!

一、前期准备

项目是用maven构建,直接导入到eclipse即可,jdk的版本为1.8.0_111 ,这两项都可以根据实际需求进行修改,最终达成war发布到服务器中即可。

二、实战演练

操作前,先阅读一下官方的文档,先整体有个思路流程,官方地址参考

1.设置成开发者模式:

登录微信公众平台后台后,点「功能」-「高级功能」-「开发模式」,进入开发模式,如果公众平台显示「尚未成为开发者」,就点击「成为开发者」

2.填写服务器配置:

点「开发」-「基本配置」-「填写服务器配置」如图1~如3

java怎么实现微信公众平台后台接入

图1

java怎么实现微信公众平台后台接入

图2

java怎么实现微信公众平台后台接入

图3

3.示例代码:

SHA1.java

package com.dqiang.demo;   public class SHA1 {  private final int[] abcde = { 0x67452301, 0xefcdab89, 0x98badcfe,   0x10325476, 0xc3d2e1f0 };  // 摘要数据存储数组  private int[] digestInt = new int[5];  // 计算过程中的临时数据存储数组  private int[] tmpData = new int[80];    // 计算sha-1摘要  private int process_input_bytes(byte[] bytedata) {  // 初试化常量  System.arraycopy(abcde, 0, digestInt, 0, abcde.length);  // 格式化输入字节数组,补10及长度数据  byte[] newbyte = byteArrayFormatData(bytedata);  // 获取数据摘要计算的数据单元个数  int MCount = newbyte.length / 64;  // 循环对每个数据单元进行摘要计算  for (int pos = 0; pos < MCount; pos++) {   // 将每个单元的数据转换成16个整型数据,并保存到tmpData的前16个数组元素中   for (int j = 0; j < 16; j++) {   tmpData[j] = byteArrayToInt(newbyte, (pos * 64) + (j * 4));   }   // 摘要计算函数   encrypt();  }  return 20;  }    // 格式化输入字节数组格式  private byte[] byteArrayFormatData(byte[] bytedata) {  // 补0数量  int zeros = 0;  // 补位后总位数  int size = 0;  // 原始数据长度  int n = bytedata.length;  // 模64后的剩余位数  int m = n % 64;  // 计算添加0的个数以及添加10后的总长度  if (m < 56) {   zeros = 55 - m;   size = n - m + 64;  } else if (m == 56) {   zeros = 63;   size = n + 8 + 64;  } else {   zeros = 63 - m + 56;   size = (n + 64) - m + 64;  }  // 补位后生成的新数组内容  byte[] newbyte = new byte[size];  // 复制数组的前面部分  System.arraycopy(bytedata, 0, newbyte, 0, n);  // 获得数组Append数据元素的位置  int l = n;  // 补1操作  newbyte[l++] = (byte) 0x80;  // 补0操作  for (int i = 0; i < zeros; i++) {   newbyte[l++] = (byte) 0x00;  }  // 计算数据长度,补数据长度位共8字节,长整型  long N = (long) n * 8;  byte h8 = (byte) (N & 0xFF);  byte h7 = (byte) ((N >> 8) & 0xFF);  byte h7 = (byte) ((N >> 16) & 0xFF);  byte h6 = (byte) ((N >> 24) & 0xFF);  byte h5 = (byte) ((N >> 32) & 0xFF);  byte h4 = (byte) ((N >> 40) & 0xFF);  byte h3 = (byte) ((N >> 48) & 0xFF);  byte h2 = (byte) (N >> 56);  newbyte[l++] = h2;  newbyte[l++] = h3;  newbyte[l++] = h4;  newbyte[l++] = h5;  newbyte[l++] = h6;  newbyte[l++] = h7;  newbyte[l++] = h7;  newbyte[l++] = h8;  return newbyte;  }    private int f1(int x, int y, int z) {  return (x & y) | (~x & z);  }    private int f2(int x, int y, int z) {  return x ^ y ^ z;  }    private int f3(int x, int y, int z) {  return (x & y) | (x & z) | (y & z);  }    private int f4(int x, int y) {  return (x << y) | x >>> (32 - y);  }    // 单元摘要计算函数  private void encrypt() {  for (int i = 16; i <= 79; i++) {   tmpData[i] = f4(tmpData[i - 3] ^ tmpData[i - 8] ^ tmpData[i - 14]    ^ tmpData[i - 16], 1);  }  int[] tmpabcde = new int[5];  for (int i1 = 0; i1 < tmpabcde.length; i1++) {   tmpabcde[i1] = digestInt[i1];  }  for (int j = 0; j <= 19; j++) {   int tmp = f4(tmpabcde[0], 5)    + f1(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4]    + tmpData[j] + 0x5a827999;   tmpabcde[4] = tmpabcde[3];   tmpabcde[3] = tmpabcde[2];   tmpabcde[2] = f4(tmpabcde[1], 30);   tmpabcde[1] = tmpabcde[0];   tmpabcde[0] = tmp;  }  for (int k = 20; k <= 39; k++) {   int tmp = f4(tmpabcde[0], 5)    + f2(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4]    + tmpData[k] + 0x6ed9eba1;   tmpabcde[4] = tmpabcde[3];   tmpabcde[3] = tmpabcde[2];   tmpabcde[2] = f4(tmpabcde[1], 30);   tmpabcde[1] = tmpabcde[0];   tmpabcde[0] = tmp;  }  for (int l = 40; l <= 59; l++) {   int tmp = f4(tmpabcde[0], 5)    + f3(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4]    + tmpData[l] + 0x8f1bbcdc;   tmpabcde[4] = tmpabcde[3];   tmpabcde[3] = tmpabcde[2];   tmpabcde[2] = f4(tmpabcde[1], 30);   tmpabcde[1] = tmpabcde[0];   tmpabcde[0] = tmp;  }  for (int m = 60; m <= 79; m++) {   int tmp = f4(tmpabcde[0], 5)    + f2(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + tmpabcde[4]    + tmpData[m] + 0xca62c1d6;   tmpabcde[4] = tmpabcde[3];   tmpabcde[3] = tmpabcde[2];   tmpabcde[2] = f4(tmpabcde[1], 30);   tmpabcde[1] = tmpabcde[0];   tmpabcde[0] = tmp;  }  for (int i2 = 0; i2 < tmpabcde.length; i2++) {   digestInt[i2] = digestInt[i2] + tmpabcde[i2];  }  for (int n = 0; n < tmpData.length; n++) {   tmpData[n] = 0;  }  }    // 4字节数组转换为整数  private int byteArrayToInt(byte[] bytedata, int i) {  return ((bytedata[i] & 0xff) << 24) | ((bytedata[i + 1] & 0xff) << 16)   | ((bytedata[i + 2] & 0xff) << 8) | (bytedata[i + 3] & 0xff);  }    // 整数转换为4字节数组  private void intToByteArray(int intValue, byte[] byteData, int i) {  byteData[i] = (byte) (intValue >>> 24);  byteData[i + 1] = (byte) (intValue >>> 16);  byteData[i + 2] = (byte) (intValue >>> 8);  byteData[i + 3] = (byte) intValue;  }    // 将字节转换为十六进制字符串  private static String byteToHexString(byte ib) {  char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',   'B', 'C', 'D', 'E', 'F' };  char[] ob = new char[2];  ob[0] = Digit[(ib >>> 4) & 0X0F];  ob[1] = Digit[ib & 0X0F];  String s = new String(ob);  return s;  }    // 将字节数组转换为十六进制字符串  private static String byteArrayToHexString(byte[] bytearray) {  String strDigest = "";  for (int i = 0; i < bytearray.length; i++) {   strDigest += byteToHexString(bytearray[i]);  }  return strDigest;  }    // 计算sha-1摘要,返回相应的字节数组  public byte[] getDigestOfBytes(byte[] byteData) {  process_input_bytes(byteData);  byte[] digest = new byte[20];  for (int i = 0; i < digestInt.length; i++) {   intToByteArray(digestInt[i], digest, i * 4);  }  return digest;  }    // 计算sha-1摘要,返回相应的十六进制字符串  public String getDigestOfString(byte[] byteData) {  return byteArrayToHexString(getDigestOfBytes(byteData));  }    public static void main(String[] args) {  String data = "tokenDemo";  System.out.println(data);  String digest = new SHA1().getDigestOfString(data.getBytes());  System.out.println(digest);  } }

weChatJavaTokenValidate.java

package com.dqiang.demo;   import java.io.IOException; import java.util.Arrays; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;   /**  * @author StemQ  * @version v1.0  * Blog:http://blog.csdn.net/stemq  * Web:www.dqiang.com  */ public class weChatJavaTokenValidate extends HttpServlet {    private static final long serialVersionUID = -6761982938477193120L;   /* 例如    * URL(服务器地址) http://weixin.xxxx.com/weChatJavaTokenValidate/wechatToken    * Token(令牌) tokenChat    * */   private String TOKEN = "tokenChat"; //根据实际情况自己定义token与基本配置/填写服务器配置Token(令牌)相同  @Override  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  // 微信加密签名  String signature = request.getParameter("signature");  // 随机字符串  String echostr = request.getParameter("echostr");  // 时间戳  String timestamp = request.getParameter("timestamp");  // 随机数  String nonce = request.getParameter("nonce");    String[] str = { TOKEN, timestamp, nonce };  // 字典序排序  Arrays.sort(str);   String bigStr = str[0] + str[1] + str[2];  // SHA1加密  String digest = new SHA1().getDigestOfString(bigStr.getBytes()).toLowerCase();  // 确认请求来至微信  if (digest.equals(signature)) {   response.getWriter().print(echostr);  }  }   }

3.源码下载:weChatJavaTokenValidate

感谢各位的阅读,以上就是“java怎么实现微信公众平台后台接入”的内容了,经过本文的学习后,相信大家对java怎么实现微信公众平台后台接入这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI