当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-05 11:41:22 浏览: 评论:0 

今天小编就为大家分享一篇在Laravel中使用GuzzleHttp调用第三方服务的API接口代码,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧。

背景:用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

  1. <?php 
  2. namespace App\Http\Services; 
  3.    
  4. class APIHelper 
  5.    
  6.  public function post($body,$apiStr
  7.  { 
  8.   $client = new \GuzzleHttp\Client(['base_uri' => 'http://192.168.31.XX:xxx/api/']); 
  9.   $res = $client->request('POST'$apiStr
  10.    ['json' => $body
  11.    'headers' => [ 
  12.     'Content-type'=> 'application/json'
  13. //    'Cookie'=> 'XDEBUG_SESSION=PHPSTORM', 
  14.     "Accept"=>"application/json"
  15.   ]); 
  16.   $data = $res->getBody()->getContents(); 
  17.    
  18.   return $data
  19.  } 
  20.    
  21.  public function get($apiStr,$header
  22.  { 
  23.   $client = new \GuzzleHttp\Client(['base_uri' => 'http://192.168.31.XX:xxx/api/']); 
  24.   $res = $client->request('GET'$apiStr,['headers' => $header]); 
  25.   $statusCode$res->getStatusCode(); 
  26.    
  27.   $header$res->getHeader('content-type'); 
  28.    
  29.   $data = $res->getBody(); 
  30.    
  31.   return $data
  32.  } 

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

'Cookie'=> 'XDEBUG_SESSION=PHPSTORM',

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

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

  1. public static function post_user($body,$apiStr
  2. {   
  3.  $client = new \GuzzleHttp\Client(['verify' => '/full/path/to/cert.pem','base_uri' => 'http://xxx.xxx.com/api/']); 
  4.  $res = $client->request('POST'$apiStr
  5.   ['verify' => false, 
  6.    'json' => $body
  7.    'headers' => [ 
  8.     'Content-type'=> 'application/json'
  9.   ]); 
  10.  $data = $res->getBody()->getContents(); 
  11.  
  12.  $response=json_decode($data); 
  13.  
  14.  return $response

2、具体在Controller中使用

  1. public function index(Request $request
  2.  { 
  3.   $data = $request->json()->all(); 
  4.   $body = $data
  5.   $apiStr = '/api/xxx/list'
  6.   $api = new APIHelper(); 
  7.   $res =$api->post($body,$apiStr); 
  8.   $data = json_decode($res); 
  9.   $ret=new RetObject(); 
  10.   $ret->retCode='0000'
  11.   $ret->retMsg='Success'
  12.   $ret->data=$data
  13.   return response()->json($ret); 
  14.  } 

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

Tags: Laravel GuzzleHttp API接口

分享到: