如何在php中对一个空数组(非空但是空)进行urlencode,以传递给curl请求的CURLOPT_POSTFIELDS?

时间:2016-09-07 16:58:08

标签: php facebook curl

我在php中创建Fb messenger bot并使用curl与fb服务器进行交互。现在发送文件fb要我以这种格式发送请求

   `    curl  \
    -F recipient='{"id":"USER_ID"}' \
  -F message='{"attachment":{"type":"image", "payload":{}}}' \
  -F filedata=@/tmp/shirt.png;type=image/png \
  "https://graph.facebook.com/v2.6/me/messages?access_token=PAGE_ACCESS_TOKEN"     `

在这里你可以看到有效载荷是一个空数组。 我正在做的是

 $res['message'] = [
        'attachment' => [
          'type' => 'image',
              'payload' => [

            ]
        ]

    ]; `

在此之后,我正在使用像这样的curl_setopt

  curl_setopt($process, CURLOPT_POST, 1);
         curl_setopt($process,  CURLOPT_BINARYTRANSFER , true);
        curl_setopt($process,CURLOPT_POSTFIELDS, http_build_query($data));

但这不起作用,我正在

   {"error":{"message":"(#100) The parameter message[attachment] [payload] is   required","type":"OAuthException","code":100,"fbtrace_id":"EaQ66DTssrV"}}

经过一些调试后,我得出的结论是,由于我的附件数组为空,http_build_query并未将其考虑在内。 请先查看comment here

所以我的问题是如何在php中对一个空数组进行urlencode。

到目前为止我一直在尝试

  1. 尝试使用array()和''(单引号)通过将其分配给有效负载(此处包含有效负载但是为空且fb seerver返回相同的错误)
  2. 我可以成功发送不包含空数组的其他类型的消息。
  3. 当我使用ssh access从shell执行时,
  4. 给出的curl命令是正确的。
  5. 内容类型是多部分/表单数据。
  6. 我在一个请求中发送数据和文件没问题吗?
  7. 尝试传递数据而不进行编码 - fb错误收件人为空

  8. 尝试将数组直接传递给POSTFIELDS,但获得了{"error":{"message":"(#100) param recipient must be non-empty.","type":"OAuthException","code":100,"fbtrace_id":"BQ00BtZZmPF"}} 如果有更好的方法在PHP中执行此curl命令请告诉我。感谢

0 个答案:

没有答案