{"id":13601068,"url":"https://github.com/xluohome/smscode","last_synced_at":"2025-04-12T22:36:46.293Z","repository":{"id":144202263,"uuid":"79040839","full_name":"xluohome/smscode","owner":"xluohome","description":"专为需要【手机短信验证码】使用场景而设计的微服务(Micro service)，如：用户注册、找回密码、用户身份验证、验证码登录等等。支持阿里大于(短信)、云通信、互亿无线 ","archived":false,"fork":false,"pushed_at":"2025-01-28T17:32:56.000Z","size":955,"stargazers_count":206,"open_issues_count":1,"forks_count":62,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-04-04T02:08:06.652Z","etag":null,"topics":["docker-smscode","microservice","smscode"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xluohome.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-15T15:24:44.000Z","updated_at":"2025-02-24T07:37:03.000Z","dependencies_parsed_at":"2025-02-24T06:00:31.703Z","dependency_job_id":"1f90f702-dd93-4a9a-ad95-4611fcb659c3","html_url":"https://github.com/xluohome/smscode","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xluohome%2Fsmscode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xluohome%2Fsmscode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xluohome%2Fsmscode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xluohome%2Fsmscode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xluohome","download_url":"https://codeload.github.com/xluohome/smscode/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248642965,"owners_count":21138352,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker-smscode","microservice","smscode"],"created_at":"2024-08-01T18:00:54.675Z","updated_at":"2025-04-12T22:36:46.272Z","avatar_url":"https://github.com/xluohome.png","language":"Go","readme":"SmsCode\n=======\n\n### 这是什么\n\n  专为需要【手机短信验证码】使用场景而设计的微服务(Micro service)，如：用户注册、找回密码、用户身份验证、验证码登录等等。\n\n### 为什么要造这个轮子\n\n首先我没有找到已实现这些基本功能合一的轮子，至少开源的没有。而实际上我们很多项目开发时经常需要用到手机验证码功能。然而每次重复造轮子又觉得太繁琐且不容易集中控制。于是有了开发一个可复用轮子的想法。那么合计不到1500行Go代码实现这个可复用的手机验证码微服务何乐不为呢？\n\n### go modules\n\n在 smscode 目录下执行以下命令：\n```bash\ngo mod tidy\n```\n\n### 安装使用\n\n得益于Go语言的跨平台支持，SmsCode可安装在所有主流OS上（Linux，Mac OS X，FreeBSD，Windows，ARM等）\n\n推荐Linux x64上安装SmsCode，编译安装请确保已经在OS上安装了Go的编译环境(GO 1.5+)。\n\n    go get -u github.com/xluohome/smscode\n\n\tcd  $GOPATH/src/github.com/xluohome/smscode\n\n\t./build  \u0026\u0026 ./smscode\n\t\n### 运行参数设置\n\n请参考 ./smscode.exe -help  \n\n### Docker部署\n\n请参考项目中的Dockerfile 制作Docker image。\n\n### 时区设置\n\n请修改 conf.yaml 中的 timezone 参数。\n\ntimezone 具体值请查考 conf/zoneinfo.zip\n\n### 功能特性\n\n1. 支持阿里大鱼、云通讯等多个“手机短信验证码”(以下简称：验证码)通道;\n2. 自定义多个验证码服务接口，如：新用户注册，重设密码，身份验证等等;\n3. 内置手机号归属地限制，限制指定归属地手机号可接收验证码;\n4. 每个验证码服务可设置“验证码”每日最大发送数量限额及有效时间;\n5. 内置callback服务，可设置验证码发送成功（失败）、验证码验证成功时的回调http Url;\n6. 可设置验证码发送模式:\n - 0x01：只有手机号对应的uid存在时才能发送。\n - 0x02：只有uid不存在时才能发送。\n - 0x03：不管uid是否存在都发送。\n7. 通过setuid接口可将现有系统中的用户UID数据导入SmsCode;\n8. 内置本地持久化存储：Goleveldb;\n9. 支持Docker部署，SmsCode静态编译(Go 1.7.5)Docker image不到12mb(含归属地数据库);\n\n### 配置文件 conf/conf.yaml\n\n```\nbind: 0.0.0.0:8080  #短信验证码微服务器地址\ntimezone: PRC   #时区设置\ntimeout: 5 #短信供应商网关响应超时时间（秒）\nvendors:\n  alidayu: #阿里大鱼配置 http://www.alidayu.com\n    appkey: 20315570\n    appSecret: 87hfgfg75775765787878\n    issendbox: false\n  yuntongxun: #云通讯配置  http://www.yuntongxun.com/\n    AccountSid: 8a48b55e434514c9c31921a039b\n    AccountToken: 61434dc2b245435eadf82d381fa3f\n    AppId: aaf98f8fsdafd2678c9d07875040f\n    SoftVersion: 2013-12-26\n    RestURL: https://app.cloopen.com:8883\n  hywx: #互亿无线  http://www.ihuyi.cn/\n    account: 6666666666666666\n    password: 88888888888888888888888\n    RestURL: http://106.ihuyi.cn/webservice/sms.php?method=Submit\n\nerrormsg:\n  \"err_model_not_ok1\": \"当前用户(%s)不存在，不能发送手机验证码\"\n  \"err_model_not_ok2\": \"当前用户(%s)存在，不能发送手机验证码\"\n  \"err_code_not_ok\": \"手机验证码:%s 不正确，请重新输入\"\n  \"err_vailtime_not_ok\": \"手机验证码已超时:%s，请重新获取\"\n  \"err_per_day_max_send_nums\": \"一个手机号每天仅限发送%d条验证码\"\n  \"err_per_minute_send_num\": \"一个手机号每分钟仅限发送1条验证码\"\n  \"err_allow_areacode\": \"手机号归属地不允许，仅限于:%s\"\n  \"err_not_uid\": \"手机号%s对应的%s不存在或者不匹配\"\n\nservicelist:\n  \"register\":\n    vendor: alidayu  #短信通道供应商\n    group: db1   #相同组内的uid数据共享\n    smstpl: SMS_34850248  #阿里大鱼短信模板id\n    signname: 罗永 #阿里大鱼短信签名\n    callback: \"http://127.0.01/test9.php\"\n    allowcitys: #仅限如下的手机号归属区接收验证码\n      - 0575\n      - 0571\n      - 0574\n    maxsendnums: 4   #一个手机号每天发送限额,这个受短信运营商的限制。\n    validtime: 600  #单位：秒 。 收到的手机验证码x秒内有效，超过后验证无效；\n    mode: 2   #模式  1：只有手机号对应的uid存在时才能发送，2：只有uid不存在时才能发送，3：不管uid是否存在都发送\n    outformat: mobcent  #RestAPi接口输出样式（mobcent,default）\n\n  \"restpwd\":\n    vendor: alidayu\n    group: db1\n    smstpl: SMS_39190087\n    signname: 罗永\n    callback:\n    allowcitys:\n      - 0578\n    maxsendnums: 2\n    validtime: 360\n    mode: 3\n\n  \"getpwd\":\n    vendor: yuntongxun\n    group: db1\n    smstpl: 149350\n    signname: 罗永亿\n    callback:\n    allowcitys:\n      - 0578\n      - 0575\n    maxsendnums: 2\n    validtime: 360\n    mode: 3\n```\n### SmsCode RestAPi 接口说明\n\n\n| 接口名称        | 接口地址           | 参数  | 说明 |\n  :------------- |:-------------| :-----|:----|\n|发送验证码 |/send\t| service, mobile   |服务名称,手机号|\n|验证验证码\t|/checkcode\t|service, mobile,code   |服务名称,手机号,验证码\n|设置用户UID |/setuid | service, mobile,uid |服务名称,手机号 ,用户id\n|删除用户UID\t|/deluid |service, mobile,uid |服务名称,手机号,用户id\n|信息查询|/info |service, mobile  |服务名称,手机号\n\n### SmsCode RestAPi 接口返回说明\n具体依据返回内容的结构体。\n以下是 mobcent结构体json内容\n\n#### 执行成功：\n```\n{\n  \"rs\": 1,\n  \"errcode\": \"\",\n  \"body\": {},\n  \"head\": {\n    \"errCode\": \"000000\",\n    \"errInfo\": \"smscode调用成功,没有任何错\",\n    \"version\": \"2.7.0.3\",\n    \"alert\": 0\n  }\n}\n```\n#### 执行失败：\n```\n{\n  \"rs\": 0,\n  \"errcode\": \"[mobile]参数不对\",\n  \"body\": {},\n  \"head\": {\n    \"errCode\": \"900000\",\n    \"errInfo\": \"[mobile]参数不对\",\n    \"version\": \"2.7.0.3\",\n    \"alert\": 0\n  }\n}\n```\n#### 信息查询返回：\n```\n{\n  \"rs\": 1,\n  \"errcode\": \"\",\n  \"body\": {\n    \"info\": {\n      \"areacode\": \"0575\",\n      \"extinfo\": {\n        \"PhoneNum\": \"15336860197\",\n        \"Province\": \"浙江\",\n        \"City\": \"绍兴\",\n        \"ZipCode\": \"312000\",\n        \"AreaZone\": \"0575\",\n        \"CardType\": \"电信\"\n      },\n      \"lastsendtime\": 0,\n      \"mobile\": \"15336860197\",\n      \"sendnums\": 0,\n      \"service\": \"register\",\n      \"smscode\": \"\",\n      \"smscodeinvalidtime\": 0,\n      \"uid\": \"\"\n    }\n  },\n  \"head\": {\n    \"errCode\": \"000000\",\n    \"errInfo\": \"smscode调用成功,没有任何错\",\n    \"version\": \"2.7.0.3\",\n    \"alert\": 0\n  }\n}\n```\n\n### Callback 服务\n\n每个短信验证码服务允许设置一个callback http Url ；\n如下事件发生时将回调callback http Url\n\n1. 手机验证码发送成功或者失败时。\n2. 手机验证码通过验证时。\n\n当 callback http Url无法访问时，系统会延时2,4,6,8,16,32,64,128秒 依次进行重试（合计10次）。\n\n成功时附带如下Url POST请求参数(multipart/form-data)：\n```\n\nmobile string  #手机号\ncode string\t#验证码\nservice string #服务名称\nuxtime int #时间戳\nflag  string #回调标记 (Success,Failed,Checkok)\n````\n\n### 联系作者\n\n加作者微信\n\n![wx.jpg](https://ucc.alicdn.com/pic/developer-ecology/f41fd688affb41fc8853c4f99abd3d45.jpg)\n","funding_links":[],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxluohome%2Fsmscode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxluohome%2Fsmscode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxluohome%2Fsmscode/lists"}