在Laravel中使用GuzzleHttp调用第三方服务的API接口代码


Posted in PHP onOctober 15, 2019

背景:用laravel进行分布式开发,自己写了一个业务系统,还写了一个用户中心和其他的信息中心

现在需要做到前端只需要访问业务系统的API接口也可以获取到其他服务上面的数据

找了很多资料,最后查到了Laravel自带的GuzzleHttp可以达到我的需求

Guzzle中文文档:

http://guzzle-cn.readthedocs.io/zh_CN/latest/index.html

引入安装

在composer.json文件的“require”项中加入

"guzzlehttp/guzzle": "^6.3",

然后命令行执行composer install

在项目中的具体用法:

1、在项目某个地方,我选择的是在app/Http/Services目录下面新建一个APIHelper

<?php
namespace App\Http\Services;
 
class APIHelper
{
 
 public function post($body,$apiStr)
 {
  $client = new \GuzzleHttp\Client(['base_uri' => 'http://192.168.31.XX:xxx/api/']);
  $res = $client->request('POST', $apiStr,
   ['json' => $body,
   'headers' => [
    'Content-type'=> 'application/json',
//    'Cookie'=> 'XDEBUG_SESSION=PHPSTORM',
    "Accept"=>"application/json"]
  ]);
  $data = $res->getBody()->getContents();
 
  return $data;
 }
 
 public function get($apiStr,$header)
 {
  $client = new \GuzzleHttp\Client(['base_uri' => 'http://192.168.31.XX:xxx/api/']);
  $res = $client->request('GET', $apiStr,['headers' => $header]);
  $statusCode= $res->getStatusCode();
 
  $header= $res->getHeader('content-type');
 
  $data = $res->getBody();
 
  return $data;
 }
}

在项目中主要我用的是post方法,

'Cookie'=> 'XDEBUG_SESSION=PHPSTORM',

这一行加进去之后可以使用XDebug进行调试,但是在真正用起来的时候不需要在header里面加这一行了

如果是调用https接口,如果有证书问题,则加入这两项'verify' => '/full/path/to/cert.pem','verify' => false,不验证证书。

public static function post_user($body,$apiStr)
 {  
  $client = new \GuzzleHttp\Client(['verify' => '/full/path/to/cert.pem','base_uri' => 'http://xxx.xxx.com/api/']);
  $res = $client->request('POST', $apiStr,
   ['verify' => false,
    'json' => $body,
    'headers' => [
     'Content-type'=> 'application/json']
   ]);
  $data = $res->getBody()->getContents();
 
  $response=json_decode($data);
 
  return $response;
 }

2、具体在Controller中使用

public function index(Request $request)
 {
  $data = $request->json()->all();
  $body = $data;
  $apiStr = '/api/xxx/list';
  $api = new APIHelper();
  $res =$api->post($body,$apiStr);
  $data = json_decode($res);
  $ret=new RetObject();
  $ret->retCode='0000';
  $ret->retMsg='Success';
  $ret->data=$data;
  return response()->json($ret);
 }

这样就可以在一个系统里用GuzzleHttp调用第三方的API接口了

以上这篇在Laravel中使用GuzzleHttp调用第三方服务的API接口代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP在Web开发领域的优势
Oct 09 PHP
用PHP制作静态网站的模板框架(四)
Oct 09 PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
Sep 22 PHP
又十个超级有用的PHP代码片段
Sep 24 PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
PHP实现接收二进制流转换成图片的方法
Jan 10 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
针对PHP开发安全问题的相关总结
Mar 22 PHP
PHP命令行与定时任务
Apr 01 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 #PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
Oct 15 #PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 #PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 #PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 15 #PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
Oct 15 #PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 #PHP
You might like
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
PHP goto语句用法实例
2019/08/06 PHP
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
python开发之str.format()用法实例分析
2016/02/22 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
Python3中详解fabfile的编写
2018/06/24 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
经销商会议欢迎词
2014/01/11 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
化学教学随笔感言
2014/02/19 职场文书
2014植树节活动总结
2014/03/11 职场文书
詹天佑教学反思
2014/04/30 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
婚宴致辞
2015/07/28 职场文书
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis