PHP调用API接口的方法及实现(内附电商平台商品详情接口案例)

随着互联网、云计算和大数据时代的到来,越来越多的应用程序需要调用第三方的API接口来获取数据,实现数据互通和协同工作。PHP作为一种常用的服务器端语言,也可以通过调用API接口来实现不同系统的数据交互和整合。本文将介绍PHP调用API接口的方法及实现过程。

一、API接口简介

API(Application Programming Interface),应用程序编程接口,是一种用于不同应用程序之间通信的协议。简单来说,API就是一组可编程的约定,用于定义应用程序如何与其他程序或服务器通信。通过API,一个应用程序可以请求另一个应用程序的服务或数据,或将自己的服务或数据提供给其他应用程序使用。

API通常采用HTTP或SOAP等标准协议进行通信,支持多种数据格式的交换,例如XML、JSON、CSV等。API通常需要进行身份验证和参数传递,以确保数据的有效性和安全性。

二、PHP调用API接口的方法

1、使用curl库进行HTTP请求

curl是一款功能强大的开源的网络传输工具,支持多种协议,包括HTTP、FTP、SMTP等。在PHP中,我们可以通过curl库很方便地进行HTTP请求,并获取到API返回的数据。

以下是使用curl库发送HTTP GET请求的示例,其中$url为API接口的URL地址,为请求头参数,ℎ�����为����请求头参数,'params`为HTTP请求的GET参数:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

如果是POST请求,可以将请求参数放在$body中进行传递,请求头信息仍然放在$header中:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

可以通过curl_errorcurl_errno函数获取curl请求的错误信息和错误码。

2、使用file_get_contents函数进行HTTP请求

除了curl库以外,PHP还提供了file_get_contents函数用于获取URL地址的内容,其中可设置HTTP请求头信息:

$header = array(
    'Content-type: application/json',
    'Authorization: Bearer ' . $token
);
$options = array(
    'http' => array(
        'method' => 'GET',
        'header' => implode("
", $header)
    )
);
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);

这种方式也可以用于POST请求,只需将methodheader参数修改即可。

3、使用Guzzle库进行HTTP请求

Guzzle是一种PHP的第三方HTTP客户端库,提供了一系列易于使用的API,支持HTTP/1.1和HTTP/2,支持异步请求,请求头和响应头都可以自定义。通过composer安装Guzzle:

composer require guzzlehttp/guzzle

以下是使用Guzzle库发送HTTP GET请求的示例,其中$uri为API接口的URL地址,$query为HTTP请求的GET参数,$headers为HTTP请求头参数:

$client = new GuzzleHttpClient();
$response = $client->request('GET', $uri, [
    'query' => $query,
    'headers' => $headers
]);
$data = $response->getBody()->getContents();

POST请求也很简单,只需将request方法中的GET改成POST,并将请求参数放在form_params参数中即可。

三、API接口调用实现

如果您要调用的API是一个第三方的API,则需要先查看API文档,了解其请求方式、URL、参数、返回结果等信息。如果是自己编写的API,则需要编写API接口程序,实现接收请求、处理请求和返回数据的功能。

以下是一个简单的API接口程序示例,用于返回商品当前的详情页信息:

<?php

// 请求示例 url 默认请求参数已经URL编码处理
// 本示例代码未加密secret参数明文传输,若要加密请参考:https://help/demo/sdk/demo-sign.php
$method = "GET";
$url = "https://taobao/item_get/?key=<您自己的apiKey>&secret=<您自己的apiSecret>&num_iid=652874751412&is_promotion=1";
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_ENCODING, "gzip");
var_dump(curl_exec($curl));
?>

响应示例

