美文网首页
对接第三方java接口签名对称加密php实现笔记!

对接第三方java接口签名对称加密php实现笔记!

作者: DragonersLi | 来源:发表于2021-12-29 22:02 被阅读0次
一.渠道 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;
    }


}



相关文章

网友评论

      本文标题:对接第三方java接口签名对称加密php实现笔记!

      本文链接:https://www.haomeiwen.com/subject/kcborxtx.html