PHP推送接口

最近写了一个推送接口的工作需求,来记录一下

需要传输自定义header头,输出格式和秘钥

$header= array('Content-Type:application/json','Access-Id:'.$this->ak,'Authorization:'.$sign);//准备自定义header头信息
$code = $this->http_post($url,json_encode($data),$header);//调用http方法,传入请求地址、json化的数据、以及请求头

下面是http_post请求方法

public function http_post(
        $url,
        $post_data=array(),
        $header= '',
        $post = true,
        $timeout=30) 
    {
        $ch = curl_init();  
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查  
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在  
        curl_setopt($ch, CURLOPT_URL,$url);  
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  
        // curl_setopt($ch, CURLOPT_HTTPHEADER,header('Content-Type: application/json'));  
        curl_setopt($ch, CURLOPT_POST,$post);  
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);  
        $response = curl_exec($ch);  
        curl_close($ch);
        return $response;
    }

下面是另一个httpget请求方法

public function httpGet($url,$header) {
        $curl = curl_init();    //初始化一个cURL会话。
        curl_setopt($curl, CURLOPT_TIMEOUT, 100);  //设置cURL允许执行的最长秒数
        curl_setopt($curl, CURLOPT_URL, $url);  //URL地址
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,FALSE);  //禁用后cURL将终止从服务端进行验证
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);  //不验证证书是否存在
        // curl_setopt($curl, CURLOPT_HEADER, FALSE);    //禁止后使用CURL_TIMECOND_IFUNMODSINCE,默认值为CURL_TIMECOND_IFUNMODSINCE
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);  //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
        $res = curl_exec($curl);  //执行一个cURL会话
        curl_close($curl);  //关闭一个cURL会话
        return $res;
    }

以上便是一个大体流程。

tip1:

  二维数组转化为一维数组

$bee = [];
foreach ($bookArr as $k => $v) {
   array_push($bee,...$this->getOneZjList($v));
}

  神奇之处就是那三个.

tip2:

  数组分页

  

     $count = count($data['chapters']);//先计算总条数
        $num = ceil($count/200);//向上取整,要循环的页数
        echo "本次推送一共".$count."章节,共".$num."页。"."
";
        for($i=1; $i<=$num; $i++){
            $page = $i;
            $pagesize = 200;
            $start=($page-1)*$pagesize;//偏移量,当前页-1乘以每页显示条数

            echo "从第".$start."条开始"."
";

            $data['chapters'] = array_slice($bee,$start,$pagesize); //重点在这里,这里是控制每次推的内容
       
            $url = $this->host.'/xxx/push';
            $sign = md5($this->ak.$this->sk);//加密方式
            $header= array('Content-Type:application/json','Access-Id:'.$this->ak,'Authorization:'.$sign);
            $code = $this->http_post($url,json_encode($data),$header);
            $codes =  json_decode($code,true);
            var_dump($code);//输出请求结果
            echo "已推".$page."页"."
";
        }
原文地址:https://www.cnblogs.com/chenliuxiao/p/12467962.html