• 基于GoLang实现API短信网关


    短信网关总体设计

    在消息系统中,短信网关和短信渠道的对接是最核心的功能。其中短信网关是对外提供服务的接口,所有需要发送短信的操作都需要通过短信网关分发到对应的渠道上。一旦定型,后续就很少,也很难调整。而短信渠道是接收网关的请求,调用渠道接口执行真正的发送短信操作。每个渠道的接口,传输方式都不尽相同,所以在这里,短信网关相对短信渠道模块的作用,类似设计模式模式中的wrapper,封装各个渠道的差异,对网关呈现统一的接口。而网关的功能就是为业务提供通用接口,一些和渠道交互的公共操作,也会放置到网关中。

    一、功能概述

    消息系统对其他系统提供的服务包括渠道商管理、签名管理、短信模版管理、应用管理、业务类型管理、短信记录管理等。

    • 渠道商管理:短息网关维护多个渠道商,配置渠道商的身份ID、身份key等其他信息,支持的渠道商:腾讯云、阿里云等
    • 签名管理:配置渠道商下不同的短信签名,为后续发送短信提供数据基础。
    • 短信模版管理:配置不同短信模版信息,可在也业务配置中选择不同的模版信息,注:不同渠道模版略有不同,详情参见说明文档。
    • 应用管理:配置短信网关对接的应用信息,可在应用管理中配置应用可用短信条数、每分钟限制短信条数等信息,通过应用可用条数控制不同应用使用短信数量。
    • 业务管理:配置发送短信业务场景,如注册业务、登录业务、下单通知、支付成功通知等不同的业务信息。添加业务信息后,生成业务编号,业务系统根据业务编号发送短信模版。

    二、整体架构

    smsGolang

    三、管理平台

    杰子学编程-渠道商配置

    杰子学编程-添加渠道商

    杰子学编程-短信签名模版

    杰子学编程-添加短信签名

    杰子学编程-模版列表

    杰子学编程-添加短信模版

    杰子学编程-应用管理

    杰子学编程-添加应用

    杰子学编程-业务模版配置

    杰子学编程-添加业务模版

    杰子学编程-发送记录

    杰子学编程-发送短信测试页面

    四、服务API

    请求地址:/api/v1/send-message

    请求方式:POST

    请求参数:

    字段名称字段说明字段类型是否必填备注
    businessNo业务编号String
    phones手机号集合List多个手机号","分割
    params模版填充参数List多个参数","分割

    请求参数示例:

    1. {
    2.     "businessNo": "B-000003",
    3.     "phones": [
    4.         "+86182XXXXXX68"
    5.     ],
    6.     "params": ["123456"]
    7. }

    响应参数:

    字段名称字段说明字段类型是否必填备注
    requestIdrequestIdString
    code状态码Int
    msg渠道返回消息String
    data响应数据Int

    响应参数示例:

    1. {
    2.   "requestId""b9c0fd5e-3a43-4039-a224-2a5ae99385e1",
    3.   "code"200,
    4.   "msg""{\"sms_send_status\":[{\"fee\":1,\"message\":\"OK\",\"code\":\"OK\",\"phone\":\"+8618232533068\"}],\"request_id\":\"771D1C9C-74AD-582E-B5EB-5FB12C038497\"}",
    5.   "data"200
    6. }

    无、数据库设计

    5.1 短信渠道配置表

    配置不同渠道商信息,如腾讯云、阿里云、七牛云等

    sms_service_provider_config (服务商配置表)

    字段名称字段说明字段类型是否必填备注
    channel_no渠道商编程StringTencent、AliYun
    provider_name服务商名称String阿里云、腾讯云
    provider_no服务商编号StringAly、txy
    access_key_id身份标识String腾讯:SecretId
    access_key_secret身份认证密钥String腾讯:SecretKey
    endpoint调用域名String
    sdk_app_id应用IDString腾讯云必填
    region地域列表String腾讯云必填:ap-beijing、ap-guangzhou、ap-nanjing
    remark备注String
    ext_json扩展字段String
    status状态Bool1启用 0 禁用

    5.2 短信签名配置表

    sms_sign_config(短信签名配置表)

    字段编号字段说明字段类型是否必填备注
    sign_name签名名称String
    provider_no服务商编号StringAly、txy
    provider_name服务商名称String
    remark备注String
    ext_json扩展字段String
    status状态Bool1启用 0 禁用

    5.3 短信模版配置表

    sms_template_config(短信模版配置表)

    字段编号字段说明字段类型是否必填备注
    sign_name签名名称String
    provider_no服务商编号StringAly、txy
    template_no模版编号String
    template_content模版内容String
    third_party_template_no第三方模版编号String
    remark备注String
    ext_json扩展字段String
    status状态Bool1启用 0 禁用

    3.4 应用配置表

    sms_app_config (应用管理配置表)

    字段编号字段说明字段类型是否必填备注
    app_no应用IDString
    app_name应用名称StringAly、txy
    available_number可用数量Int可用短信包
    current_limiting限流数量Int每分钟允许发送短信数量
    use_number已用数量Int
    remark备注String
    ext_json扩展字段String
    status状态Bool1启用 0 禁用

    5.5 业务配置表

    sms_business_config(业务配置表)

    字段编号字段说明字段类型是否必填备注
    app_no应用IDString
    business_name业务名称StringAly、txy
    business_no业务编号String
    template_no模版编号String
    business_desc业务说明String
    remark备注String
    ext_json扩展字段String
    status状态Bool1启用 0 禁用

    5.6 发送日志表

    sms_send_log(发送记录表)

    字段编号字段说明字段类型是否必填备注
    app_no应用IDString
    business_no业务编号String
    status状态Int
    fee计价条数Int
    phone_number发送手机号String
    message接口响应消息String
    code接口响应状态码String
    content发送内容String
    remark备注String
    ext_json扩展字段String

    六、技术栈

    go-admin

    杰子学编程 (julywhj.cn)

    Mysql、Redis、

    七、源码

    关注公众号:杰子学编程,回复: "短信网关" 获取。

  • 相关阅读:
    WPF页面向后端传参
    面经 - 高频难
    【缓存】Spring全家桶中@CacheEvict无效情况共有以下几种
    Introducing Meta Llama 3: The most capable openly available LLM to date
    Vue30 自定义指令 函数式 对象式
    【进化计算】遗传算法求解gr48数据集
    String类及相应的字符串操作方法
    Rust结构体的定义和实例化
    winform中更新UI控件的方案介绍
    解决Windows出现找不到mfcm90u.dll无法打开软件程序的方法
  • 原文地址:https://blog.csdn.net/July_whj/article/details/125898810