{
	"item": {
		"num_iid": "652874751412",
		"title": "北欧轻奢布艺沙发 小户型简约现代客厅ins风网红款三双人订制沙发",
		"desc_short": "",
		"price": 480,
		"total_price": 0,
		"suggestive_price": 0,
		"orginal_price": 480,
		"nick": "惜情yqq1127",
		"num": "200",
		"min_num": 0,
		"detail_url": "https://item.taobao.com/item.htm?id=652874751412",
		"pic_url": "//img.alicdn.com/imgextra/i4/2568161054/O1CN01aYBriY1Jem9UDtt9e_!!2568161054.jpg",
		"brand": "#0 工厂",
		"brandId": "1435187098",
		"rootCatId": "50008164",
		"cid": "50020632",
		"crumbs": [],
		"created_time": "",
		"modified_time": "",
		"delist_time": "",
		"desc": "<img size=\"27893\">https://img.alicdn.com/imgextra/i3/2568161054/O1CN01LFmSOU1Jem9QOjMPb_!!2568161054.jpg</img><img size=\"132455\">https://img.alicdn.com/imgextra/i3/2568161054/O1CN014vyOOT1Jem9DpHz3Y_!!2568161054.jpg</img><img size=\"2455\">https://img.alicdn.com/imgextra/i1/2568161054/O1CN01B3PpsA1Jem9N8V7uf_!!2568161054.jpg</img><img size=\"117664\">https://img.alicdn.com/imgextra/i2/2568161054/O1CN015JbyeY1Jem9MZshUt_!!2568161054.jpg</img><img size=\"16674\">https://img.alicdn.com/imgextra/i1/2568161054/O1CN01HXSoxx1Jem9RvgzHN_!!2568161054.jpg</img><img size=\"96260\">https://img.alicdn.com/imgextra/i3/2568161054/O1CN01IEultA1Jem9MdEx8R_!!2568161054.jpg</img><img size=\"13573\">https://img.alicdn.com/imgextra/i3/2568161054/O1CN0176K98O1Jem9QOjE69_!!2568161054.jpg</img><img size=\"110974\">https://img.alicdn.com/imgextra/i4/2568161054/O1CN013Pxp1O1Jem9RvgeTv_!!2568161054.jpg</img><img size=\"104198\">https://img.alicdn.com/imgextra/i1/2568161054/O1CN01SfyZ8M1Jem9QOi1Gx_!!2568161054.jpg</img><img size=\"576580\">https://img.alicdn.com/imgextra/i4/2568161054/O1CN01bb1POa1Jem9Sdgve2_!!2568161054.jpg</img><img size=\"676617\">https://img.alicdn.com/imgextra/i3/2568161054/O1CN018Eo9dV1Jem9KV0y79_!!2568161054.jpg</img><img size=\"9125\">https://img.alicdn.com/imgextra/i1/2568161054/O1CN01vuEofr1Jem9Nzy9xY_!!2568161054.jpg</img><img size=\"107197\">https://img.alicdn.com/imgextra/i4/2568161054/O1CN01qw9sAi1Jem8wkNKpy_!!2568161054.jpg</img><img size=\"198877\">https://img.alicdn.com/imgextra/i1/2568161054/O1CN01HeFhFw1Jem8rLnjBY_!!2568161054.jpg</img><img size=\"71423\">https://img.alicdn.com/imgextra/i2/2568161054/O1CN01SNgjoi1Jem9QOil15_!!2568161054.jpg</img><img size=\"37628\">https://img.alicdn.com/imgextra/i2/2568161054/O1CN01RXf3RA1Jem9DpHVwj_!!2568161054.jpg</img><img size=\"170889\">https://img.alicdn.com/imgextra/i4/2568161054/O1CN01gZmZjt1Jem9ISThgm_!!2568161054.jpg</img><img size=\"6378\">https://img.alicdn.com/imgextra/i2/2568161054/O1CN01YL0FHM1Jem9PQTjX9_!!2568161054.jpg</img><img size=\"212074\">https://img.alicdn.com/imgextra/i4/2568161054/O1CN01UhsEhZ1Jem8yvJIhZ_!!2568161054.jpg</img><img src=\"https://www.o0b.cn/i.php?t.png&rid=gw-3.64fec371ecc41&p=1778787181&k=i_key&t=1694417780\" style=\"display:none\" />",
		"desc_img": [],
		"item_imgs": [
			{
				"url": "//img.alicdn.com/imgextra/i4/2568161054/O1CN01aYBriY1Jem9UDtt9e_!!2568161054.jpg"
			},
			{
				"url": "//img.alicdn.com/imgextra/i3/2568161054/O1CN01kjOfNb1Jem9DmWn8Y_!!2568161054.jpg"
			},
			{
				"url": "//img.alicdn.com/imgextra/i1/2568161054/O1CN01HoB9ha1Jem9DmWn8r_!!2568161054.jpg"
			},
			{
				"url": "//img.alicdn.com/imgextra/i4/2568161054/O1CN011PjP2P1Jem9MXEUFT_!!2568161054.jpg"
			},
			{
				"url": "//img.alicdn.com/imgextra/i3/2568161054/O1CN01KUfBFL1Jem9KTTMn1_!!2568161054.jpg"
			}
		],
		"item_weight": "",
		"item_size": "",
		"location": "江苏南通",
		"post_fee": "",
		"express_fee": null,
		"ems_fee": "",
		"shipping_to": "",
		"has_discount": "false",
		"video": {
			"url": null
		},
		"is_virtual": "",
		"sample_id": "",
		"is_promotion": "false",
		"props_name": "31480:14306495906:几人坐:脚踏90*60*48cm;31480:14306495907:几人坐:双人165*95*67cm;31480:14306495908:几人坐:三人210*95*67cm;31480:14306495909:几人坐:单人100*95*67cm;31480:21480914361:几人坐:四人位240*95*67cm;31480:21480914362:几人坐:大四人320*95*76cm;31480:1387571900:几人坐:3米贵妃沙发;31480:32527954:几人坐:定制尺寸;1627207:28321:颜色分类:乳白色 尺寸颜色可定制",
		"prop_imgs": {
			"prop_img": [
				{
					"properties": "1627207:28321",
					"url": "//img.alicdn.com/imgextra/i1/2568161054/O1CN017GTZ4h1Jem9Qra1ap_!!2568161054.jpg"
				}
			]
		},
		"property_alias": "",
		"props": [
			{
				"name": "品牌",
				"value": "#0 工厂"
			},
			{
				"name": "型号",
				"value": "520"
			},
			{
				"name": "材质",
				"value": "木"
			},
			{
				"name": "木质材质",
				"value": "松木"
			},
			{
				"name": "面料",
				"value": "绒布"
			},
			{
				"name": "风格",
				"value": "北欧"
			},
			{
				"name": "几人坐",
				"value": "脚踏90*60*48cm,双人165*95*67cm,三人210*95*67cm,单人100*95*67cm,四人位240*95*67cm,大四人320*95*76cm,3米贵妃沙发,定制尺寸"
			},
			{
				"name": "颜色分类",
				"value": "乳白色"
			},
			{
				"name": "填充物",
				"value": "海绵"
			},
			{
				"name": "结构工艺",
				"value": "木质工艺"
			},
			{
				"name": "是否可定制",
				"value": "是"
			},
			{
				"name": "沙发组合形式",
				"value": "U形"
			},
			{
				"name": "是否可拆洗",
				"value": "是"
			},
			{
				"name": "适用对象",
				"value": "成年人"
			},
			{
				"name": "是否带储物空间",
				"value": "否"
			},
			{
				"name": "产地",
				"value": "上海"
			},
			{
				"name": "地市",
				"value": "上海市"
			},
			{
				"name": "区县",
				"value": "奉贤区"
			},
			{
				"name": "是否组装",
				"value": "否"
			},
			{
				"name": "出租车是否可运输",
				"value": "否"
			},
			{
				"name": "填充物硬度",
				"value": "软"
			},
			{
				"name": "款式定位",
				"value": "经济型"
			}
		],
		"total_sold": "604",
		"skus": {
			"sku": [
				{
					"price": 480,
					"total_price": 0,
					"orginal_price": 480,
					"properties": "31480:14306495906;1627207:28321",
					"properties_name": "31480:14306495906:几人坐:脚踏90*60*48cm;1627207:28321:颜色分类:乳白色 尺寸颜色可定制",
					"quantity": "200",
					"sku_id": "4881047531343"
				},
				{
					"price": 1688,
					"total_price": 0,
					"orginal_price": 1688,
					"properties": "31480:14306495907;1627207:28321",
					"properties_name": "31480:14306495907:几人坐:双人165*95*67cm;1627207:28321:颜色分类:乳白色 尺寸颜色可定制",
					"quantity": "135",
					"sku_id": "4881047531344"
				},
				{
					"price": 2088,
					"total_price": 0,
					"orginal_price": 2088,
					"properties": "31480:14306495908;1627207:28321",
					"properties_name": "31480:14306495908:几人坐:三人210*95*67cm;1627207:28321:颜色分类:乳白色 尺寸颜色可定制",
					"quantity": "200",
					"sku_id": "4881047531345"
				},
				{
					"price": 968,
					"total_price": 0,
					"orginal_price": 968,
					"properties": "31480:14306495909;1627207:28321",
					"properties_name": "31480:14306495909:几人坐:单人100*95*67cm;1627207:28321:颜色分类:乳白色 尺寸颜色可定制",
					"quantity": "200",
					"sku_id": "4881047531346"
				},
				{
					"price": 2388,
					"total_price": 0,
					"orginal_price": 2388,
					"properties": "31480:21480914361;1627207:28321",
					"properties_name": "31480:21480914361:几人坐:四人位240*95*67cm;1627207:28321:颜色分类:乳白色 尺寸颜色可定制",
					"quantity": "200",
					"sku_id": "5039985183001"
				},
				{
					"price": 3188,
					"total_price": 0,
					"orginal_price": 3188,
					"properties": "31480:21480914362;1627207:28321",
					"properties_name": "31480:21480914362:几人坐:大四人320*95*76cm;1627207:28321:颜色分类:乳白色 尺寸颜色可定制",
					"quantity": "200",
					"sku_id": "5039985183002"
				},
				{
					"price": 3400,
					"total_price": 0,
					"orginal_price": 3400,
					"properties": "31480:1387571900;1627207:28321",
					"properties_name": "31480:1387571900:几人坐:3米贵妃沙发;1627207:28321:颜色分类:乳白色 尺寸颜色可定制",
					"quantity": "200",
					"sku_id": "5039984824000"
				},
				{
					"price": 3000,
					"total_price": 0,
					"orginal_price": 3000,
					"properties": "31480:32527954;1627207:28321",
					"properties_name": "31480:32527954:几人坐:定制尺寸;1627207:28321:颜色分类:乳白色 尺寸颜色可定制",
					"quantity": "200",
					"sku_id": "5039985183003"
				}
			]
		},
		"seller_id": "2568161054",
		"sales": 19,
		"shop_id": "567158267",
		"props_list": {
			"31480:14306495906": "几人坐:脚踏90*60*48cm",
			"31480:14306495907": "几人坐:双人165*95*67cm",
			"31480:14306495908": "几人坐:三人210*95*67cm",
			"31480:14306495909": "几人坐:单人100*95*67cm",
			"31480:21480914361": "几人坐:四人位240*95*67cm",
			"31480:21480914362": "几人坐:大四人320*95*76cm",
			"31480:1387571900": "几人坐:3米贵妃沙发",
			"31480:32527954": "几人坐:定制尺寸",
			"1627207:28321": "颜色分类:乳白色 尺寸颜色可定制"
		},
		"seller_info": {
			"nick": "惜情yqq1127",
			"item_score": "4.9 ",
			"score_p": "4.9 ",
			"delivery_score": "4.9 ",
			"shop_type": "C",
			"user_num_id": "2568161054",
			"sid": "567158267",
			"title": "现代布艺沙发",
			"zhuy": "https://shop567158267.taobao.com/",
			"shop_name": "现代布艺沙发"
		},
		"tmall": false,
		"error": "",
		"warning": "",
		"url_log": [],
		"fav_count": "8018",
		"fans_count": "684",
		"freight": "平邮: 快递包邮",
		"props_imgs": {
			"prop_img": [
				{
					"properties": "1627207:28321",
					"url": "//img.alicdn.com/imgextra/i1/2568161054/O1CN017GTZ4h1Jem9Qra1ap_!!2568161054.jpg"
				}
			]
		},
		"_ddf": "xdl",
		"promo_type": null,
		"props_img": {
			"1627207:28321": "//img.alicdn.com/imgextra/i1/2568161054/O1CN017GTZ4h1Jem9Qra1ap_!!2568161054.jpg"
		},
		"format_check": "ok",
		"shop_item": [],
		"relate_items": []
	},
	"error": "",
	"secache": "4ad7ad2480af253fec9c2fd4daa266bb",
	"secache_time": 1694417780,
	"secache_date": "2023-09-11 15:36:20",
	"translate_status": "",
	"translate_time": 0,
	"language": {
		"default_lang": "cn",
		"current_lang": "cn"
	},
	"reason": "",
	"error_code": "0000",
	"cache": 0,
	"api_info": "today:67 max:10100 all[165=67+65+33];expires:2030-12-31",
	"execution_time": "2.133",
	"server_time": "Beijing/2023-09-11 15:36:20",
	"client_ip": "106.6.35.109",
	"call_args": {
		"num_iid": "652874751412",
		"is_promotion": "1"
	},
	"api_type": "taobao",
	"translate_language": "zh-CN",
	"translate_engine": "baidu",
	"server_memory": "6MB",
	"request_id": "gw-3.64fec371ecc41",
	"last_id": "2022567237"
}

