1

我正在制作一个用于 Roblox 的 HTTP API。我正在使用 PHP 和 cURL 来做到这一点。
但是,有一种方法让我陷入困境。那是通过 PHP 中的 roblox 发送消息。我已经使用 Fiddler 捕获了消息发送请求。我已将所有标头放入我的 cURL 请求中。
我还在获取 .ROBLSECURITY cookie、X-CSRF 令牌以及 RBXSessionTracker 和 __RequestVerification cookie。

这是您想要帮助的人的消息传递代码:

$RecipientId=$_POST['RecipientId'];
$Subject=$_POST['Subject'];
    $Message=$_POST['Message'];
    $AuthCookie=decodeJSON($_POST['Login']);
    $AuthCookie=$AuthCookie[0];
    $TokenCurl=curl_init('roblox.com/build/upload?groupId=1');
    curl_setopt_array($TokenCurl,array(
        CURLOPT_HTTPGET => 1,
        CURLOPT_FRESH_CONNECT => 1,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_HEADER => 1,
        CURLOPT_HTTPHEADER => array('Cookie: .ROBLOSECURITY='.$AuthCookie),
    ));
    $TokenResponse=curl_exec($TokenCurl);
    $TokenHeaderSize=curl_getinfo($TokenCurl,CURLINFO_HEADER_SIZE);
    $TokenCurlError=curl_error($TokenCurl);
    $Cookies=GetCookies(substr($TokenResponse,0,$TokenHeaderSize));
    $SessionTracker=$Cookies['RBXSessionTracker'];
    $RequestVerification=$Cookies['__RequestVerificationToken'];
    $AuthCookie='.ROBLOSECURITY='.$AuthCookie.'; RBXSessionTracker='.$SessionTracker.'; __RequestVerificationToken='.$RequestVerification.';';
    curl_close($TokenCurl);
    if($TokenCurlError!==''){
        die($TokenCurlError);
    };
    $Cache=time();
    preg_match("\`<script\stype=\"text/javascript\">\s*?Roblox\.XsrfToken\.setToken\('(.*?)'\);\s*?</script>\`",$TokenResponse,$Matches);
    $Token=$Matches[1];
    if(empty($Token)){
        die("Could not get X-CSRF Token");
    };
    $PostData=json_encode(array(subject=>$Subject,body=>$Message,recipientid=>$RecipientId,cacheBuster=>$Cache));
    $Curl=curl_init('roblox.com/messages/send');
        curl_setopt_array($Curl,array(
            CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0',
            CURLOPT_POST => 1,
            CURLOPT_FRESH_CONNECT => 1,
            CURLOPT_HEADER => 1,
            CURLOPT_POSTFIELDS => $PostData,
            CURLOPT_HTTPHEADER => array('Content-Length: '.strlen($PostData),'X-CSRF-TOKEN: '.$Token,'Referer: www.roblox.com/messages/compose?recipientId='.$RecipientId,'X-Requested-With: XMLHttpRequest','Cookie: '.$AuthCookie,'Accept: application/json, text/javascript, */*; q=0.01','Accept-Language: en-US,en;q=0.5','Accept-Encoding: gzip, deflate','Connection: keep-alive','Pragma: no-cache','Cache-Control: no-cache'),
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_FOLLOWLOCATION => 1,
            CURLOPT_VERBOSE => 1
        ));
        $ResponseBody=curl_exec($Curl);
        echo $ResponseBody;
        $HTTPResponseCode=curl_getinfo($Curl,CURLINFO_HTTP_CODE);
        $HTTPHeaderSize=curl_getinfo($Curl,CURLINFO_HEADER_SIZE);
        $ResponseHeader=substr($ResponseBody,0,$HTTPHeaderSize);
        $CurlError=curl_error($Curl);
        curl_close($Curl);
        if($CurlError!==''){
            die($CurlError);
        };
        $MessageResult=decodeJSON(substr($ResponseBody,$HTTPHeaderSize));
        echo json_encode(array(Message=>$MessageResult['message']));

由于声誉,我从链接中删除了“http://”。

一切正常,只是不会发送消息。有谁知道您发送消息到底需要什么?

4

0 回答 0