接口编程
一、了解接口
1.什么是接口?
API(Application Programming Interface,应用程序编程接口)
程序之间交互数据的一种方式。
接口编程(开发):分为接口编写,接口调用两部分。
- 接口编写:在服务端编写一个请求地址(控制器中的方法)中的代码,接收请求参数、处理数据,返回数据。服务端接口就是一个通过url可以访问到的请求地址,类似服务器端处理ajax请求
- 接口调用:在其他端(浏览器客户端、其他服务端)发送请求,调用服务端的接口地址。
2.请求类型
从请求方式划分 :get、post
从请求协议划分:http、https
3.发送请求的方式
从浏览器(客户端)发送请求:
- 从地址栏输入url发送请求,只能GET
- form 表单提交,可以是GET、POST
- Ajax请求,可以是GET、POST
从服务器端php发送请求:
- header(Location:http://www.exaple.com;) GET,无返回值
- file_get_contents(url)可以获取对应地址的输出,GET,有返回值
- 使用PHP内置的CURL函数库 可以是GET、POST、http、https有返回值
CURL请求步骤[注意]
[注意]: 使用CURL函数库,必须要在php.ini中开启php_curl扩展②建议在php.ini中开启php_openssl扩展(本身不是curl必须的,是调用一些第三方接口需要的) ③若还是不能使用,需要将php安装目录设置到环境变量
curl_init() //函数初始化请求会话,可以传递一个请求地址参数。
curl_setopt() //函数设置请求参数(选项)
curl_exec() //函数发送请求,有返回值
//返回值数据类型:字符串格式
//根据字符串结构,通常分为:普通字符串/json格式/xml格式
curl_close() //关闭请求会话
二、经典案例
1.快递查询接口(快递100)
快递100提供签约和免签约2个快递接口,以免签约为例
接口地址:https://www.kuaidi100.com/query?type=快递公司&postid=运单编号
请求方式:get
示例:快递公司:yunda 单号:3101314976598
此接口是get方式的接口,在浏览器直接访问,得到的是json格式的字符串。
步骤1
//封装一个函数用来发送curl请求
/*
*$url 请求的地址
*$post 请求方式,默认get
*$params post方式的请求参数
*https 是否是https请求,默认http
*/
function curl_request($url, $post=false, $params=array(), $https=false){
$ch = curl_init($url); //初始化请求会话
if($post){
curl_setopt($ch, CURLOPT_POST, true); //设置请求方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $params); //设置post请求参数,get的参数在url中
}
if($https){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //如果是https请求,且没有证书,可以禁止从服务器端验证ssl证书
}
$res = curl_exec($ch); //发送请求,有返回值
curl_close($ch); //关闭会话
return $res;
}
2编写控制器方法
public function kuaidi(){
$type = 'yunda';
$postid = '3101314976598';
$url = "https://www.kuaidi100.com/query?{$type}&{$postid}";
//发送请求
$res = curl_request($url, false, array(), true);
if(!$res) die('请求失败');
$data = json_decode($res, true);//将返回的数组转换为数组
if($data['status'] != 200) die($data['message']);
/***************如果1:直接输出展示************/
foreach($data['data'] as $v){
echo $v['time'] .'----'. $v['context'] .'<br>';
}
/************如果2:ajax请求*************/
$return = array(
'code' => 10000,
'msg' => 'success',
'data' => $data['data']
)
$this -> ajaxReturn($return);
/************如果3:调用页面展示***********/
$this -> assign('data', $data['data']);
$this -> display();
}
2.短信验证码
使用接口需要先申请接口的appkey
模板页面发送ajax请求(略)
编写控制器方法是
public function sendmsg(){
$phone = I('post.phone');
$code = mt_rand(1000, 9999);
$content = "您的验证码是:{$code}";
$appKey = "你获取的appKey";
$url = "请求的接口地址?$mobile={$phone}&$content={$content}&$code={$code}";
//发送请求
$res = curl_request($url,post,array(),$true);
if(!$res){
$return = array('code' => 10001, 'msg' => '网络异常');
$this -> ajaxReturn($return);
}
$data = json_encode($res, true);
if($data['code'] != 10000){
$return = array('code' => 10002, 'msg' => $data['msg']);
$this -> ajaxReturn($return);
}
$return = array('code'=>10000,'msg'=>"发送成功");
$this -> ajaxReturn($return);
}