接入微信公众平台开发

参考来源:

微信公众平台的微信开放文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html

叩丁狼教育高级讲师陈惠老师的视频教程:https://www.bilibili.com/video/av37080662?p=5

叩丁狼教育高级讲师陈惠老师系列文档:https://www.jianshu.com/p/443c905e58a3

注意:首先我们需要搭建一个springmvc项目,详细教程可查看我的博客

前提:首先确保自己本地搭建好springmvc项目并且启动成功能访问;

我教程的项目使用的是:

 

 接下来我们可以通过注册的内网穿透工具natapp给自己分配一个外网域名,将localhost:8080替换为外网域名访问看到的效果一样的,这下我们就能往下操作了

 

接入概述

接入微信公众平台开发,开发者需要按照如下步骤完成:

1、填写服务器配置

2、验证服务器地址的有效性

3、依据接口文档实现业务逻辑

下面详细介绍这3个步骤。

第一步:填写服务器配置

登录微信公众平台官网后,在公众平台官网的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(URL)、Token,其中URL是开发者用来接收微信消息和事件的接口URL。

Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。

 

接入微信公众平台开发_第1张图片

 

 

 

第二步:验证消息的确来自微信服务器

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序

2)将三个参数字符串拼接成一个字符串进行sha1加密

3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

4)java代码示例如下

/**
* URL接入校验
* @return
*/
@RequestMapping(value="weChat",method = RequestMethod.GET)
@ResponseBody
public String validate(String signature,String timestamp,String nonce,String echostr){
//1)将token、timestamp、nonce三个参数进行字典序排序
String[] arr = {WeChatUtil.TOKEN,timestamp,nonce};
Arrays.sort(arr);
//2)将三个参数字符串拼接成一个字符串进行sha1加密
StringBuilder sb = new StringBuilder();
for (String temp : arr) {
sb.append(temp);
}
//自己加密的签名
String mySignature = SecurityUtil.SHA1(sb.toString());
//3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if(mySignature.equals(signature)){
//请原样返回echostr参数内容,则接入生效,成为开发者成功
System.out.println("接入成功");
return echostr;
}
//否则接入失败
System.out.println("接入失败");
return null;
}
5)WeChatUtil.TOKEN 为如下你填的token

接入微信公众平台开发_第2张图片

 6) SecurityUtil工具类内容如下:

package com.test.util;

import java.security.MessageDigest;

public class SecurityUtil {

private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

/**
* encode string
* @param algorithm
* @param str
* @return String
*/
public static String encode(String algorithm, String str) {
if (str == null) {
return null;
}
try {
MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
messageDigest.update(str.getBytes());
return getFormattedText(messageDigest.digest());
} catch (Exception e) {
throw new RuntimeException(e);
}

}

/**
* Takes the raw bytes from the digest and formats them correct.
*
* @param bytes
* the raw bytes from the digest.
* @return the formatted bytes.
*/
private static String getFormattedText(byte[] bytes) {
int len = bytes.length;
StringBuilder buf = new StringBuilder(len * 2);
// 把密文转换成十六进制的字符串形式
for (int j = 0; j < len; j++) {
buf.append(HEX_DIGITS[(bytes[j] >>> 4) & 0x0f]);
buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
}
return buf.toString();
}

public static String MD5(String content){
return SecurityUtil.encode("MD5", content);
}

public static String SHA1(String content){
return SecurityUtil.encode("SHA1", content);
}


}
 7)使用内网穿透启动项目后,http://87dwwe.natappfree.cc/weChat/weChat.do
87dwwe.natappfree.cc为使用natapp分配给我的域名;

接入微信公众平台开发_第3张图片

 

 

 8)填写URl和Token后点击提交,可查看后台控制台会输出接入成功

接入微信公众平台开发_第4张图片

 

你可能感兴趣的:(接入微信公众平台开发)