如何使用Authy和PHP通过短信发送用户令牌?

时间:2015-10-31 00:30:45

标签: php twilio twilio-php two-factor-authentication authy

我正在尝试在PHP中运行Authy的演示。我已经使用Composer安装了Authy库,所以现在我可以使用这样的硬编码值注册用户:

$authy_api = new Authy\AuthyApi('<TESTING API KEY>', 'http://sandbox-api.authy.com'); // actual key omitted -- using the key generated for testing, not the one for production

$user = $authy_api->registerUser('something@something.com', '999-999-9999', 30); // actual credentials omitted

if($user->ok()){
    echo "Success!";
    $id = $user->id();
    echo($id);  
}

当上面的脚本运行时,确实会生成一个5位数的用户ID,所以一切似乎进展顺利,但短信从未发送到我的手机。

一个可能的问题可能是我的号码已经注册为应用电话(与管理员帐户相关联),因此(根据文档)每个电话号码必须唯一地标识用户,可能我的已经注册了这个app因此无需发送新令牌。如果是这种情况,用户对象的id可能是先前注册的id。

但问题仍然存在于其他电话号码中。所以现在我迷路了。

3 个答案:

答案 0 :(得分:1)

事实证明,代码本身没有任何问题。

只是沙盒API实际上并没有发送短信。它仅模拟用于测试目的的过程,因此认证流程与生产API相同。

当我切换到生产API网址和密钥时,我能够在手机上收到短信。

答案 1 :(得分:0)

的Guybrush

有两件事导致你缺少短信。

  1. 您的代码示例仅适用于用户注册。然后,您需要调用第二个API来发送SMS。
  2. https://docs.authy.com/totp.html#requesting-sms-codes

    1. 但是,上述API调用可能不会导致SMS。您确实是正确的,因为您使用的单元格编号与您的Authy应用程序相关联,默认情况下不会导致短信。这里的想法是,由于Authy客户必须在Authy交易之上支付短信,因此使用移动应用的用户不需要短信。
    2. 但是可以覆盖此行为。

      所以你的最终代码是;

      $authy_api = new Authy\AuthyApi('<TESTING API KEY>', 'http://sandbox-api.authy.com'); // actual key omitted -- using the key generated for testing, not the one for production
      
      $user = $authy_api->registerUser('something@something.com', '999-999-9999', 30); // actual credentials omitted
      
      if($user->ok()){  
          echo "Success!";
          $id = $user->id();
          echo($id);  
      
          // Now send SMS, force sending a message even if the user has the Authy mobile app installed
         $sms = $authy_api->requestSms('authy-id', array("force" => "true"));    }
      

      西蒙

答案 2 :(得分:0)

 $authy_api = new AuthyApi(AUTHY_API_KEY, "https://api.authy.com");
 $user = $authy_api->registerUser($email, $phone_number, $country_code);   //// Register User
 if($user->ok()) {
     $sms = $authy_api->requestSms($user->id()); //// Send SMS
     return $sms->ok();
}