Почему я получаю ответ «Неверная подпись» от Twilio при попытке создать веб-крючок? - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь создать веб-крючок в Twilio.Независимо от того, что я пытаюсь, я получаю ответ {"message":"Invalid signature.","success":false,"error_code":"60000"}

Я пытался использовать как GuzzleHTTP, так и PHP CURL, чтобы попытаться увидеть, получаю ли я другой ответ.

Однако яЯ загрузил версию Node (https://github.com/AuthySE/webhooks-api) для тестирования, и я могу успешно создать веб-крючок с помощью приложения Node.

Я использую те же ключи в приложении Node, что и в PHPapp.

Вот как выглядит мой запрос:

public function createWebhook()
{
    $api_signing_key = '<API_SIGNING_KEY>';
    $post_url = 'https://api.authy.com/dashboard/json/application/webhooks';
    $http_method = 'POST';
    $nonce = $this->randomNumber(10) . '.' . $this->randomNumber(10);
    $data = $nonce . '|' . $http_method . '|' . $post_url . '|';
    $sig = hash_hmac('sha256', $data, $api_signing_key);
    $encoded = base64_encode($sig);

    $client = new Client(['headers' => [
        'X-Authy-Signature' => $encoded,
        'X-Authy-Signature-Nonce' => $nonce
    ]]);

    try {
        $response = json_decode($client->post($post_url,
            [
            'debug' => true,
            'form_params' => [
                'app_api_key' => '<APP_API_KEY>',
                'access_key' => '<ACCESS_KEY>',
                'name' => 'New Webhook',
                'events' => [
                    'one_touch_request_responded'
                ]
            ],
        ])->getBody(), true);
    } catch (RequestException $e) {
        $response = $e->getMessage();
    }

    return $response;

}

// Only for reference to show how I am generating a 
// random number for nonce
protected function randomNumber($length) {
    $result = '';

    for($i = 0; $i < $length; $i++) {
        $result .= mt_rand(0, 9);
    }

    return $result;
}

...