一,央求开发者帐号,商城小程序开发,停止服务器配置
首先我们得先有一个公众号,到微信公众号平台央求一个,自己央求的是订阅号。网址:https://mp.weixin.qq.comjava
还需要一个外网地址接口微信推送的消息,微信商定外网地址目前支持80和443接口,自己利用的是花生壳映射本机算法
登录公众号,抉择开发-根本配置-填写服务器配置:平安
参数阐明:服务器
URL:服务器地址-用来接纳微信消息和事情的接口URL(需保持外网访问)微信
Token:恣意填写,用做生成签名微信开发
EncodingAESKey:消息体加解密密钥(自身填写或许主动生成)app
此处消息加解密模式若是抉择的平安形式则需要用到EncodingAESKey停止解密消息加密
假设此处点击提交会出现token验证失败,无锡外卖平台,是因为我们需要新建一个工程来停止微信验证。自己此处利用的是SpringMvc,请看下一步spa
二,验证服务器地址
URL参数:code
参数
形容
signature
微信加密签名,signature联合了开发者填写的token参数和申请中的timestamp参数、nonce参数。
timestamp
工夫戳
nonce
随机数
echostr
随机字符串
加密/校验流程:
1. 将token、timestamp、nonce三个参数停止字典序排序
2. 将三个参数字符串拼接成一个字符串停止sha1加密
3. 开发者失去加密后的字符串可与signature对比,标识该申请起源于微信申请
4. 通过检验signature对申请停止校验(下面有校验模式)。若确认这次GET申请来自微服气务器,请原样前往echostr参数内容,则接入生效,不然接入失败
@Controller
@RequestM
apping("/")
public class WeixinController {
@RequestMapping("signature")
@ResponseBody
public String signature(String signature,
String timestamp,
String nonce,
String echostr){
try {
String shaPw = SHA1.getSHA1("xiaofli007", timestamp, nonce);
if(signature.equals(shaPw))
return echostr;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
/**
* 用SHA1算法生成平安签名
* @param token
* @param timestamp 工夫戳
* @param nonce 随机字符串
* @return 平安签名
* @throws Exception
*/
public static String getSHA1(String token, String timestamp, String nonce) throws Exception
{
try {
String[] array = new String[] { token,timestamp, nonce};
StringBuffer sb = new StringBuffer();
// 字符串排序
Arrays.sort(array);
for (int i = 0; i < 3; i++) {
sb.append(array[i]);
}
String str = sb.toString();
// SHA1签名生成
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(str.getBytes());
byte[] digest = md.digest();
StringBuffer hexstr = new StringBuffer();
String shaHex = "";
for (int i = 0; i < digest.length; i++) {
shaHex = Integer.toHexString(digest[i] & 0xFF);
if (shaHex.length() < 2) {
hexstr.append(0);
}
hexstr.append(shaHex);
}
return hexstr.toString();
} catch (Exception e) {
e.printStackTrace();
throw new Exception();
}
}
自己的配置:
URL:*/weixin/signature (*为我外网地址)
TOKEN:xiaofli007 (我自行填写-恣意)
EncodingAESKey:主动生成(此处不会用到,无锡网站设计,平安形式下接纳消息会用此密钥停止解密)
点击提交,若是出现如上状况:
1. URL申请超时:反省本机URL能否能失常访问,外网URL能否能失常访问
2. TOKEN验证失败:一定signature能否与解密事后的字符串分歧,自己此处验证事后前往为JSON
提交胜利,则可以停止下一步开发。