Skip to content

专为需要【手机短信验证码】使用场景而设计的微服务(Micro service),如:用户注册、找回密码、用户身份验证、验证码登录等等。支持阿里大于(短信)、云通信、互亿无线

License

Notifications You must be signed in to change notification settings

xluohome/smscode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
xluo
May 31, 2021
19b1fd0 · May 31, 2021

History

20 Commits
Mar 26, 2017
May 31, 2021
Mar 26, 2017
Jan 15, 2017
May 31, 2021
Sep 13, 2017
Apr 22, 2017
Jan 16, 2017
Feb 23, 2017
Feb 18, 2017
Mar 26, 2017
Mar 26, 2017
May 27, 2017
May 27, 2017
May 27, 2017
May 27, 2017
Feb 6, 2017
May 27, 2017
Mar 26, 2017
Jan 16, 2017
May 31, 2021
May 31, 2021
Jan 16, 2017
Apr 22, 2017
Mar 26, 2017
Feb 18, 2017
Feb 14, 2017
May 27, 2017
Feb 18, 2017

Repository files navigation

SmsCode

这是什么

专为需要【手机短信验证码】使用场景而设计的微服务(Micro service),如:用户注册、找回密码、用户身份验证、验证码登录等等。

为什么要造这个轮子

首先我没有找到已实现这些基本功能合一的轮子,至少开源的没有。而实际上我们很多项目开发时经常需要用到手机验证码功能。然而每次重复造轮子又觉得太繁琐且不容易集中控制。于是有了开发一个可复用轮子的想法。那么合计不到1500行Go代码实现这个可复用的手机验证码微服务何乐不为呢?

go modules

在 smscode 目录下执行以下命令:

go mod tidy

安装使用

得益于Go语言的跨平台支持,SmsCode可安装在所有主流OS上(Linux,Mac OS X,FreeBSD,Windows,ARM等)

推荐Linux x64上安装SmsCode,编译安装请确保已经在OS上安装了Go的编译环境(GO 1.5+)。

go get -u github.com/xluohome/smscode

cd  $GOPATH/src/github.com/xluohome/smscode

./build  && ./smscode

运行参数设置

请参考 ./smscode.exe -help

Docker部署

请参考项目中的Dockerfile 制作Docker image。

时区设置

请修改 conf.yaml 中的 timezone 参数。

timezone 具体值请查考 conf/zoneinfo.zip

功能特性

  1. 支持阿里大鱼、云通讯等多个“手机短信验证码”(以下简称:验证码)通道;
  2. 自定义多个验证码服务接口,如:新用户注册,重设密码,身份验证等等;
  3. 内置手机号归属地限制,限制指定归属地手机号可接收验证码;
  4. 每个验证码服务可设置“验证码”每日最大发送数量限额及有效时间;
  5. 内置callback服务,可设置验证码发送成功(失败)、验证码验证成功时的回调http Url;
  6. 可设置验证码发送模式:
  • 0x01:只有手机号对应的uid存在时才能发送。
  • 0x02:只有uid不存在时才能发送。
  • 0x03:不管uid是否存在都发送。
  1. 通过setuid接口可将现有系统中的用户UID数据导入SmsCode;
  2. 内置本地持久化存储:Goleveldb;
  3. 支持Docker部署,SmsCode静态编译(Go 1.7.5)Docker image不到12mb(含归属地数据库);

配置文件 conf/conf.yaml

bind: 0.0.0.0:8080  #短信验证码微服务器地址
timezone: PRC   #时区设置
timeout: 5 #短信供应商网关响应超时时间(秒)
vendors:
  alidayu: #阿里大鱼配置 http://www.alidayu.com
    appkey: 20315570
    appSecret: 87hfgfg75775765787878
    issendbox: false
  yuntongxun: #云通讯配置  http://www.yuntongxun.com/
    AccountSid: 8a48b55e434514c9c31921a039b
    AccountToken: 61434dc2b245435eadf82d381fa3f
    AppId: aaf98f8fsdafd2678c9d07875040f
    SoftVersion: 2013-12-26
    RestURL: https://app.cloopen.com:8883
  hywx: #互亿无线  http://www.ihuyi.cn/
    account: 6666666666666666
    password: 88888888888888888888888
    RestURL: http://106.ihuyi.cn/webservice/sms.php?method=Submit

