php调用接口api的方法(php如何带着token请求接口)

本文目录
- php如何带着token请求接口
- php如何调用api接口,主要是php调用联通,移动api进行短信的发送
- php别人做好了接口怎么去调用
- PHP怎么调用API
- PHP网站怎么调用别家的API
- php如何调用api接口
- 在PHP中如何使用JSONAPI
- php怎么调用淘宝api
php如何带着token请求接口
PHP Token(令牌)
token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。
针对以上特点,移动端与服务端的通信就需要2把钥匙,即2个token。(推荐学习:PHP视频教程)
第一个token是针对接口的(api_token);
第二个token是针对用户的(user_token);
先说第一个token(api_token)
它的职责是保持接口访问的隐蔽性和有效性,保证接口只能给自家人用,怎么做到?
参考思路如下:
按服务器端和客户端都拥有的共同属性生成一个随机串,客户端生成这个串,服务器也按同样算法生成一个串,用来校验客户端的串。
现在的接口基本是mvc模式,URL基本是restful风格,URL大体格式如下:
***隐藏网址***
api_token = md5 (’模块名’ + ’控制器名’ + ’方法名’ + ’2013-12-18’ + ’加密密钥’) = 770fed4ca2aabd20ae9a5dd774711de2其中的
1、 ’2013-12-18’ 为当天时间
2、’加密密钥’ 为私有的加密密钥,手机端需要在服务端注册一个“接口使用者”账号后,系统会分配一个账号及密码,数据表设计参考如下:
字段名 字段类型 注释
client_id varchar(20) 客户端ID
client_secret varchar(20) 客户端(加密)密钥
服务端接口校验,PHP实现流程如下:
《?php
// 1、获取 GET参数 值
$module = $_GET
$action = $_GET;
$api_token = $_GET;
// 2、根据客户端传过来的 client_id ,查询数据库,获取对应的 client_secret
$client_secret = getClientSecretById($client_id);
// 3、服务端重新生成一份 api_token
$api_token_server = md5($module . $controller . $action . date(’Y-m-d’, time()) . $client_secret);
// 4、客户端传过来的 api_token 与服务端生成的 api_token 进行校对,如果不相等,则表示验证失败
if ($api_token != $api_token_server) {
exit(’access deny’); // 拒绝访问
}
// 5、验证通过,返回数据给客户端
?》
php如何调用api接口,主要是php调用联通,移动api进行短信的发送
你没法调移动。联通api的,如果要进行短信发送,可以去找短信接口,一般去运营商购买,然后他们提供api。然后用php对接即可,很简单,比如下面使用的就是某家的api发送:
$this-》content = “发送内容”;
$this-》name = "短信账号";
$this-》pwd= "短信密码";
$this-》mobile = "发送的手机号";
$argv = array(
’name’=》$this-》name, //必填参数。用户账号
’pwd’=》$this-》pwd, //必填参数。(web平台:基本资料中的接口密码)
’content’=》$this-》content, //必填参数。发送内容(1-500 个汉字)UTF-8编码
’mobile’=》$this-》mobile, //必填参数。手机号码。多个以英文逗号隔开
’stime’=》’’, //可选参数。发送时间,填写时已填写的时间发送,不填时为当前时间发送
’sign’=》$this-》sign, //必填参数。用户签名。
’type’=》$this-》type, //必填参数。固定值 pt
’extno’=》$this-》extno //可选参数,扩展码,用户定义扩展码,只能为数字
);
//构造要post的字符串
foreach ($argv as $key=》$value) {
if ($flag!=0) {
$params .= "&";
$flag = 1;
}
$params.= $key."=";
$params.= urlencode($value);
$flag = 1;
}
***隐藏网址***
$resultUrl = file_get_contents($url);//获取发送状态
php别人做好了接口怎么去调用
php别人做好了接口怎么去调用
***隐藏网址***
封装一下:
public static function curl_post($url,$array){
$curl = curl_init();
//设置提交的url
curl_setopt($curl, CURLOPT_URL, $url);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
//获取数据不直接输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//设置post数据
***隐藏网址***
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//获得数据并返回
return $data;
}然后就愉快地调用了:
$array = array(’open_id’=》$openid);
$url = dr_var("verify");
$res = $this-》curl_post($url,$array);这里是在B系统接口里面模拟请求了A系统的一个verify接口,用来审核用户身份,然后根据审核结果决定B系统接口向外返回什么。
更多PHP相关知识,请访问PHP中文网!
PHP怎么调用API
try{
$url=’url地址’;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$page_content = curl_exec($ch);
curl_close($ch);
var_dump($page_content);
}catch (Exception $exception){
var_dump($exception-》getMessage());
}
PHP网站怎么调用别家的API
首先我们要知道的是,API有很多种表现形式,对于不同形式的API,调用方式也是不同的。
API常见模式
1、RPC(远程过程调用协议)
RPC是一种进程远程调用的方式,主要用于异构平台间的进程通信,是Client/Server模式。RPC可以使用多种协议(如:HTTP协议、自定义协议等)和序列化方式(如:JSON、XML、二进程),RPC是基于TCP或者自定义协议来实现的,性能较高,但耦合度也较高。
2、SOAP(简单对象访问协议)
SOAP其实是基于HTTP和XML的实现,基于HTTP协议。在耦合度、维护性、扩展性上比RPC要好,但是性能上会低于RPC,特别是XML这种消息传递的方式会影响性能。
虽说SOAP是基于HTTP的,但是SOAP提供了Session/Cookie机制来维持状态,所以一些需要状态的(如:调用某些API前需要进行认证)业务中还能看见SOAP的身影。
3、RESTful
RESTful其实是一种架构风格,它不是一种标准!RESTful可以理解为是Json+HTTP+POST/GET/PUT/DELETE的组合,同样是基于HTTP协议的。REST相比于SOAP和RPC,更加简洁明了。
RESTful的无状态特性使得其适合在分布式环境中使用,所以现在的API都推荐使用RESTful设计风格。
PHP中如何调用第三方提供的API?
上面讲到了,API有很多种模式,对于不同模式我们调用的方法就不同。下面介绍下PHP如何计用常见模式的API。
1、RPC
如果对方提供的API是RPC形式的,那一般都会提供PHP版本的Client给你,你按说明进行调用即可。
另外PHP生态中也有不少RPC框架,如:PHPRPC、Thrift、gRPC等。
2、SOAP
PHP5内置有php_soap扩展,此扩展实现了PHP对WebServices的支持。
3、RESTful
说白了RESTful就是HTTP协议,只不过使用了不同的HTTP动词进行请求区分,我们推荐使用cURL类库进行RESTfulAPI的请求。
不建议使用file_get_contents函数进行HTTP类型的API调用,很多人习惯使用此函数调用HTTPAPI,但是又不设置超时时间,当API不稳定时严重影响了网站速度。
php如何调用api接口
通过php模拟post请求即可调用。
推荐:php服务器
php模拟POST提交的2种方法
1、通过curl函数
PHP中使用cURL实现Get和Post请求的方法
$post_data = array();
$post_data = "test08";
$post_data = "test08";
$post_data = "submit";
***隐藏网址***
$o="";
foreach ($post_data as $k=》$v)
{
$o.= "$k=".urlencode($v)."&";
}
$post_data=substr($o,0,-1);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL,$url);
//为了支持cookie
curl_setopt($ch, CURLOPT_COOKIEJAR, ’cookie.txt’);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$result = curl_exec($ch);2、通过fsockopen.
fsockopen — 打开一个网络连接或者一个Unix套接字连接
***隐藏网址***
$post_data = "test08";
$post_data = "test08";
$post_data = "ログイン";
$referrer="";
// parsing the given URL
$URL_Info=parse_url($URL);
// Building referrer
if($referrer=="") // if not given use this script as referrer
$referrer=$_SERVER;
// making string from $data
foreach($post_data as $key=》$value)
$values="$key=".urlencode($value);
$data_string=implode("&",$values);
// Find out which port is needed - if not given use standard (=80)
if(!isset($URL_Info))
$URL_Info=80;
// building POST-request:
$request.="POST ".$URL_Info." HTTP/1.1\n";
$request.="Host: ".$URL_Info."\n";
$request.="Referer: $referrer\n";
$request.="Content-type: application/x-www-form-urlencoded\n";
$request.="Content-length: ".strlen($data_string)."\n";
$request.="Connection: close\n";
$request.="\n";
$request.=$data_string."\n";
$fp = fsockopen($URL_Info);
fputs($fp, $request);
while(!feof($fp)) {
$result .= fgets($fp, 128);
}
fclose($fp);
在PHP中如何使用JSONAPI
这篇文章主要介绍了深入浅析JSONAPI在PHP中的应用,需要的朋友可以参考下
现在服务端程序员的主要工作已经不再是套模版,而是编写基于 JSON 的 API 接口。可惜大家编写接口的风格往往迥异,这就给系统集成带来了很多不必要的沟通成本,如果你有类似的困扰,那么不妨关注一下 JSONAPI ,它是一个基于 JSON 构建 API 的规范标准,一个简单的 API 接口大致如下所示:
JSONAPI
简单说明一下:根节点中的 data 用来放置主对象的内容,其中 type 和 id 是必须要有的字段,用来表示主对象的类型和标识,其它简单的属性统统放置到 attributes 里,如果主对象存在一对一、一对多等关联对象,那么放置到 relationships 里,不过只是通过 type 和 id 字段放置一个链接,关联对象的实际内容统统放置在根接点中的 included 里。
有了 JSONAPI,数据解析的过程变得规范起来,节省了不必要的沟通成本。不过如果要手动构建 JSONAPI 数据还是很麻烦的,好在通过使用 Fractal 可以让实现过程相对自动化一些,上面的例子如果用 Fractal 实现大概是这个样子:
《?php
use League\Fractal\Manager;
use League\Fractal\Resource\Collection;
$articles = [
[
’id’ =》 1,
’title’ =》 ’JSON API paints my bikeshed!’,
’body’ =》 ’The shortest article. Ever.’,
’author’ =》 [
’id’ =》 42,
’name’ =》 ’John’,
],
],
];
$manager = new Manager();
$resource = new Collection($articles, new ArticleTransformer());
$manager-》parseIncludes(’author’);
$manager-》createData($resource)-》toArray();
?》如果让我选最喜爱的 PHP 工具包,Fractal 一定榜上有名,它隐藏了实现细节,让使用者完全不必了解 JSONAPI 协议即可上手。不过如果你想在自己的项目里使用的话,与直接使用 Fractal 相比,可以试试 Fractalistic ,它对 Fractal 进行了封装,使其更好用:
《?php
Fractal::create()
-》collection($articles)
-》transformWith(new ArticleTransformer())
-》includeAuthor()
-》toArray();
?》如果你是裸写 PHP 的话,那么 Fractalistic 基本就是最佳选择了,不过如果你使用了一些全栈框架的话,那么 Fractalistic 可能还不够优雅,因为它无法和框架本身已有的功能更完美的融合,以 Lavaral 为例,它本身内置了一个 API Resources 功能,在此基础上我实现了一个 JsonApiSerializer,可以和框架完美融合,代码如下:
《?php
namespace App\Http\Serializers;
use Illuminate\Http\Resources\MissingValue;
use Illuminate\Http\Resources\Json\Resource;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Pagination\AbstractPaginator;
class JsonApiSerializer implements \JsonSerializable
{
protected $resource;
protected $resourceValue;
protected $data = ;
protected static $included = ;
public function __construct($resource, $resourceValue)
{
$this-》resource = $resource;
$this-》resourceValue = $resourceValue;
}
public function jsonSerialize()
{
foreach ($this-》resourceValue as $key =》 $value) {
if ($value instanceof Resource) {
$this-》serializeResource($key, $value);
} else {
$this-》serializeNonResource($key, $value);
}
}
if (!$this-》isRootResource()) {
return $this-》data;
}
$result = [
’data’ =》 $this-》data,
];
if (static::$included) {
$result = static::$included;
}
if (!$this-》resource-》resource instanceof AbstractPaginator) {
return $result;
}
$paginated = $this-》resource-》resource-》toArray();
$result = $this-》links($paginated);
$result = $this-》meta($paginated);
return $result;
}
protected function serializeResource($key, $value, $type = null)
{
if ($type === null) {
$type = $key;
}
if ($value-》resource instanceof MissingValue) {
return;
}
if ($value instanceof ResourceCollection) {
foreach ($value as $k =》 $v) {
$this-》serializeResource($k, $v, $type);
}
} elseif (is_string($type)) {
$included = $value-》resolve();
$data = [
’type’ =》 $included,
’id’ =》 $included,
];
if (is_int($key)) {
$this-》data = $data;
} else {
$this-》data = $data;
}
static::$included = $included;
} else {
$this-》data = $value-》resolve();
}
}
protected function serializeNonResource($key, $value)
{
switch ($key) {
case ’id’:
$value = (string)$value;
case ’type’:
case ’links’:
$this-》data = $value;
break;
default:
$this-》data = $value;
}
}
protected function links($paginated)
{
return [
’first’ =》 $paginated ?? null,
’last’ =》 $paginated ?? null,
’prev’ =》 $paginated ?? null,
’next’ =》 $paginated ?? null,
];
}
protected function meta($paginated)
{
return [
’current_page’ =》 $paginated ?? null,
’from’ =》 $paginated ?? null,
’last_page’ =》 $paginated ?? null,
’per_page’ =》 $paginated ?? null,
’to’ =》 $paginated ?? null,
’total’ =》 $paginated ?? null,
];
}
protected function isRootResource()
{
return isset($this-》resource-》isRoot) && $this-》resource-》isRoot;
}
}
?》对应的 Resource 基本还和以前一样,只是返回值改了一下:
《?php
namespace App\Http\Resources;
use App\Article;
use Illuminate\Http\Resources\Json\Resource;
use App\Http\Serializers\JsonApiSerializer;
class ArticleResource extends Resource
{
public function toArray($request)
{
$value = [
’type’ =》 ’articles’,
’id’ =》 $this-》id,
’name’ =》 $this-》name,
’author’ =》 $this-》whenLoaded(’author’),
];
return new JsonApiSerializer($this, $value);
}
}
?》对应的 Controller 也和原来差不多,只是加入了一个 isRoot 属性,用来识别根:
《?php
namespace App\Http\Controllers;
use App\Article;
use App\Http\Resources\ArticleResource;
class ArticleController extends Controller
{
protected $article;
public function __construct(Article $article)
{
$this-》article = $article;
}
public function show($id)
{
$article = $this-》article-》with(’author’)-》findOrFail($id);
$resource = new ArticleResource($article);
$resource-》isRoot = true;
return $resource;
}
}
?》整个过程没有对 Laravel 的架构进行太大的侵入,可以说是目前 Laravel 实现 JSONAPI 的最优解决方案了,有兴趣的可以研究一下 JsonApiSerializer 的实现,虽然只有一百多行代码,但是我却费了好大的力气才实现,可以说是行行皆辛苦啊。
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
在Vue中设置背景图片
使用vue + less如何实现简单换肤功能
使用angular、react和vue如何实现相同的面试题组件
利用jQuery实现滚动到底部时自动加载
在Angular2.0中如何实现modal对话框
在JS中如何实现运动缓冲效果(详细教程)
php怎么调用淘宝api
1、首先建立一个abstract文件名php为后缀的文件。并在页面中加入php标记 。
2、在页面中创建一个以abstract开头的类Ab。
3、在抽象类中创建一个抽象方法就是在创建方法的时候public前边加一个abstract但是方法不加方法体并在结尾加分号。
4、创建一个子类来集成抽象类Ab。
5、继承类创建好后实例化Sonab类并调用其中的方法就能调用成功了。

更多文章:
hover标签属性(a:hover{ color:#00F;}是什么意思,怎么使用)
2026年5月20日 07:45
js select(js 触发select onchange事件代码)
2026年5月19日 04:00
大于等于符号是什么?怎样在键盘上打出大于等于号,小于等于号急用!
2025年10月5日 00:45
用javascript加油优惠价格(现在用什么app加油最便宜)
2025年9月3日 01:45
js split 多个分隔符(js 如何用split()方法按根据“\”(反斜杠)分割字符串)
2026年8月20日 23:30
malloc返回的是什么(用malloc和数组指针申请二维数组返回什么)
2025年8月4日 09:15
mapping file(为什么File mapping比普通文件读写效率高)
2026年4月8日 06:30
translateit翻译成中文(他们正在会议中Translate it into Mandarin,)
2025年12月16日 18:45
stroke width(javascript如何实现把界面上的点,动态的依次连接成一个封闭的图形)
2025年11月9日 19:15
朱子学研究cssci来源集刊(中文社会科学引文索引的学科分类)
2026年5月4日 04:00
plsql删除表中某一条数据(plsqldeveloper删除表需要提交吗)
2026年6月10日 03:30








