欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

wechat-0010,微信公众号,接入微信公众平台

程序员文章站 2023-12-24 10:53:58
...

接入准备:

 1、有一个能在公网*问的项目

     可以用内网穿透(推荐使用natapp),微信接入必须使用80端口或443端口,某壳现在需要花钱才能使用80端口,果断放弃

natapp的使用文章,参考博客 http://www.cnblogs.com/shirui/p/7308856.html

2、有一个微信公众号,个人可以申请订阅号,没有的话不妨申请一个,也可以申请微信号接口测试号

    微信官网 https://mp.weixin.qq.com/

3、策略文件 报illegal key size异常时见

    博客:http://www.cnblogs.com/shirui/p/7411735.html

4、微信的加密解密包,从企业微信的加解密包扩展而来,筒子们可以下载企业微信(我的企业微信博客中)自己改造,也可以下载我改造好的。

    下载链接:https://download.csdn.net/download/wrongyao/10393783

5、微信公众平台api

      https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432

开始接入

1、找到微信公众号后台,开发/基本配置/服务器配置

wechat-0010,微信公众号,接入微信公众平台

依此填写三个参数,url需要接入的接口,token和EncodingAESkey,后面两个必须和自己项目上写的保持一致

2、BaseController开发

pom.xml文件

 <!-- Base64 -->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.wechat.common.aes.AesException;
import com.wechat.common.aes.WXBizMsgCrypt;
import com.wechat.common.parameter.Parameter;

@Controller
public class BaseController {

	@RequestMapping(value = "/BaseController")
	public void entryTest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// 微信加密签名
		String msgSignature = request.getParameter("signature");
		// 时间戳
		String timeStamp = request.getParameter("timestamp");
		// 随机数
		String nonce = request.getParameter("nonce");
		// 随机字符串
		String echoStr = request.getParameter("echostr");

		PrintWriter out = null;
		try {
			// 创建加密类
			WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(Parameter.TOKEN, Parameter.ENCODINGAESKEY, Parameter.APPID);

			// 比对msgSignature 用token, timeStamp, nonce加密的参数是否一致,一致证明该接口来自微信,异常则不是来自微信
			String result = wxcpt.verifyUrl_WXGZ(msgSignature, Parameter.TOKEN, timeStamp, nonce, echoStr);

			// 校验成功原样放回echoStr
			out = response.getWriter();
			out.print(result);

		} catch (AesException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (out != null) {
				out.close();
				out = null; // 释放资源
			}
		}
	}
}

根据微信公众平台的api可以知道大致校验逻辑如下

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

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

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

4)返回echoStr则表示接入成功

前面三步微信的加密解密包都可以帮我直接完成,将加解密文件引入自己的项目,就可以正常调用了,下面是项目结构。

wechat-0010,微信公众号,接入微信公众平台

3、返回值的综述

相信看完上面的返回值echoStr,大家有那么点疑惑。这个echoStr是在微信公众号平台传入的随机数,可以直接获取。那是不是可以直接返回echoStr呢,答案是可以的,直接返回这个值,可以直接接入。

那么问题来了,为什么还需要做加密解密等一系列操作呢?

为了安全起见,我们需要判断一个陌生的链接是不是来自微信,通过上述的做法就可以实现。也算是一种反爬虫手段

 

 

相关标签: 微信公众号

上一篇:

下一篇: