0
回答
零云lingyun.net技术分享之Nexmo短信插件开发及使用
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

很多朋友在开发国外项目时回去考虑选用哪一个短信平台,我们一般采用Nexmo,主要考虑的是他体量大,覆盖的国家地区广泛,当然,如果只针对某个单个国家,也可以直接采用该国电信运营商,比如如果是澳大利亚,可以采用澳洲电讯。
欢迎交流:互联网产品快速开发解决方案“零云”

Nexmo短信开发

1.注册账号,申请appKEY和appSecret,并给nexmo账户充钱。

2.去零云后台配置,把上面拿到的key和secret分别填进去,其他不用填。

3.发送短信,nexmo提供了很多种API,我们的nexmo短信插件选择了部分功能并进行封装做成插件的形式,能够在lingyun的项目中直接调用。

  • 文本短信发送:

      //插件调用
      public function notify_result($sms_data)
      {
          $nexmo_addon = D('Addons://Nexmo/Nexmo');
          $result      = $nexmo_addon->send_sms($sms_data);
          if ($result) {
              return true;
          } else {
              return false;
          }
      }
    /*上面方法中$sms_data的形式
     *RecNum:接收短信的号码,需要加区号,如中国号码:8612345678910;
     *product:短信发送方希望显示在短信中的名称;
     *Content:短信的内容
     */
    $sms_data['RecNum']  = $mobile;
    $sms_data['product'] = 'Company Name';
    $sms_data['Content'] = 'text';
    D('Writer/Index')->notify_result($sms_data);
  • 验证码发送

      /**
       * 短信验证码
       */
      public function send_mobile_verify()
      {
          // Nexmo最小是60s
          if ((time() - session('reg_verify_ctime')) < 60) {
              $this->error('Resend 60s later');
          }
    
          // 构造短信数据
          $sms_data['RecNum']  = I('post.mobile');
          $sms_data['prodect'] = I('post.title') ? I('post.title') : C('WEB_SITE_TITLE');
          $nexmo_addon = D('Addons://Nexmo/Nexmo');
          $result      = $nexmo_addon->send_verify($sms_data);
          if ($result) {
              session('reg_verify_ctime', time());
              $this->success('Send successfully!');
          } else {
              $this->error('Send failly!');
          }
      }

    值得说明的一点,nexmo不同于之前常用的短信插件,nexmo的验证码是它的接口自己生成,而不是存放于自己的服务器,所以,用户输入并提交验证码之后,需要再次提交到nexmo的接口去验证用户输入的是否正确。

      // 在处理用户表单提交的控制器添加对验证码的验证
      $verify        = I('post.verify');
      $nexmo_addon   = D('Addons://Nexmo/Nexmo');
      $verify_result = $nexmo_addon->check_verify($verify);
      if(!$verify_result) {
          $this->error('There is something wrong with your verify,please check it out or send again!');
      }
举报
CoreThink
发帖于8个月前 0回/149阅
顶部