这些是我写给自己的小文档,希望以后自己有写文档记录的习惯
在进行微信公众平台前,需要先阅读微信开发文档,相信许多小伙伴已经做过了。
这里附一个微信公众号技术文档的链接 https://mp.weixin.qq.com/wiki
接入微信公众平台开发,开发者需要按照如下步骤完成:
①,填写服务期配置
②,验证服务器地址的有效性
③,依据接口文档实现业务逻辑
服务器配置
首先要申请一个微信订阅号或者服务号,开通接口,有一些高级接口,如生成二维码,网页授权,自定义菜单,微信支付这样的借口权限个人订阅号是没有调用权限的,而微信公众平台也提供了测试公众账号,具备了几乎所有的接口。
然后在本地安装java开发环境,包括开发工具如Eclipse,开发微信公众号的应用需要部署到一个公网服务器进行测试,因为微信用户每次向公众号发起请求时,微信服务器都会先接收到用户的请求,然后再转发到我们的服务器上,微信服务器是要和我们的服务器交互,这里我们借用第三方软件Ngrok,Ngrok是一个免费的软件,使用后可以实现内网穿透,也就是说我们可以将内网的服务器映射到外网给别人访问,这样减少了一些调试上的不必要。
国内提供Ngrok服务比较好的网站是 https://natapp.cn/
Ngrok 经过注册下载运行之后会得到图上的地址(网址内有详细教程
NATAPP1分钟快速新手图文教程
https://natapp.cn/article/natapp_newbie )
其中红框所画出的地址就是Ngrok所映射出的地址,我们按照这个地址访问就可以了
其中有一个需要注意的地方 微信服务器只能和外部开通了80端口和443端口的服务器之间通信
可以看到 我们的项目已经可以被外网正常的访问到了 这样就可以在我们的开发工具里敲代码了
在Eclipse里创建一个Web工程,编写一个servlet, 在其中的doGet方法中定义校验方法
开发者提交信息后,微信服务器将发送Get请求到填写的服务器地址URL上,Get请求携带参数:
参数 | 描述 |
---|---|
signature | 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
如果参数原様返回,微信服务器校验通过,则接入生效,成为开发者成功。
WX_Interface
public class WX_Interface extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String str = WX_Util.validate(request);
PrintWriter out = response.getWriter();
out.print(str);
out.flush();
out.close();
}
}
WX_Util
public class WX_Util {
//验证服务器地址
public static String validate(HttpServletRequest request){
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
String token = "51FE28CA600C2D3015129F2835FC4F1A";
String str = "";
try {
if (null != signature) {
String[] ArrTmp = { token, timestamp, nonce };
Arrays.sort(ArrTmp);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < ArrTmp.length; i++) {
sb.append(ArrTmp[i]);
}
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] bytes = md.digest(new String(sb).getBytes());
StringBuffer buf = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
if (((int) bytes[i] & 0xff) < 0x10) {
buf.append("0");
}
buf.append(Long.toString((int) bytes[i] & 0xff, 16));
}
if (signature.equals(buf.toString())) {
str = echostr;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
}
51FE28CA600C2D3015129F2835FC4F1A";
String str = "";
try {
if (null != signature) {
String[] ArrTmp = { token, timestamp, nonce };
Arrays.sort(ArrTmp);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < ArrTmp.length; i++) {
sb.append(ArrTmp[i]);
}
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] bytes = md.digest(new String(sb).getBytes());
StringBuffer buf = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
if (((int) bytes[i] & 0xff) < 0x10) {
buf.append("0");
}
buf.append(Long.toString((int) bytes[i] & 0xff, 16));
}
if (signature.equals(buf.toString())) {
str = echostr;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
}
在微信公众平台上填入URL和Token
URL就是我们外网部署的项目地址 http://ng3qw3.natappfree.cc/wx/WX_Interface
Token 可以自定义 和WX_Util 中的token相同
然后提交配置 出现提交成功字样就说明配置成功了
到此,我们的公众号应用已经能和为新服务器正常运行了,也就说明我们的公众号已经接入到微信公众平台了。