【问题标题】:How can I POST to multiple IDs from an API endpoint using PHP and CURL?如何使用 PHP 和 CURL 从 API 端点发布到多个 ID?
【发布时间】:2019-12-27 04:55:37
【问题描述】:

我正在尝试使用 PHP 通过 Canvas API 发布消息。

我相信这更像是一个 PHP 问题,而不是 Canvas。

当我为“recipients[]”包含单个用户 ID(“79”是一个特定的用户想法并且 API 向他们发送一条消息 - 就像一封电子邮件)时,以下代码可以工作。

有关 API 文档和尝试发布到多个 ID 的问题,请参见下文。

$post = [
  'recipients[]' => 79,
  'group_conversation' => true,
  'bulk_message' => true,
  'subject'=>$msg_subject,
  'body'=>$msg_body,
];


$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => $token_url,
  CURLOPT_HTTPHEADER => $header,
  CURLOPT_SSL_VERIFYPEER => false,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => $post,
  CURLOPT_RETURNTRANSFER => true
));

$lti_msgresponse = curl_exec($curl);
curl_close($curl);
echo($lti_msgresponse);

这是 Canvas 文档: https://edu.pretpriemacedu.mk/doc/api/conversations.html#method.conversations.create

具体来说:

收件人[] 必填
字符串
收件人 ID 数组。这些可能是分别以“course_”或“group_”为前缀的用户 ID 或课程/组 ID,例如收件人[]=1&recipients=2&recipients[]=course_3

API 要求为这个“数组”发送一个字符串(括号结尾?)。您不能传递多个“收件人”字段,因为只有最后一个会记录(duh)。

我认为解决方案可能与使用 http_build_query(请参阅https://www.php.net/http_build_query)发送复杂/嵌套数组有关,但我尝试了各种方法将更多内容打包到“recipients[]”中,但都失败了。

任何 PHP 或通用 API 智慧都值得赞赏...

【问题讨论】:

    标签: php canvas-lms


    【解决方案1】:

    post 参数(特别是“recipients”)应如下所示

    $post = [
        'recipients'         => '59,48,19,55',
        'group_conversation' => true,
        'bulk_message'       => true,
        'subject'            => $msg_subject,
        'body'               => $msg_body,
    ];
    

    或者,也许如下:'recipients' => [59,48,19,55]。但是recipients[] 将是一个奇怪的参数,因为它包含特殊字符。

    【讨论】:

    • 那将是非常合乎逻辑的!并感谢您的回答...但是,您不能在数组内传递数组 - 不支持嵌套数组。这就是我开始查看 http_build_query 的原因 - 可能会破坏 'recipients' 数组......想法?
    • 我不认为这是嵌套数组的问题......它似乎只接受一个字符串,但这里的这一点完全是午餐recipients[]=1&recipients=2&recipients[]=course_3......我会联系api的工作人员并询问他们的预期。在这种情况下,电话或电子邮件/支持线程可能比花时间编码便宜得多。
    • 哈!好吧,知道我并不完全疯了会很有帮助,这是一些废话文档。干杯。
    • 100% 是的!解决您也无权访问的问题非常困难。 login page 将我推荐给 instructure.com。欢呼。
    • 所以 - 你是对的。花了我一些实验和徘徊......关于蹩脚文档的最大坏处是使用收件人[]的错误引导。此业务:"recipients[]=1&recipients=2" 您唯一需要的行是 'recipients' => '256,268,276,249,26' 感谢 Canvas 工程师!一天中的大部分时间都在为此烦恼……但在此过程中学到了很多额外的东西……叹息。如果您想调整您的解决方案以建议完全删除“收件人 []”,我会接受作为解决方案。再次感谢圣诞节的帮助和精神上的支持!
    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2014-10-26
    • 2015-10-28
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多