一.渠道 id 和密钥获取:
请联系客一客对接产品获取测试环境和生产环境的配置;
二.通用参数说明
所有接口后都增加 channelId=渠道 id, time =当前时间戳 System.currentTimeMillis(), sign=签名
例子:
?channelId=b205d29de40dc74f3d725db345135e22&time=1631776673000&sign=119d885f02302857e67a67d0490f72ee69bf45b5db8baf197a2523a9120b5d07
补充说明:
time 不能落后当前时间三分钟,否则会报请求过期
生成签名的 time 和请求接口的 time 必须每次都相同
java签名方法
/**
* 获取签名
* @param channelId 渠道 id
* @param time 当前时间戳 System.currentTimeMillis() * @param secret 密钥
* @return
*/
private String getSign(String channelId, Long time, String secret) {
// 用于生成签名的字符串
String signStr = String.format("channelId=%s,secret=%s,time=%s",channelId,secret,time);
// 生成签名的方法如下:Hashing 为 google guava(版本:20.0)工具类中提供的哈希算法
//import com.google.common.hash.Hashing;
return Hashing.sha256().hashString(signStr, StandardCharsets.UTF_8).toString();
}
php重写签名方法
class KeyikeService {
private $api = 'https://xxx/ksr-api';
private $secret = '17ec4441a96dea7fb4b0568fe080665';//密钥
private $channelId = '7311f268b674fea27692146a191db5ed';//渠道ID
public function __construct(){
}
/**
* 获取产品列表
*/
public function product(){
$url = '/partner/product-list';
$time = $this->getMillisecond();//毫秒
$sign = hash("sha256", sprintf("channelId=%s,secret=%s,time=%s",$this->channelId,$this->secret,$time));//签名
$res = json_decode(self::curl_get($this->api.$url."?channelId={$this->channelId}&time={$time}&sign={$sign}"),true);
return ($res['code'] == 200) ? $res['data'] :[];
}
/**
* 获取毫秒级时间戳
* @return float
*/
private function getMillisecond() {
list($s1, $s2) = explode(' ', microtime());
return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
}
/**
* curl请求
* @param $url
* @return bool|string
*/
private static function curl_get($url) {
//初使化curl
$ch = curl_init();
//请求的url,由形参传入
curl_setopt($ch, CURLOPT_URL, $url);
//将得到的数据返回
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//不处理头信息
curl_setopt($ch, CURLOPT_HEADER, 0);
//连接超过10秒超时
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
//执行curl
$output = curl_exec($ch);
//关闭资源
curl_close($ch);
//返回内容
return $output;
}
}
网友评论