新人求看下如何用php对接第三方接口?

新人求解第三方的对接口怎么写curl

求大神写个php 的curl

阅读 1k
3 个回答
✓ 已被采纳
<?php
function sendRequest($url, $method = 'GET', $data = [], $headers = [], $timeout = 30) {
    $ch = curl_init();

    // 设置URL
    curl_setopt($ch, CURLOPT_URL, $url);

    // 设置请求方法
    switch (strtoupper($method)) {
        case 'POST':
            curl_setopt($ch, CURLOPT_POST, true);
            break;
        case 'PUT':
        case 'DELETE':
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
            break;
    }

    // 设置请求数据
    if (!empty($data)) {
        if (in_array('Content-Type: application/json', $headers)) {
            $data = json_encode($data);
        } else {
            $data = http_build_query($data);
        }
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }

    // 设置请求头
    if (!empty($headers)) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }

    // 返回响应而不是直接输出
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // 设置超时
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

    // 执行请求
    $response = curl_exec($ch);

    // 获取HTTP状态码
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    // 错误处理
    if (curl_errno($ch)) {
        $error = 'cURL error: ' . curl_error($ch);
        curl_close($ch);
        return ['error' => $error];
    }

    // 关闭cURL会话
    curl_close($ch);

    // 记录日志
    logRequest($url, $method, $data, $headers, $response, $httpCode);

    return ['response' => $response, 'http_code' => $httpCode];
}

function logRequest($url, $method, $data, $headers, $response, $httpCode) {
    $log = [
        'url' => $url,
        'method' => $method,
        'data' => $data,
        'headers' => $headers,
        'response' => $response,
        'http_code' => $httpCode,
        'timestamp' => date('Y-m-d H:i:s')
    ];
    file_put_contents('request_log.txt', print_r($log, true), FILE_APPEND);
}

// 示例用法
$url = 'https://api.example.com/data';
$method = 'POST';
$data = [
    'app_id' => 'your_app_id',
    'encrypt_key' => 'your_encrypt_key',
    'sign_data' => 'your_sign_data',
    'seal_data' => 'your_seal_data'
];
$headers = [
    'Content-Type: application/json',
    'Authorization: Bearer your_access_token'
];

$response = sendRequest($url, $method, $data, $headers);
print_r($response);
?>
<?php
// 初始化curl
$ch = curl_init();

// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 执行请求
$response = curl_exec($ch);

// 检查是否有错误发生
if ($response === false) {
    echo 'Curl error: '. curl_error($ch);
} else {
    // 处理响应数据
    echo 'Response: '. $response;
}

// 关闭curl资源
curl_close($ch);
?>

如果接口需要传递一些参数

<?php
// 接口URL
$url = 'http://example.com/api/data';
// 参数数组
$params = [
    'param1' => 'value1',
    'param2' => 'value2'
];

// 将参数拼接在URL上
$urlWithParams = $url. '?'. http_build_query($params);

// 初始化curl
$ch = curl_init();

// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, $urlWithParams);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 执行请求
$response = curl_exec($ch);

// 检查是否有错误发生
if ($response === false) {
    echo 'Curl error: '. curl_error($ch);
} else {
    // 处理响应数据
    echo 'Response: '. $response;
}

// 关闭curl资源
curl_close($ch);
?>
/**
 * curl
 */
public static function httpRequest($url, $format = 'get', $data = null){
    //设置头信息
    $headerArray =array("Content-type:application/json;","Accept:application/json");
    $curl=curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if ($format == 'post') {
        //post传值设置post传参
        curl_setopt($curl, CURLOPT_POST, 1);
        if ($data) {
            $data  = json_encode($data);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
    $data=json_decode(curl_exec($curl), true);
    curl_close($curl);
    //返回接口返回数据
    return $data;
}

php使用curl对接第三方接口实例,参考地址:https://segmentfault.com/a/1190000024574515

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