在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 静态变量与自定义常量的使用方法
Jan 26 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
Jun 02 PHP
php获取目标函数执行时间示例
Mar 04 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
Jun 23 PHP
深入理解PHP中的global
Aug 19 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
PHP实现抓取迅雷VIP账号的方法
Jul 30 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 PHP
php数据访问之增删改查操作
May 09 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 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
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
深入理解Promise.all
2018/08/08 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
python实现图片素描效果
2020/09/26 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
毕业生优秀推荐信
2013/11/26 职场文书
上学迟到的检讨书
2014/01/11 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
研究生导师推荐信
2014/09/06 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
十佳少年事迹材料
2014/12/25 职场文书
MySQL基础(一)
2021/04/05 MySQL
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python