您的位置:首页 > 移动开发 > 微信开发

微信教程01:接入指南

2016-12-14 21:56 169 查看
要成为微信开发者,首先需要进入接入校验,微信相关的接入文档地址为:

http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN

具体步骤如下:

一、填写服务器配置

1、申请微信公众号,并登陆:https://mp.weixin.qq.com/

2、填写相关的参数:点击左侧菜单栏中的【开发】中的【基本配置】

3、修改服务器配置:

1)填写URL:http://www.kolbe.cn/wechat/authenticate(注意需要使用80端口)

2)填写Token:wechat(这个token需要与程序中的token一致)

二、验证服务器地址的有效性

1、填完上述信息后,微信服务器会发送一个GET请求到:http://www.kolbe.cn/wechat/authenticate

2、该请求会带上四个参数:signature、timestamp、nonce、echostr

3、开发者对参数进行相应的处理后,与signature进行对比,如果相等,则直接输出echostr,代表接入成功,否则接入失败,具体逻辑如下:

1)将token(自定义的)、timestamp、nonce进行字典排序

2)将三个参数拼接着一个字符串

3)将拼接后的字符串进行SHA-1加密

4)将加密后的字符串与signature进行对比

4、具体实现代码如下(为了代码的简洁明了,暂时没使用任何框架):

package cn.kolbe.wechat.authenticate.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/authenticate")
public class AuthenticateController extends HttpServlet {

// token可自定义
private static final String TOKEN = "wechat";
private static final long serialVersionUID = 1L;

/**
 * 微信公众平台接入校验
 */
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();

// 将token,timestamp,nonce三个参数进行字典排序
String[] sourceArray = new String[]{TOKEN , request.getParameter("timestamp"), request.getParameter("nonce")};
Arrays.sort(sourceArray);

// 将三个参数字符串拼接成一个字符串
StringBuilder sortArray = new StringBuilder();
for(String s : sourceArray) {
sortArray.append(s);
}

// 对拼接成功的字符串进行SHA-1加密
String hexString = byteArrayToHex(sortArray.toString().getBytes());

// 将加密过的字符串与signature对比
if(hexString != null && hexString.equals(request.getParameter("signature"))) {
// 如果相等则原样输出echostr,接入成功
out.print(request.getParameter("echostr"));
} else {
// 如果不相等,则接入失败
response.setContentType("text/html;charset=utf-8");
out.println("校验失败");
}
out.close();
}

/**
 * 将字节数组加密后转化成十六进制字符串
 * @param byteArray
 * @return
 */
public String byteArrayToHex(byte[]	byteArray) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(byteArray);
byte[] digest = md.digest();
String s = new String();
StringBuilder result = new StringBuilder();

for(byte b : digest) {
if((s = Integer.toHexString(b)).length() < 2) {
s = 0 + s;
}
result.append(s);
}
return result.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
}


三、接入成功

1、如果顺利完成上面两步,并提示接入成功,此时代表已经成功接入微信

2、后续微信会将用户的消息通过Post发送到:http://www.kolbe.cn/wechat/authenticate,我们可以在AuthenticateController中的doPost方法进行相应的逻辑处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: