开发文档
官网 商户平台

1、签名算法    

   目前只支持MD5签名

   请求签名

       1、 原始请求(sign字段除外) ,所有参数按照字段名的 ascii码从小到大排序后使用 QueryString的格式(即 key1=value1&key2=value2…)拼接而成,空值不传递,不参与签名组串。

       2、 在MD5签名时,可以在快接商户平台查看,获取商户密钥(key)。当拿到请求时的待签名字符串后,需要加上&key=商户密钥,形成新的待签名字符串(即 key1=value1&key2=value2…&key=商户密钥),利用MD5的签名函数对这个新的字符串进行签名运算,从而得到32位签名结果字符串(不需要转大写)。

  响应签名

      1、 响应的json串,只需要对data里面的字段进行签名(sign字段除外)所有参数按照字段名的 ascii码从小到大排序后使用 QueryString的格式(即 key1=value1&key2=value2…)拼接而成,空值不传递,不参与签名组串。

      2、 在MD5签名时,可以在快接商户平台查看,获取商户密钥(key)。当拿到(第一步)的待签名字符串后,需要加上&key=商户密钥,形成新的待签名字符串(即 key1=value1&key2=value2…&key=商户密钥),利用MD5的签名函数对这个新的字符串进行签名运算,从而得到32位签名结果字符串(不需要转大写)

  异步通知签名

      1、 异步通知-快接服务器以http post的请求方式将信息返回给客户,信息(sign字段除外)所有参数按照字段名的 ascii码从小到大排序后使用 QueryString的格式(即 key1=value1&key2=value2…)拼接而成,空值不传递,不参与签名组串。

      2、 在MD5签名时,可以在快接商户平台查看,获取商户密钥(key)。当拿到(第一步)的待签名字符串后,需要加上&key=商户密钥,形成新的待签名字符串(即 key1=value1&key2=value2…&key=商户密钥),利用MD5的签名函数对这个新的字符串进行签名运算,从而得到32位签名结果字符串(不需要转大写)

      注:快接异步通知消息可能会由于升级增加参数,请验证应答签名时注意允许这种情况。

2、PHP验签实例





  /**

   * 除去数组中的空值和签名参数

   * @param $para 签名参数组

   * return 去掉空值与签名参数后的新签名参数组

   */

  function paraFilters($para) {

        $para_filter = array();

        while (list ($key, $val) = each ($para)) {

              if($key == "sign" || $val == "")continue;

              else $para_filter[$key] = $para[$key];

        }

        return $para_filter;

  }





  /**

   * 对数组排序

   * @param $para 排序前的数组

   * return 排序后的数组

   */

  function argSorts($para) {

        ksort($para);

        reset($para);

        return $para;

  }

   

  /**

   * 签名验证-快接支付

   * $datas 数据数组

   * $key 密钥

   */

  function sign($datas = array(), $key = ""){

        $str = urldecode(http_build_query(argSorts(paraFilters($datas))));

        $sign = md5($str."&key=".$key);

        return $sign;

  }