我正在构建一个用户可以创建帐户的Web应用程序。当用户创建他的帐户时,他提供他的电话号码,并且应用程序需要通过发送短信验证码来验证该号码。我使用以下代码发送短信。
<?php
if ( isset( $_REQUEST ) && !empty( $_REQUEST ) ) {
if (
isset( $_REQUEST['phoneNumber'], $_REQUEST['carrier'],
$_REQUEST['smsMessage'] ) &&
!empty( $_REQUEST['phoneNumber'] ) &&
!empty( $_REQUEST['carrier'] )
) {
$message = wordwrap( $_REQUEST['smsMessage'], 70 );
$to = $_REQUEST['phoneNumber'] . '@' . $_REQUEST['carrier'];
$result = @mail( $to, '', $message );
print 'Message was sent to ' . $to;
} else {
print 'Not all information was submitted.';
}
}
?>
代码的问题在于用户需要提供他的网络运营商。并且为了防止用户无法创建帐户的情况,他可能不知道他的运营商电子邮件到短信地址,我决定从提供的电话号码和/或国家确定运营商地址。
我无法弄清楚如何根据用户的电话号码确定运营商。任何人都可以帮我搞清楚吗?
我知道这是可能的,因为Facebook正在做类似的事情。请提出别的建议,而不是告诉我这是不可能的......
如何根据用户的电话号码确定运营商
你不能真的。您可以通过电话前缀尝试,但在某些国家/地区,人们可以将其号码迁移到不同的运营商,这基本上意味着您最终无法知道它到底是什么运营商。
在我看来,你有两个可能的解决方案。
1)将电子邮件发送到每个运营商的短信网关。如果他们不拥有这个号码,他们会回复这样的话:
Error: Invalid user address
Error message below:
550 - Requested action not taken: no such user here
保存有效的网关,如果它停止工作则重复该过程。 (他们改变了提供者)
2)使用SMS提供程序(如Twilio)或订阅服务以查找网关。