接口开发封装的几个常用的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口开发封装的几个常用的方法相关的知识,希望对你有一定的参考价值。

废话不多说了,直接上代码具体看代码的注释吧:

方法一,

/**
     * 发送请求的方法
     * @param $type 请求类型get或post
     * @param string $url 发送请求的URL
     * @param $data post请求数据
     * @param bool $ssl 是否为https协议
     * @return string 响应主体Conent
     */
    public function http_request($type=‘post‘,$url, $data=array(), $ssl=true)
    {
        // 首先需要开启curl扩展
        $curl = curl_init();// curl初始化
        // 设置curl传输选项
        curl_setopt($curl, CURLOPT_URL, $url);// $curl句柄, CURLOPT_URL需要获取的URL地址,也可以在 curl_init() 函数中设置。
        // user_agent 设置请求代理信息
        $agent = $_SERVER[‘HTTP_USER_AGENT‘];
        $user_agent = isset($agent) ? $agent : ‘Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0‘;
        curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);  //CURL_USERAGENT 在HTTP请求中包含一个"User-Agent: "头的字符串
        // referer头 请求来源
        curl_setopt($curl, CURLOPT_AUTOREFERER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间
        // SSL相关的选项设置
        if($ssl)
        {
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // CURLOPT_SSL_VERIFYPEER 禁用后cURL将终止从服务端进行验证
            //curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 默认为2,因此可以省略不写
        }
        if($type == "post")
        {
            // 处理POST相关选项(比get多下面两项设置,其他都是一样的)
            curl_setopt($curl, CURLOPT_POST, true); // 是否为post请求
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // 发送post数据
        }
        
        // 响应信息设置(这里只需要获取相应主体,其他如响应头不需要去处理)
        curl_setopt($curl, CURLOPT_HEADER, false); // 是否处理响应头
        //设置curl参数,要求结果是否输出到屏幕上,为true的时候是不返回到网页中
        curl_setopt($curl, CURLOPT_RETURNTRANSFER , true); // curl_exec() 是否返回响应结果
        // 发出请求
        $response = curl_exec($curl);
        $error = curl_error($curl);
        curl_close($curl); // 关闭资源
        //发生错误,抛出异常
        if($error) throw new \Exception(‘请求发生错误:‘ . $error);

        return $response;   

    }

方法二,php curl就是php中的数据传输神器。( 接口开发的必备技能之一)

 //curl获取数据
    public function curl_get_post($url, $data = ‘‘, $request = ‘GET‘)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER[‘HTTP_USER_AGENT‘]);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, [‘Content-Type: application/json‘]);//这里设置后,发送的数据就是json
        $data = curl_exec($curl);
        if(curl_errno($curl)) {
            //echo ‘Errno‘ . curl_error($curl);
            error_log(date("Y-m-d H:i:s", time()) . ":Errno" . curl_error($curl) . "t\r\n", 3, "data/component_access_token/log.txt");
        }
        curl_close($curl);
        return $data;
    }

方法三,由于接口开发,每次调用接口都需要一个令牌环凭据 accesstoken,而且每次授权后,它都有一个过期的期限 。

我的做法是将token直接保存在文本文件中(.txt),然后根据过期的时间去判断是否再次获取。

注意*:今天在使用file_put_contents的时候,犯了一个错误,就是以为这个函数会穿件文件夹,如果父级目录文件夹不存在的话,这个函数是无法自动创建文件的

 

 if(!empty($auth_code))
        {    $result = $this->http_request(‘post‘, $url, $data=array(), true);
             $result = json_decode($result, true);
            $access_token=$result[‘access_token‘];
            $refresh_token=$result[‘refresh_token‘];
            file_put_contents("data/weimob_access_token/" . $client_id . ".txt", $access_token . ‘,‘ . $refresh_token . ‘,‘ . time());

        }else{
              if(!file_exists("data/weimob_access_token/" . $client_id . ‘.txt‘))
            {
                return false;
            }
            $str = file_get_contents("data/weimob_access_token/" . $client_id . ‘.txt‘);
            $arr = explode(‘,‘, $str);
            $access_token = $arr[0];
            $refresh_token = $arr[1];
            $time = $arr[2];
            if($time + $this->expires_in < time())
            {
               
            $result = $this->http_request(‘post‘, $url, $data=array(), true);
            $result = json_decode($result, true);
            $access_token=$result[‘access_token‘];
            $refresh_token=$result[‘refresh_token‘];
            file_put_contents("data/weimob_access_token/" . $client_id . ".txt", $access_token . ‘,‘ . $refresh_token . ‘,‘ . time());
            }
        }
        return    $access_token;

 

以上是关于接口开发封装的几个常用的方法的主要内容,如果未能解决你的问题,请参考以下文章

日常开发中的几个常用跨域处理方式

减少前端代码耦合的几个方法

python常用的几种设计模式是啥

高级开发工程师不得不知的几个常用在线工具网站,告别傻傻手写代码

hibernate的几个重要的类和接口

比较常用的几个PHP开发工具