我在CakePHP 2.5.6中使用了Guzzle 3.8.1,并且正在对Box API进行调用。 我希望能够在访问令牌过期时刷新访问令牌。 我遇到的问题是,我可能正在使用N个可能的访问令牌中的任何一个,并且希望能够使用要在其中定义该功能的范围内的$ account_id。我看不到如何将其传递给Listener定义的函数,因为我自己没有调用它。 我确实看到$ event变量中存在过期的access_token,但我必须找到它,然后从我传递给Box的标头中对其进行解析。 我想我可以添加一个包含account_id的自定义标头,但这似乎是解决该问题的一种坏方法。 我可以以某种方式在请求中指定一个不会作为Box调用的一部分添加的变量吗? 任何建议都非常感谢,谢谢!

`

public function get_folder_list ($account_id = null, $parent_folder_id = null) {
    // Get account
    $this->Account = ClassRegistry::init('Account');
    $account = $this->Account->findById($account_id);
    $this->Account->log($account);

    // If account doesn't exist, throw error
    if(empty($account)) {
        throw new NotFoundException(__('Account id not found: ' . $account_id));
    }

    // Call Box for folder list
    $box_url = "https://api.box.com/2.0/folders/";
    if (empty($parent_folder_id)) {
        $box_url .= "0";
    } else {
        $box_url .= $parent_folder_id;
    }
    $this->Account->log($box_url);
    $bearer = 'Bearer ' . $account['Account']['access_token'];
    $client = new Guzzle\Http\Client();

    $client->getEventDispatcher()->addListener('request.error', function(Event $event) {
        if ($event['response']->getStatusCode() == 401) {
            $Account = new Account;
            $Account->log($event);
            $Box = new BoxLib;                
            $account = $Box->refresh_token($account_id);
            $bearer = 'Bearer ' . $account['Account']['access_token'];
            $request = $client->get($box_url, array('Authorization' => $bearer));
            $event['response'] = $newResponse;

            $event->stopPropagation();
        }
    });
    $request = $client->get($box_url, array('Authorization' => $bearer));

     try {
        $response = $request->send();
     } catch (Guzzle\Http\Exception\BadResponseException $e) {
        // HTTP codes 4xx and 5xx throw BadResponseException
        $this->Account->log('Service exception!');
        $this->Account->log('Uh oh! ' . $e->getMessage());
        $this->Account->log('HTTP request URL: ' . $e->getRequest()->getUrl() . "\n");
        $this->Account->log('HTTP request: ' . $e->getRequest() . "\n");
        $this->Account->log('HTTP response status: ' . $e->getResponse()->getStatusCode() . "\n");
        $this->Account->log('HTTP response: ' . $e->getResponse() . "\n");            
     }

    $this->Account->log($response->json());
    $json = $response->json();

    $folder_list = array();
    foreach ($json['item_collection']['entries'] as $folder) {
        $folder_list[$folder['id']] = $folder['name'];
    }       
    //$this->Account->log($folder_list);

    return $folder_list;
}

`

  ask by George Campbell translate from so

本文未有回复,本站智能推荐:

1回复

在CakePHP 2.x中使用guzzle

我试图在CakePHP 2.x应用程序上使用guzzle6.x 。 我需要做的是将Guzzle Client初始化为某些控制器,但是在将要加载的控制器上,我需要使用相同的配置加载它。 基本上我不知道哪种是实现它的最佳方法。 我在考虑以下问题: 我是否应该在AppContr
1回复

在guzzle中使用文件和字段的POST请求

好的,我会给一些背景开始。 我有用CakePHP编写的系统A来处理广告和产品等。 最近,我一直致力于另一个用Laravel编写的系统,它可以作为一个自助工具,供房地产经纪人发布和管理他们在系统A中的房地产清单。我现在正在上传自己的图像。将站点提供给系统A.我在Cake中编写了一个简单的控制器
1回复

在Guzzle中等效于CakePHP HttpSocket

我有一段用CakePHP编写的代码,用于将HTTP Post Request发送到URI并获取响应。 我不了解CakePHP,需要将其更改为Guzzle样式以发送HTTP Post Request 。 这是CakePHP代码: 主要目标是: 我如何使用Guzzle精确发
1回复

如何使用Guzzle通过URl将数据传递到另一个应用程序?

我想将数据从一个应用程序发送到另一个应用程序..在这里,我想将第一个应用程序数据发送到第二个应用程序窗体。 而我使用的平台是Laravel。 这是第一个应用程序控制器: 第二种申请表: 然后在第二个Controller中,将路由放入api.php 但是我面临的问题
1回复

将位图/ uri传递给Box Android API v2

编辑:我编写了一个传递身份验证框客户端和位图字节流的函数。 还被告知Box的根目录的ID为0。但是我仍然无法上传。 我需要做的是创建一个目录(如果不存在)并将文件上传到该目录中。 因此,我有一个墙纸应用程序,可以从服务器获取一些图像。 我正在尝试集成box,以便能够通过Box
1回复

传递给Guzzle的createRequest方法时类型未知的资源

当我在$option参数的body元素中为createRequest传递资源引用时,Guzzle 5.3.0将资源类型stream转换为unknown 。 这使资源无法使用,并导致Guzzle内部发生异常。 例如 就在createRequest之前, $fp的类型将是stream
1回复

使用box-api进度监听器

我试图下载使用他们的下载功能说明盒API应用程序的文件在这里 。 但是我无法使用onProgessChanged函数。 有没有关于如何访问它的例子? 我该如何访问它?
1回复

尝试上传文件时使用HTTP 500

这是我的Box上传POST,用于将文件上传到特定文件夹: 但是我得到了这个回复,但这并不能帮助我理解问题所在: 谁能告诉我在导致HTTP 500的请求中我做错了什么?