composer安装curl
命令行切入到你的项目目录执行
composer require --prefer-dist linslin/yii2-curl "*"
等待安装即可
安装完之后curl的位置
项目根目录/vendor/linslin
有linslin就是安装成功了
Yii2 使用Curl
<?php
namespace server\api;
use yii;
use yii\helpers\Json;
use linslin\yii2\curl\Curl;
/**
* API基础类
*/
class BaseApi
{
const API_POST = 'POST';//POST 请求
const API_GET = 'GET';//GET 请求
const API_HEAD = 'HEAD';// HEAD 请求
const API_PUT = 'PUT';// PUT 请求
const API_DELETE = 'DELETE'; // DELETE 请求
/**
* 调用脚本接口
* @param $url 请求地址
* @param $params 接口参数
* @param $type 接口请求方式
* @return array ['error' => 1, 'msg' => '错误信息', 'data' => '数据']
*/
public function callApi($url, $params, $type = self::API_POST)
{
if (!$url) {
return [
'error' => 1,
'message' => '脚本请求地址为空',
];
}
$ret = ['error' => 1];
try {
$curl = new Curl();
// 请求方式
$curl = $curl->setHeaders([
'Content-Type' => 'application/json',
]);
// 设置请求时间120秒
$curl->setOption(CURLOPT_TIMEOUT, 120);
switch ($type) {
case self::API_GET:
if (!empty($params)) {
$url .= '?'.http_build_query($params);
}
$response = $curl->get($url);
break;
case self::API_POST:
$response = $curl->setRawPostData(Json::encode($params))->post($url);
break;
case self::API_PUT:
$response = $curl->setRawPostData(Json::encode($params))->put($url);
break;
case self::API_DELETE:
$response = $curl->setRawPostData(Json::encode($params))->delete($url);
break;
default:
$response = $curl->setRawPostData(Json::encode($params))->post($url);
break;
}
$result = $response ? Json::decode($response) : [];
if (isset($result['result']) && $result['result'] == 'success') {
$ret['error'] = 0;
$ret['message'] = isset($result['msg']) ? $result['msg'] : 'successful';
$ret['data'] = isset($result['data']) ? $result['data'] : [];
} else {
$ret['message'] = isset($result['msg']) ? $result['msg'] : '未知错误';
}
} catch (\Exception $e) {
$ret['message'] = $e->getMessage().$this->_api_error_msg;
}
return $ret;
}
}