我PHP:写接口与接口的调用(完整版,封装公共方法)

2025-10-20 06:23:50

说明:绑定的资源详细展示了两个项目的接口、接口调用的实现,已经数据库的连接,目录展示更加一目了然,有需要可以下载资源,实际文章已经描述的很详细了

一、A页面-发送请求页面

1、说明

发送请求部分,去调用接口的部分(语言不限,这里使用php)这里使用提交按钮发送请求初始数据为对象,通过json进行发送必要数据:接口的url;接口方提供的AccessKeyId,AccessKeySecret(可生成随机数,只要请求接口方和接口方对应便可发送请求;请求的参数通过cURL完成请求

2、代码

//连接数据库

require_once 'get_db_conn.php';

$conn = db_connect();

//提交表单

if (isset($_POST['Save'])) {

//传入api

$url = 'http://localhost/apireceive/api/receive.php';

//请求头

$headers = array(

'Content-Type: application/json',

'AccessKeyId: 1XTAJKZSK02KMSZW47D2LSFQMMUV3LST',

'AccessKeySecret: VS7EGQTB2CGWZXREL3QT3V72ZSRPYSXB'

);

//请求参数

$json_data = '{

"require1": "测试",

"require2": "value2",

"test3": "value3"

}';

// 初始化cURL会话

$ch = curl_init();

// 设置cURL选项

// 设置了请求的目标URL

curl_setopt($ch, CURLOPT_URL, $url);

// 发出一个POST请求

curl_setopt($ch, CURLOPT_POST, true);

// 设置HTTP请求头信息

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

// curl_exec()函数会将获取到的数据以字符串形式返回,而非直接输出到浏览器或标准输出。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 设置POST请求的主体数据。这里$json_data是一个JSON格式的字符串,它会被作为POST请求的数据部分发送给服务器。

curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);

// 在进行HTTPS连接时是否验证服务器的SSL证书,设置为false意味着cURL在连接时将跳过SSL证书验证过程

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

// 执行cURL请求

$response = curl_exec($ch);

// 检查cURL执行是否成功

if (curl_errno($ch)) {

echo 'Error:' . curl_error($ch);

} else {

// 处理响应数据

$result = json_decode($response, true);

// 根据API返回的数据进行后续操作...

echo json_encode($result); // 使用print_r()函数打印返回的数据以便于调试和查看

}

// 关闭cURL会话

curl_close($ch);

}

?>

Document

二、B页面-接口页面

1、说明

调用公共方法,验证头信息正确性以及必填项是否提供必填参数,传递给公共方法进行验证获取解析后的参数,进行赋值执行数据库操作将请求的结果返回给A页面

2、代码

// 连接数据库

require_once '../get_db_conn.php';

$conn = db_connect();

// 引入公共代码库

require_once 'common.php';

// 定义必需的参数

$required_params = ['require1', 'require2'];

// $required_params = [];

// 处理请求并获取解析后的数据

$input_data = Common::handleRequest($required_params);

// 使用请求参数执行业务逻辑

$require1 = $input_data['require1'];

$require2 = $input_data['require2'];

$test3 = $input_data['test3'] ? $input_data['test3']: null; // 可选参数

// 调用方法查询数据

// $data = fun_select($require1, $require2, $test3, $conn);

$sql_select = "SELECT * FROM customers WHERE customer_name = '".$require1."'";

$result_select = mysqli_query($conn, $sql_select);

if ($result_select) {

$data = [];

while ($row = mysqli_fetch_assoc($result_select)) {

$data[] = $row;

}

} else {

echo "SQL查询执行失败: " . mysqli_error($conn);

return [];

}

// 返回成功响应

http_response_code(200);

echo json_encode(['data' => $data, 'msg' => 'success']);

?>

三、B页面-公共方法页面

1、说明

封装B页面接收A页面的公共方法检测A页面发送请求时传递的头信息,主要是检测AccessKeyId和AccessKeySecret是否和设定的一致检测必填项是否填写解析A页面传递的参数,直接供B页面使用

2、代码

// Common.php

class Common {

// 验证AccessKeyId和AccessKeySecret

public static function validateAccessKeys($key_id, $key_secret) {

// 实现验证逻辑,如果验证通过则返回true,否则返回false

if ($key_id == '1XTAJKZSK02KMSZW47D2LSFQMMUV3LST' && $key_secret == 'VS7EGQTB2CGWZXREL3QT3V72ZSRPYSXB') {

return true;

}

return false;

}

// 检查请求方法和Content-Type

public static function checkRequestMethodAndContentType() {

if ($_SERVER['REQUEST_METHOD'] != 'POST') {

http_response_code(405);

echo json_encode(['error' => 'Method Not Allowed']);

exit;

}

$content_type = isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : '';

if (stripos($content_type, 'application/json') !== 0) {

http_response_code(415);

echo json_encode(['error' => 'Unsupported Media Type']);

exit;

}

}

// 获取并解析请求体中的JSON数据

public static function getJsonRequestBody() {

$input_json = file_get_contents('php://input');

$input_data = json_decode($input_json, true);

return $input_data;

}

// 检查请求体中是否有必需的参数

public static function checkRequiredParameters($input_data, $required_params) {

foreach ($required_params as $param) {

if (!isset($input_data[$param])) {

http_response_code(400);

echo json_encode(['error' => 'Invalid Request Body']);

exit;

}

}

}

// 处理API请求的入口方法

public static function handleRequest($required_params) {

// 设置响应头

header('Content-Type: application/json');

// 验证AccessKey

$access_key_id = isset($_SERVER['HTTP_ACCESSKEYID']) ? $_SERVER['HTTP_ACCESSKEYID'] : '';

$access_key_secret_provided = isset($_SERVER['HTTP_ACCESSKEYSECRET']) ? $_SERVER['HTTP_ACCESSKEYSECRET'] : '';

if (!self::validateAccessKeys($access_key_id, $access_key_secret_provided)) {

http_response_code(401);

echo json_encode(['error' => 'Unauthorized']);

exit;

}

// 检查请求方法和Content-Type

self::checkRequestMethodAndContentType();

// 获取并解析请求体中的JSON数据

$input_data = self::getJsonRequestBody();

// 检查请求体中是否有必需的参数

self::checkRequiredParameters($input_data, $required_params);

// 返回解析后的请求数据

return $input_data;

}

}

?>

四、未封装请求参考路径

​​​​​​​PHP:接口请求与被请求_php 请求接口-CSDN博客