2

サーバー側のphpコードで一意のiOSデバイスを識別するコードを生成したい. API から正しい応答を取得できません。

200 の http 応答を受け取りましたが、「デバイス トークン ペイロードが見つからないか、フォーマットが正しくありません」というメッセージが表示されます

<?php
require_once "vendor/autoload.php";
use Zenstruck\JWT\Token;
use Zenstruck\JWT\Signer\OpenSSL\ECDSA\ES256;
use \Ramsey\Uuid\Uuid;


$deviceToken = (isset($_POST["deviceToken"]) ? $_POST["deviceToken"] : null);
$transId = (isset($_POST["transId"]) ? $_POST["transId"] : null);



function generateJWT($teamId1, $keyId1, $privateKeyFilePath1) {

    $tt = time();
    $payload = [
    "iss" => $teamId1,
    "iat" => $tt
    ];

    $header = [
    "alg" => "ES256",
    "kid" => $keyId1
    ];

    $token = new Token($payload, $header);

    return (string)$token->sign(new ES256(), $privateKeyFilePath1);
}

function postReq($url, $jwt, $bodyArray) {

    $body = json_encode($bodyArray);

    $header = array('Authorization: Bearer '.$jwt,
                    'Content-Type: application/json',
                    'Content-Length: '.strlen($body)
                    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);  //Post Fields
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

    $server_output = curl_exec($ch);

    curl_close($ch);

    return $server_output;

}

$teamId = "####";
$keyId = "####";
$privateKeyFilePath = "AuthKey_4A34ER43.p8";

$jwt = generateJWT($teamId, $keyId, $privateKeyFilePath);

//    $body = [
//    "device_token" => $deviceToken,
//    "transaction_id" => $transId,
//    "timestamp" => ceil(microtime(true)*1000)
//    ];

$ttt = ceil(microtime(true)*1000);

$body = array('device_token' => $deviceToken,'timestamp' => $ttt,'transaction_id' => $transId);
//$body1 = json_encode($body);

$myjsonis = postReq("https://api.development.devicecheck.apple.com/v1/query_two_bits", $jwt, $body);

//print_r($myjsonis);
echo $myjsonis;


?>

結果は "{"bit0":true,"bit1":false,"last_update_time":"2017-06"}" であると予想していましたが、応答コード 200 で "欠落しているか正しくフォーマットされていないデバイス トークン ペイロード" というエラーが表示されました。

4

0 に答える 0