使用HTTPful库检索JSON响应



我目前正在构建一个电子邮件客户端(入站和出站发送),使用Mandrill作为电子邮件发送/入站服务和Laravel 3.x。

为了发送消息,我在我的mail/compose POST方法中使用以下代码使用HTTPful bundle和Mandrill。

$url = 'https://mandrillapp.com/api/1.0/messages/send.json';
$data = array( 
  'key' => '{removedAPIkey}',
  'message' => array (
    'to'    =>  array( array( "email" => $_to ) ),
    'from_name'   =>  Auth::user()->name,
    'from_email'  =>  Auth::user()->email,
    'subject' =>  $_subject,
    'html'    =>  $_body
    ),
  'async' => true
        );
$request = Httpful::post($url)->sendsJson()->body($data)->send();

链接到上面更好的格式代码:http://paste.laravel.com/m79

现在,据我所知,从API日志中可以看出,请求是正确发出的(使用预期的JSON),并且发送回以下格式的响应:

[
  {
      "email": "test@test.com",
      "status": "queued",
      "_id": "longmessageID"
  }
]

然而,我要做的是访问请求的响应(特别是_id属性),这是在JSON中。现在,据我所知,HTTPful类应该自动执行此操作(使用json_decode())。然而,访问:

$request->_id;

不工作,我不完全确定如何获取此数据(这是必需的,因此我可以记录此软反弹,硬反弹和拒绝消息,用于邮政管理员式功能)

如有任何帮助,不胜感激。

编辑

使用下面的代码,导致邮件被发送,但返回一个错误:

$url = 'https://mandrillapp.com/api/1.0/messages/send.json';
$data = array( 
  'key' => '{removedAPIkey}',
  'message' => array (
    'to'    =>  array( array( "email" => $_to ) ),
    'from_name'   =>  Auth::user()->name,
    'from_email'  =>  Auth::user()->email,
    'subject' =>  $_subject,
    'html'    =>  $_body
    ),
  'async' => true
        );
$request = Httpful::post($url)->sendsJson()->body($data)->send();
if ( $request[0]->status == "queued" ) {
    $success = true;
}

导致抛出异常:Cannot use object of type HttpfulResponse as array

我必须说,非常感谢Aiias的帮助。我自己设法解决了这个问题(我一定花了几个小时看这个)。对于任何想知道的人来说,HTTPful bundle有一个body数组,其中保存了响应。因此,下面的代码可以工作:

$url = 'https://mandrillapp.com/api/1.0/messages/send.json';
$data = array( 
  'key' => '{removedAPIkey}',
  'message' => array (
    'to'    =>  array( array( "email" => $_to ) ),
    'from_name'   =>  Auth::user()->name,
    'from_email'  =>  Auth::user()->email,
    'subject' =>  $_subject,
    'html'    =>  $_body
    ),
  'async' => true
        );
$request = Httpful::post($url)->sendsJson()->body($data)->send();
if ( $request->body[0]->status == "queued" ) {
    $success = true;
}
再次,非常感谢Aiias为我澄清了一些主要的困惑!

相关内容

  • 没有找到相关文章