errormsg:
  "err_model_not_ok1": "当前用户(%s)不存在,不能发送手机验证码"
  "err_model_not_ok2": "当前用户(%s)存在,不能发送手机验证码"
  "err_code_not_ok": "手机验证码:%s 不正确,请重新输入"
  "err_vailtime_not_ok": "手机验证码已超时:%s,请重新获取"
  "err_per_day_max_send_nums": "一个手机号每天仅限发送%d条验证码"
  "err_per_minute_send_num": "一个手机号每分钟仅限发送1条验证码"
  "err_allow_areacode": "手机号归属地不允许,仅限于:%s"
  "err_not_uid": "手机号%s对应的%s不存在或者不匹配"

servicelist:
  "register":
    vendor: alidayu  #短信通道供应商
    group: db1   #相同组内的uid数据共享
    smstpl: SMS_34850248  #阿里大鱼短信模板id
    signname: 罗永 #阿里大鱼短信签名
    callback: "http://127.0.01/test9.php"
    allowcitys: #仅限如下的手机号归属区接收验证码
      - 0575
      - 0571
      - 0574
    maxsendnums: 4   #一个手机号每天发送限额,这个受短信运营商的限制。
    validtime: 600  #单位:秒 。 收到的手机验证码x秒内有效,超过后验证无效;
    mode: 2   #模式  1:只有手机号对应的uid存在时才能发送,2:只有uid不存在时才能发送,3:不管uid是否存在都发送
    outformat: mobcent  #RestAPi接口输出样式(mobcent,default)

  "restpwd":
    vendor: alidayu
    group: db1
    smstpl: SMS_39190087
    signname: 罗永
    callback:
    allowcitys:
      - 0578
    maxsendnums: 2
    validtime: 360
    mode: 3

  "getpwd":
    vendor: yuntongxun
    group: db1
    smstpl: 149350
    signname: 罗永亿
    callback:
    allowcitys:
      - 0578
      - 0575
    maxsendnums: 2
    validtime: 360
    mode: 3

SmsCode RestAPi 接口说明

接口名称 接口地址 参数 说明
发送验证码 /send service, mobile 服务名称,手机号
验证验证码 /checkcode service, mobile,code 服务名称,手机号,验证码
设置用户UID /setuid service, mobile,uid 服务名称,手机号 ,用户id
删除用户UID /deluid service, mobile,uid 服务名称,手机号,用户id
信息查询 /info service, mobile 服务名称,手机号

SmsCode RestAPi 接口返回说明

具体依据返回内容的结构体。 以下是 mobcent结构体json内容

执行成功:

{
  "rs": 1,
  "errcode": "",
  "body": {},
  "head": {
    "errCode": "000000",
    "errInfo": "smscode调用成功,没有任何错",
    "version": "2.7.0.3",
    "alert": 0
  }
}

执行失败:

{
  "rs": 0,
  "errcode": "[mobile]参数不对",
  "body": {},
  "head": {
    "errCode": "900000",
    "errInfo": "[mobile]参数不对",
    "version": "2.7.0.3",
    "alert": 0
  }
}

信息查询返回:

{
  "rs": 1,
  "errcode": "",
  "body": {
    "info": {
      "areacode": "0575",
      "extinfo": {
        "PhoneNum": "15336860197",
        "Province": "浙江",
        "City": "绍兴",
        "ZipCode": "312000",
        "AreaZone": "0575",
        "CardType": "电信"
      },
      "lastsendtime": 0,
      "mobile": "15336860197",
      "sendnums": 0,
      "service": "register",
      "smscode": "",
      "smscodeinvalidtime": 0,
      "uid": ""
    }
  },
  "head": {
    "errCode": "000000",
    "errInfo": "smscode调用成功,没有任何错",
    "version": "2.7.0.3",
    "alert": 0
  }
}

Callback 服务

每个短信验证码服务允许设置一个callback http Url ; 如下事件发生时将回调callback http Url

  1. 手机验证码发送成功或者失败时。
  2. 手机验证码通过验证时。

当 callback http Url无法访问时,系统会延时2,4,6,8,16,32,64,128秒 依次进行重试(合计10次)。

成功时附带如下Url POST请求参数(multipart/form-data):


mobile string  #手机号
code string	#验证码
service string #服务名称
uxtime int #时间戳
flag  string #回调标记 (Success,Failed,Checkok)

联系作者

加作者微信

wx.jpg

About

专为需要【手机短信验证码】使用场景而设计的微服务(Micro service),如:用户注册、找回密码、用户身份验证、验证码登录等等。支持阿里大于(短信)、云通信、互亿无线

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages