我正在尝试在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;
}