验证请求是否来自一洽服务器

在配置好业务数据接收接口后,一洽会先验证接口是否可用,会发送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