thinkphp框架resultful学习记录
本周完成的一个thinkphp框架的实例
1.快递查询实例
对于本周的学习过程resultful的技术过程当中接触到了接口编程
完成了第三方查询快递的接口信息平台
其中蕴含的知识
1.CURL函数库
Curl函数库的使用流程:
①使用curl_init初始化请求会话
②使用curl_setopt设置请求一些选项
③使用curl_exec执行,发送请求
④使用curl_close关闭请求会话
需要封装一个函数用来发送curl请求需要在application/common.php当中封装一个curl_request
①在php.ini中开启php_curl扩展(必须开启)
②建议在php.ini中开启php_openssl扩展(本身不是curl必须的,是调用一些第三方接口需要的)
③如果以上操作重启apache后,curl还是不能使用,需要将php安装目录设置到环境变量。
在common.php当中封装一个公共的接口函数
if(!function_exists('curl_request')){ //发送curl请求 function curl_request($url, $type = false, $params = [], $https=false) { //调用curl_init() 初始化请求 $ch = curl_init($url); //调用curl_setopt()设置请求选项 if($type){ //true 发送post请求 false 默认发送get请求 //post请求 设置请求方式 curl_setopt($ch, CURLOPT_POST, true); //设置请求参数 curl_setopt($ch, CURLOPT_POSTFIELDS, $params); } //如果是https请求 需要禁止从服务器端验证本地的证书 if($https){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); } //调用curl_exec() 发送请求 获取结果 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($ch); // if(!$res){ // //错误信息 // $error = curl_error($ch); // //错误码 // $errno = curl_errno($ch); // } //调用curl_close() 关闭请求 curl_close($ch); return $res; } }
封装好调用的接口的第三方函数以后从第三方数据平台进行查询
这里以聚合数据平台为例:接口页面:https://www.juhe.cn/docs/api/id/43 ps:现在该网站快递查询免费已经结束,可以以此案例为例子去尝试其他的接口查询
接口地址:http://v.juhe.cn/exp/index
返回格式:json/xml
请求方式:http post/get
必传请求参数: com 快递公司编号; no 快递单号; key 授权key
请求示例:http://v.juhe.cn/exp/index?com=zto&no=73115984252335&key=ac2dde994cc76d4f15738f7f97af7ca4
api模块index控制器kuaidi方法
public function kuaidi() { //请求地址 $url="http://v.juhe.cn/exp/index?com=zto&no=73115984252335&key=ac2dde994cc76d4f15738f7f97af7ca4"; //请求方式 //请求参数get //请求参数已经拼接到url中 //发送请求 $res=curl_request($url); if(!$res){ echo '请求错误';die; } //解析数据 $arr=json_decode($res,true); if($arr['resultcode']!= 200){ echo $arr['reason'];die; echo '查询失败';die; } //获取物流进度数据 $list=$arr['result']['list']; echo '时间----------进度<br>'; foreach ($list as $v){ echo $v['datetime'],'--------------',$v['remark'],'<br>'; } die; }
由于案例中的申请需要实名认证,尝试了教学视频当中的案例,然后输出如下结果