开发文档
快接官网商户平台

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;

   }