在调用API接口时,可能会遇到各种错误和异常,例如网络连接错误、参数错误、接口响应错误等。为了更好地处理API调用过程中的错误和异常,我们需要编写相应的错误处理和调试代码,以便及时发现和解决问题。

五、总结

通过本文的介绍,我们学习了PHP调用API接口的方法及实现过程,包括使用curl库、file_get_contents函数和Guzzle库进行HTTP请求,编写API接口程序,进行错误处理和调试等方面的内容。API接口是现代化应用程序之间常用的互联方法,掌握API调用的基本知识和技能,有助于我们更好地实现应用程序的功能需求。

相关推荐
燃先生._.23 分钟前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
Dream_Snowar25 分钟前
速通Python 第三节
开发语言·python
你的微笑,乱了夏天28 分钟前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺39 分钟前
分布式系统架构:服务容错
数据库·架构
Data跳动1 小时前
Spark内存都消耗在哪里了?
大数据·分布式·spark
高山我梦口香糖1 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235241 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式
落魄君子1 小时前
GA-BP分类-遗传算法(Genetic Algorithm)和反向传播算法(Backpropagation)
算法·分类·数据挖掘
落魄君子2 小时前
ELM分类-单隐藏层前馈神经网络(Single Hidden Layer Feedforward Neural Network, SLFN)
神经网络·分类·数据挖掘