微信公众平台Java (SpringBoot)开发----服务接入与校验(阿里云ECS)(一)

关于微信公众平台订阅号、服务号、企业号的申请,不在本系列文章关注的内容,通过微信公众平台,根据官网指导很容易完成。

本系列文章主要通过 Java 实现微信公众平台的相关功能,微信公众平台wiki 相关的实例都是以 python 实现。

文章实例都基于 SpringBoot 框架,如果对 SpringBoot 框架不了解自个网上学习了解一下,这是一个很优秀的值得学习的框架,可为你省去很大的工程搭建时间,似乎天生就是用于微服务和 docker 部署。

一、阿里云申请

阿里云 ECS 服务器的申请,这里不详述。

但一定要开通外网带宽,在勾选开通的端口时,务必把80和443端口勾选上。

二、 ECS 服务器Java 安装

请见:《ubuntu18.04 安装java》

三、微信公众平台服务器配置

登录微信公众平台,点击左栏的 开发设置-->服务器配置-->修改配置。

本步骤需要在五、发布 Java 微服务至 ECS 服务器成功后,才能提交成功。

四、服务接入校验 java 代码

@RestController
public class WXAccessCheckController {
	
    @Value("${knowbetter.weixin.dev.token}")
    private String wxDevToken;
    
	@GetMapping("/wx/access/check")	
	public String accessCheck(String signature, String timestamp,String nonce,String echostr) throws Exception {
		System.out.println(System.currentTimeMillis());
		if(false==checkSignature(signature, timestamp,nonce,echostr)){
			return "fail";
		}
		return echostr;
	}

	private boolean checkSignature(String signature, String timestamp, String nonce, String echostr) throws NoSuchAlgorithmException, UnsupportedEncodingException {
		//定义数组
		String[] array={wxDevToken,timestamp,nonce};
		
		//对数组排序
		Arrays.sort(array);
		
		//生成字符串
		StringBuffer sb=new StringBuffer();
		for(String item:array){
			sb.append(item);
		}
		
		//进行sha1加密
		String sha1Result=getSha1(sb.toString());
		return sha1Result.equals(signature);
	}

	private String getSha1(String string) throws NoSuchAlgorithmException, UnsupportedEncodingException {
		
		return CryptoUtils.getSha1(string);
	}

}

CryptoUtils.getSha1(string)方法实现如下:(本代码摘录于网上)

public static String getSha1(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException {
	    if (null == str || str.length() == 0){
	        return null;
	    }
	    char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
	            'a', 'b', 'c', 'd', 'e', 'f'};
	    try {
	        MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
	        mdTemp.update(str.getBytes("UTF-8"));

	        byte[] md = mdTemp.digest();
	        int j = md.length;
	        char[] buf = new char[j * 2];
	        int k = 0;
	        for (int i = 0; i < j; i++) {
	            byte byte0 = md[i];
	            buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
	            buf[k++] = hexDigits[byte0 & 0xf];
	        }
	        return new String(buf);
	    } catch (Exception e) {
	        e.printStackTrace();
	        return null;
	    }
	}

五、发布 Java 微服务至 ECS 服务器

本人实例的工程名称为:knowbetter-weixin-service,生成的工程包为:knowbetter-service-0.0.1-SNAPSHOT.jar

把工程包knowbetter-service-0.0.1-SNAPSHOT.jar上传至 ECS服务器的/tmp 下(由于是实例才放在/tmp 下,实际的项目发布应对发布的目录制定一个规则)

本文实例未启动 https,没有配置 nginx,直接通过微信平台访问阿里云的服务器

远程登录 ecs 服务器,进入/tmp 目录执行服务启动命令,启动端口为80:

nohup java -Xms128m -Xmx128 -Xmx512m -jar /tmp/knowbetter-service-0.0.1-SNAPSHOT.jar --server.port=80 --knowbetter.weixin.dev.token=QAZXSWEDColmjuUJYHGSDLO 2>&1 >/tmp/knowbetter.log &


tail -n 200 -f /tmp/knowbetter.log

参数--knowbetter.weixin.dev.token的值为微信公众平台设置的 token,可通过点击左栏的开发-->开发设置  查看或设置

 

参考:

https://www.cnblogs.com/jerehedu/p/6377759.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值