美文网首页
对接第三方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