一、申请测试公众号
用自己的微信扫一扫就可以申请,各个接口权限也都是开着的。
二、在spring工程下写好一个controller
要保证能在你的电脑上成功启动。
package com.aim.jsr.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* Created by Amy on 2018/1/26.
*/
@RestController
public class WechatController {
private String TOKEN = "good";
/**
* @param signature 微信加密签名,结合了开发者填写的token参数和请求中的timestamp参数、nonce参数
* @param timestamp 时间戳
* @param nonce 随机数
* @param echostr 随机字符串
* @return
*/
@GetMapping("/wxdemo")
public String test(@RequestParam("signature") String signature,
@RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce,
@RequestParam("echostr") String echostr) {
//将token、timestamp、nonce三个参数进行字典序排序
String sortString = sort(TOKEN, timestamp, nonce);
//将三个参数字符串拼接成一个字符串进行sha1加密
String myString = sha1(sortString);
//开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if (myString != null && myString != "" && myString.equals(signature)) {
System.out.println("签名校验通过");
//如果检验成功原样返回echostr,微信服务器接收到此输出,才会确认检验完成。
return echostr;
} else {
System.out.println("签名校验失败");
return "";
}
}
public String sort(String token, String timestamp, String nonce) {
String[] strArray = {token, timestamp, nonce};
Arrays.sort(strArray);
StringBuilder sb = new StringBuilder();
for (String str : strArray) {
sb.append(str);
}
return sb.toString();
}
public String sha1(String str) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.update(str.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
}
能看到这个controller里能接收的token为“good”。
三、接口配置信息
在这里我们需要一个url和一个token。这个url指的是能够接收处理微信服务器发送的GET/POST请求的地址,并且是已经存在的,现在就能够在浏览器访问到的地址,这就要求我们先把公众帐号后台处理程序开发好(至少应该完成了对GET请求的处理)并部署在公网服务器上。这里我用到了natapp来实现内网穿透,将本机ip地址部署到公网服务器上,这个方法是免费的呦( ´∀`),短期内进行测试接口还是可以的,但是缺点是域名会随机的进行改变,不利于长期进行微信开发。
具体步骤介绍:
1、下载natapp
natapp是基于ngrok的国内高速内网穿透服务商。
2、进入natapp官网,右上角注册一个natapp账号
注册成功后,进入如下界面,购买一个免费隧道
点击免费购买即可。然后回到首页,点击我的隧道
能看到这些信息就算可以了。
3、下载config.ini
使用本地配置文件config.ini,可以将配置保存起来,免去每次运行都输入authtoken等基础配置。
打开这个文件,然后把微信接口测试里面的
把上面那张图的authtoken复制后填入这里的authtoken的等号后面。
4、双击运行natapp.exe
这个时候就能看到这样的界面了
这就说明你的本机ip地址+端口号已经映射成了红色框框里面的地址,这是一个外网地址。
用这个网址放到浏览器网址里,尝试链接一个你本机的端口号为8080的项目,看看能不能成功,如果运行完界面与之前的是一样的,就说明内网穿透成功了。
把这个地址复制下来,然后后面加上上面那个controller的接口,变成:http://wh5gh6.natappfree.cc/wxdemo,把这个地址放置到微信接口测试页面的URL里,把上面controller里面的token:“good”,也填到下面的token框里面(这个token可以随意填写,但是要和后台一致)
把后台springboot项目打开,然后点击提交按钮,出现配置成功的字样就可以了。
然后去掉url里面的http://,把剩下的信息填入到下面的js接口域名中就可以了。
嗯,亲测好用。
如果有什么问题可以在底下评论,大家一起探讨。
感谢原博主,当时解决了我的问题。