Onesignal include_external_user_ids在发送推送通知API请求中格式不正确

问题描述 投票:0回答:1

有人请帮助我使用存储在onesignal变量中的多个玩家ID。

我有一个名为$ onesigId的变量,它包含以下值的字符串:“ 2”,“ 3”,“ 77”,“ 99”。在我的onesignal发送函数中,我将其设置为如下数组:$ onesigId = array($ onesigId);但是当我发送通知时,结果显示如下:

JSON sent: {"app_id":"my_app_id","headings":{"en":"Amazing Features"},"include_external_user_ids":["\"2\",\"3\",\"77\",\"99\""],"data":{"foo":"bar"},"url":"https:\/\/testurl.com\/help","contents":{"en":"My testing message"}} JSON received: {"allresponses":"{\"id\":\"\",\"recipients\":0,\"errors\":[\"All included players are not subscribed\"]}"}

下面是我的代码:

function sendMessage(){
        global $onesigTitle;
        global $onesigMessage;
        global $onesignalUrl;
        global $onesigId;

        $onesigId = array($onesigId);
        $content = array(
            "en" => $onesigMessage
            );

        $fields = array(
            'app_id' => "my_app_id",
            'headings' => array("en" => $onesigTitle),
            'include_external_user_ids' => $onesigId,
            'data' => array("foo" => "bar"),
            'url' => $onesignalUrl,
            'contents' => $content
        );


        $fields = json_encode($fields);

        print("\nJSON sent:\n");
        print($fields);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://onesignal.com/api/v1/notifications");
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8',
                                                   'Authorization: Basic MY KEY HERE'));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

        $response = curl_exec($ch);
        curl_close($ch);

        return $response;


    }

    $response = sendMessage();
    $return["allresponses"] = $response;
    $return = json_encode( $return);

    print("\n\nJSON received:\n");
    print($return);
    print("\n");

请注意,所有其他变量都按预期方式工作,只是$ onesigId行为异常。当我仅添加一个ID时,它会成功发送。我想知道为什么array(“ 2”,“ 3”,“ 77”,“ 99”)变成“ \” 2 \“,\” 3 \“,\” 77 \“,\” 99 \响应中的“”以及解决方法。

非常感谢您的帮助。

php push-notification onesignal
1个回答
0
投票

您应该在创建数组之前删除双引号:

$onesigId = array(str_replace('"', '', $onesigId));
© www.soinside.com 2019 - 2024. All rights reserved.