【问题标题】:How do I integrate to TeamUp API Calendar in PHP?如何在 PHP 中集成到 TeamUp API 日历?
【发布时间】:2016-08-22 13:37:05
【问题描述】:

按照http://apidocs.teamup.com/ 此处的文档,我已经通过composer require 'guzzlehttp/guzzle:^6.0' 安装了 Guzzle 库...然后我生成了一个 API 密钥。

在他们提供的示例代码中,我尝试查询 Teamup API

<?php
$client = new GuzzleHttp\Client(['headers' => ['Teamup-Token' => 'API KEY ']]);
$res = $client->get('https://api.teamup.com/ks73ad7816e7a61b3a/subcalendars');

echo $res->getStatusCode();
// "200"

echo $res->getHeader('content-type');
// 'application/json'

echo $res->getBody();
// {"subcalendars":[ ... ]}
?>

但是当我在浏览器上运行时无法得到任何响应。 但是,当我在终端上运行 curl 版本时

curl "https://api.teamup.com/ks73ad7816e7a61b3a/subcalendars" 
-H "Teamup-Token: API KEY" 

我得到了预期的响应。

第二次测试您的 API 密钥

我试过了:

<?php
$client = new GuzzleHttp\Client(['headers' => ['Teamup-Token' => 'API_KEY']]);
$res = $client->get('https://api.teamup.com/check-access');

if ($res->isSuccessful()) {
    echo 'Your API key works!';
} else {
    echo 'API key test failed: ' . $res->getBody();
}
?>

除了 curl 版本没有响应:

curl "https://api.teamup.com/ks73ad7816e7a61b3a/subcalendars" 
-H "Teamup-Token: API_KEY"

有 json 格式的响应。显然我似乎做错了什么。会是什么呢?任何人? 谢谢你。

【问题讨论】:

  • 我遇到了与GuzzleHttp 类似的问题。通过构造函数传递标题时,它没有正确放置标题。尝试使用request() 方法并将标题放入其中。即:$objGuzzleClient = new GuzzleHttp\Client(); $o = $objGuzzleClient-&gt;request( "GET", "https://api.teamup.com/check-access", array("headers" =&gt; array("Teamup-Token" =&gt; "API_KEY")) ); var_dump($o-&gt;getStatusCode()); var_dump($o-&gt;getBody());
  • 将您的示例代码插入我的 API KEY 但仍然没有响应。 @ʰᵈˑ

标签: php json curl guzzle


【解决方案1】:

似乎我找到了解决问题的方法。 为了任何曾经或曾经面临同样问题的人,这是我的解决方法。

  1. 创建由 Web 服务器提供的测试文件

  2. 打开命令窗口并切换到该目录

  3. 执行“作曲家安装”。这将安装所需的 Guzzle 库。 (这假设您的开发机器上安装了 php 包管理器 Composer。)

  4. 从网络浏览器访问 php 脚本。

你一定会得到回应的。

<?php

include 'vendor/autoload.php';

define('API_KEY', 'Your_API_KEY');

/**
 * Check API access
 */

$client = new GuzzleHttp\Client([
    'headers' => ['Teamup-Token' => API_KEY], 
    // use verify = false in test mode only if you do not have a CA bundle 
    // properly configured, but this should generally not be needed
    'verify' => true,
]);
$res = $client->get('https://api.teamup.com/check-access');

echo $res->getStatusCode();
// "200"

echo "<br /><br />";
echo $res->getHeader('content-type')[0];
// "application/json"

echo "<br /><br />";
echo '<strong>Response body</strong>';
// The (string) cast is needed to convert the body to a string, see https://stackoverflow.com/a/30549372/6512
$rawResponse = (string) $res->getBody();
echo '<pre>' . $rawResponse . '</pre>';

echo "<br /><br />";
echo '<strong>Formatted response body</strong>';
$json_string = json_encode(json_decode($rawResponse), JSON_PRETTY_PRINT);
echo '<pre>' . $json_string . '</pre>';

应该可以!

【讨论】:

  • 是的,遇到了同样的问题。解码、编码位是重要的部分。希望它在他们的 API 文档中这么说。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 2014-06-23
  • 2011-06-10
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多