这篇文章主要介绍微信公众平台如何接入Java开发。
将微信公众平台服务号中的功能或其他自定义设计的功能,通过我们自己的项目实现;
准备条件:
1、服务号
2、公网域名及ip
3、服务器
其中服务号需要去微信公众平台注册申请,这里就不演示了;
1、配置服务器
拥有了服务号后需要在后台配置我们的服务器地址及其他信息;(首先需要保证项目已经部署在了服务器上并保证验证接口正常请求)
开发–>基本配置 找到如下页面
AppID和AppSecret需要保存下来牢记
需要把自己服务器的IP配置到IP白名单中,否则在项目中服务器中调用微信接口失败;
在该页面下面配置自己的服务器参数,首次需要填写完后点击提交,
点击提交时微信服务器会向(填写的URL)发送post请求验证填写的tocken,如果请求不到或者其他问题会报Tocken验证失败;
URL:代表服务器上的项目某一个请求接口,点击提交或启用时微信服务器会通过该接口验证,验证通过后所有需要微信服务器发送给开发者的消息或其他都会发送到该接口(但不能直接写服务器的ip需要通过域名访问);
Tocken:可以自定义,但是要和验证接口中的tocken保持一致;
EncodingAESKey:可以使用随机生成的;
2、代码开发(接入时验证)
在公众平台接入服务器时微信服务器会向我们自己的服务发送一个post请求验证输入的tocken及其他指令,所以首先需要编写好验证的请求方法,然后将项目打包后放到服务器上,才可以验证通过;
/**
* 接收微信服务器发送的消息及事件
*/
@Slf4j
@RestController
public class WeiXinController{
//需要和公众平台配置的一致
private static final String TOKEN = "token2020";
@RequestMapping(value = "/wechat")
public String checkToken(HttpServletRequest request) {
String signature = request.getParameter("signature");
// 时间戳
String timestamp = request.getParameter("timestamp");
// 随机数
String nonce = request.getParameter("nonce");
// 随机字符串
String echostr = request.getParameter("echostr");
//第一次将公众号接入时进行校验
if (signature!=null && timestamp != null && nonce != null && echostr !=null) {
boolean checkSignature = checkSignature(signature, timestamp, nonce);
if (checkSignature) {
//如果验证成功,需要将发送过来的随机字符串返回,才可完成验证
return echostr;
}
}
}
/**
* 校验签名
* @param signature 签名
* @param timestamp 时间戳
* @param nonce 随机数
* @return 布尔值
*/
private static boolean checkSignature(String signature,String timestamp,String nonce){
log.info("校验签名:{},{},{}",signature,timestamp,nonce);
String checktext = null;
if (null != signature) {
//对ToKen,timestamp,nonce 按字典排序
String[] paramArr = new String[]{TOKEN,timestamp,nonce};
Arrays.sort(paramArr);
//将排序后的结果拼成一个字符串
String content = paramArr[0].concat(paramArr[1]).concat(paramArr[2]);
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
//对接后的字符串进行sha1加密
byte[] digest = md.digest(content.toString().getBytes());
checktext = byteToStr(digest);
} catch (NoSuchAlgorithmException e){
e.printStackTrace();
}
}
//将加密后的字符串与signature进行对比
return checktext !=null ? checktext.equals(signature.toUpperCase()) : false;
}
private static String byteToStr(byte[] byteArray){
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
private static String byteToHexStr(byte mByte){
char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A','B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4)& 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}
}
到此接入验证完成后微信公众平台服务号中的功能或其他自定义拓展功能就可以在我们自己的项目中进行开发了。
公众号:沉默木头人
CSDN:沉默木头人(ID:qq_44322555)
喜欢感兴趣扫描下面二维码关注吧!
原创不易,不喜勿喷,如果能够帮助到你或对你有所启发欢迎下方留言。
喜欢就开始你无情的三连击:点赞、分享、关注。这将是我写作更多有趣有益有知的好文章的动力;