微信开发环境搭建
1 . 申请微信测试公众号
.
微信公众号申请地址
通过上面链接,进入如下图的界面,并点击登录,会出现一个二维码,用微信扫码
登录成功后,就可以看到腾讯分配给我们的测试公众号的信息了。如下图所示
2 . 配置Ngrok
.
因为微信用户每次向公众号发起请求时,微信服务器会先接收到用户的请求,然后再转发到我们的服务器上,也就是说,微信服务器是要和我们的服务器进行网络交互,所以我们必须保证我们的服务器外网可以访问到,这种部署到公网服务器进行测试的做法对于我们开发者来说简直是噩梦。所以我们借助于第三方软件Ngrok。
Ngrok是一个免费的软件Ngrok,使用Ngrok后,我们就可以实现内网穿透,也就是说我们可以将内网的服务器映射到外网给 别人访问,这对于我们在本地开发环境中调试微信代码是以及给用户演示一些东西非常快速和有帮助的,因为可以直接使用我们自己的内网的电脑作为服务器。
2.1 下载ngork
.
下载地址由此进入
点击上面地址,进入如下界面
点击‘立即下载’,就会跳到选择版本的页面,选择合适自己的版本下载。
.
2 . 2 将下载完毕后的压缩包解压到任意路径下,我这里是D:\ngork_window文件夹下。
.
2 . 3 之后回到 https://natapp.cn/ 页面,注册一个账号,并登陆,之后购买一个免费的隧道,
点击下图的购买隧道–》免费隧道,配置不做更改,直接确定即可
2 . 4 购买成功之后,在我的隧道有如下图所示的图片。
.
2 . 5 点击‘配置’按钮进行简单配置,如下图所示
注意:
上图中的authtoken参数是在登陆ngork时要用到的,需要将它填写到config.ini配置文件中,具体步骤在在下方步骤会有提及。
上图中本地地址、本地端口这两个参数,是要映射到外网的ip:端口号,ip填写本机即可,端口号填写要启动tomcat的端口号即可。
.
2 . 6 添加config.ini的配置文件
下载config.ini文件地址由此进入
.
2 . 7 将下载好的config.ini配置件放在ngork的解压目录下
.
2 . 8 左键单击config.ini文件,选择编辑进入如下界面,将在2.5步骤上获得authtoken参数填入config.ini配置文件中的authtoken后面,具体如下图所示,之后保存,关闭。
.
2 . 9 左键双击运行natapp.exe,运行成功如下图
上图中
我们可以通过上图中的http://qfh8rd.natappfree.cc来访问本机中提供的web服务
注:本机web服务地址要是127.0.0.1:8080
3 . 连接微信服务器
.
3 . 1 创建一个springboot工程,写一个简单的控制层具体代码如下:
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
@RestController
@RequestMapping("/weixin")
public class WxController {
private static String TOKEN = "guan";
private Logger logger = LoggerFactory.getLogger(WxController.class);
@RequestMapping(value = "/show.do", method = RequestMethod.GET)
public String show(String signature, String timestamp, String nonce, String echostr) {
logger.info("签名=" + signature);
logger.info("时间戳=" + timestamp);
logger.info("随机数=" + nonce);
logger.info("随机字符串=" + echostr);
//排序
String sortString = sort(TOKEN, timestamp, nonce);
//加密
String mySignature = sha1(sortString);
//校验签名
if (mySignature != null && mySignature != "" && mySignature.equals(signature)) {
System.out.println("签名校验通过。");
//如果检验成功输出echostr,微信服务器接收到此输出,才会确认检验完成。
//response.getWriter().println(echostr);
return echostr;
} else {
System.out.println("签名校验失败.");
return "";
}
}
/**
* 排序方法
* @param token
* @param timestamp
* @param nonce
* @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();
}
/**
* 将字符串进行sha1加密
* @param str 需要加密的字符串
* @return 加密后的内容
*/
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 "";
}
}
.
3 . 2 启动springboot工程,等待运行成功后进行进入申请测试公众号的界面,找到腾讯分配给我门的测试公众号,如下图所示
.
注意:
在上图中的URL参数中填写启动natapp时给的外部地址。
在上图中的Token的参数,此参数在创建springboot工程里控制层里自己定义的。具体可以查看上述代码里的token的值。
注意:因为我们注册的隧道是免费,我们每次启动分配的地址是随机的。所以每次都不一样。
.
3 . 3 单击提交,若成功提示,会在上方弹出配置成功,并且URL和Token的参数输入框会隐去,失败则弹出配置失败的提示。失败的话继续尝试或者查看自己代码是否启动和netapp启动是否报错。
.
3 . 4 连接成功就可以进行微信的业务的开发了,具体步骤请参考微信的接口文档。
微信接口文档由次进入