为什么在尝试创建Webhook时从Twilio收到无效的签名响应?

时间:2019-03-26 16:59:10

标签: php laravel twilio webhooks guzzle

我正在尝试在Twilio中创建一个Webhook。无论我尝试什么,最终都会得到响应{"message":"Invalid signature.","success":false,"error_code":"60000"}

我尝试同时使用GuzzleHTTP和PHP CURL来尝试查看是否得到不同的响应。

但是,我确实下载了Node版本(https://github.com/AuthySE/webhooks-api)进行测试,并且能够使用Node应用成功创建Webhook。

我在Node应用程序中使用的键与在PHP应用程序中使用的键相同。

这是我目前的要求:

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;
}

0 个答案:

没有答案