验证请求是否来自一洽服务器
在配置好业务数据接收接口后,一洽会先验证接口是否可用,会发送GET请求将验证信息发送给接口地址。
GET请求携带的参数如下表示:
参数 | 描述 |
---|---|
signature | 一洽加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
timestamp | 时间戳 |
nonce | 随机数 |
dataType | 此次请求的数据类型,固定为:checkUrl |
echostr | 随机字符串,验证成功后将此字符串发回给一洽,一洽则确认服务器验证成功 |
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自一洽服务器,请返回参数echostr的值,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:
1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于一洽
检验signature的JAVA示例代码:
public boolean verifyUrl(String msgSignature, String timeStamp, String nonce)
throws AesException {
String signature = SHA1.getSHA1(token, timeStamp, nonce);
if (!signature.equals(msgSignature)) {
throw new AesException(AesException.ValidateSignatureError);
}
return true;
}
一洽的签名生成方式和微信一致。
C# C++ Java PHP Python 微信代码示例下载:示例代码
http://api.myserver.com/echatDataReceiver 校验成功后可正常接收来自一洽的业务数据。
示例:
token:myToken timestamp:myTimestamp nonce:myNonce signature输出:81ceaac69a2f44be4f98d4adbea202d5792c62bb getUrl:http://api.myserver.com/echatDataReceiver?timestamp=myTimestamp&nonce=myNonce&signature=81ceaac69a2f44be4f98d4adbea202d5792c62bb