刚开始很简单啦,申请微信公众号:https://mp.weixin.qq.com,选择你要创建的公众号分类,然后填写个人信息,设置一下你申请的公众号各个基本详情,例如图片,名称,认证什么的。
但是如果想和微信服务器对接,就需要搭建自己的服务器。因此就需要拥有公网的ip或者域名。如下:
一般来说搭建外网服务器,有两种方法:
1.如果资金比较充足,可以用购买阿里,腾讯等云服务器,自己搭建外网服务器,再买一个域名,然后备案,就可以进行配置了。
2.可以使用内网穿透技术,购买隧道,在自己本机上搭建服务器,然后映射到外网上。我是用的是natapp这个内网穿透,还有其他的,这里就不一一说明了。https://natapp.cn,需要注册。
说明:免费隧道虽然不要钱,但是无法拥有二级域名,可以自己玩一下。我是买的vip_1型的隧道,然后注册了二级域名,这个域名是外网域名,并且映射到自己电脑的内网ip,已经备案,可以在微信验证时直接使用(微信开发的服务器域名需要备案,否则无法验证)。接下来就需要自己电脑配置natapp了。官方给出的mac和windows的配制方法https://natapp.cn/article/natapp_newbie,
我是mac的:
对下载软件解压,然后打开电脑的cmd控制台,跳转到软件所在的目录,进行如下操作
现在如果在你自己的电脑上搭建了web服务器,并且已经开启而且可以正运行,服务器端口和配置隧道时的端口一致,则可以用外网访问你的web网站。可以试试127.0.0.1:8080,或者http://xxx.natapp1.cc:8080/你的项目名/。
接下来就是对微信公众开发进行服务器token验证:
package org.andy.shop.controller;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.andy.shop.constant.SessionCheck;
import org.andy.shop.model.Attentions;
import org.andy.shop.model.Usersession;
import org.apache.catalina.connector.Response;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/wx")
public class WXController {
@RequestMapping("/checkToken")
// @RequestMapping(value = "/checkToken", method = RequestMethod.GET,produces = {"text/plain;charset=UTF-8"}) 这样也是可以访问的
public @ResponseBody Object checkToken(String signature, String timestamp,
String nonce, String echostr) {
String token = "你再微信公众号上设置的token,请确定一样";
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进行对比
String temp= (checktext != null) ? (checktext.equals(signature.toUpperCase())?echostr:"")
: "";
if (temp==null||temp.equals("")) {
return 0;
}else {
return Long.parseLong(temp);
}
}
/**
* 将字节数组转化为16进制字符串
*
* @param byteArrays
* 字符数组
* @return 字符串
*/
private static String byteToStr(byte[] byteArrays) {
String str = "";
for (int i = 0; i < byteArrays.length; i++) {
str += byteToHexStr(byteArrays[i]);
}
return str;
}
/**
* 将字节转化为十六进制字符串
*
* @param myByte
* 字节
* @return 字符串
*/
private static String byteToHexStr(byte myByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
char[] tampArr = new char[2];
tampArr[0] = Digit[(myByte >>> 4) & 0X0F];
tampArr[1] = Digit[myByte & 0X0F];
String str = new String(tampArr);
return str;
}
}
如果返回的和你的echor是一样的,验证通过,否则就会失败,失败的原因请参考我的另一篇博客微信公众平台服务器配置时token验证失败 ,别忘记在微信公众号配置上配置白名单ip。
以上就是简单的微信公众号前期搭建。