smsutil

package
v1.1.7-20200423111736 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2020 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// 参数类错误-30开头
	// 账号格式不合法
	ERROR_300001 = -300001

	// 密码格式不合法
	ERROR_300002 = -300002

	// IP和端口信息不合法
	ERROR_300003 = -300003

	// IP不合法
	ERROR_300004 = -300004

	// 端口不合法
	ERROR_300005 = -300005

	// 手机号码格式不合法
	ERROR_300006 = -300006

	// 短信内容长度不合法
	ERROR_300007 = -300007

	// 扩展子号不合法
	ERROR_300008 = -300008

	// 流水号不合法
	ERROR_300009 = -300009

	// 密码加密失败
	ERROR_300010 = -300010

	// 业务类型不合法
	ERROR_300011 = -300011

	// exdata不合法
	ERROR_300012 = -300012

	// 发送优先级不合法
	ERROR_300013 = -300013

	// 个性化群发发送条数不在0到100之间
	ERROR_300014 = -300014

	// Message对象为空
	ERROR_300015 = -300015

	// msgId参数为空或者msgId长度不为0
	ERROR_300016 = -300016

	// 账号或者密码错误
	ERROR_300017 = -300017

	// 发送类型错误
	ERROR_300018 = -300018

	// 上行mos为空或者mos集合大于0
	ERROR_300019 = -300019

	// 状态报告rpts为空或者rpts集合大于0
	ERROR_300020 = -300020

	// 请求路径为空
	ERROR_300021 = -300021

	// 是否需要日志设置不合法
	ERROR_300023 = -300023

	//手机号码超过最大支持数量(1000)
	ERROR_300024 = -300024

	//短信内容编码失败
	ERROR_300025 = -300025

	// 业务类错误-31开头
	// 单条发送失败
	ERROR_310001 = -310001

	// 相同内容发送失败
	ERROR_310002 = -310002

	// 个性发送失败
	ERROR_310003 = -310003

	// 获取余额失败
	ERROR_310006 = -310006

	// 获取上行失败
	ERROR_310004 = -310004

	// 获取状态报告失败
	ERROR_310005 = -310005

	// 设置账号信息失败
	ERROR_310007 = -310007

	// 账号不存在或者账号不可用
	ERROR_310008 = -310008

	// 无可用的账号
	ERROR_310009 = -310009

	// 设置账号检查线程启动失败
	ERROR_310010 = -310010

	// 设置账号检查线程停止失败
	ERROR_310011 = -310011

	// 设置全局参数失败
	ERROR_310012 = -310012

	//移除账号失败
	ERROR_310013 = -310013

	//该账号在账号列表不存在,无需移除
	ERROR_310014 = -310014

	// http请求失败
	ERROR_310099 = -310099

	// 成功编码
	SUCCESS_CODE = 0

	// 相关超时时间配置
	// 空闲超时判断
	SPARE_TIMEOUT = 25 * 1000

	// 请求超时时间(毫秒) 5秒
	HTTP_REQUEST_TIMEOUT = 5 * 1000

	// 响应超时时间(毫秒) 60秒
	HTTP_RESPONSE_TIMEOUT = 60 * 1000

	// 检测IP 请求超时时间(毫秒) 3秒
	CHECK_HTTP_REQUEST_TIMEOUT = 3 * 1000

	// 检测IP 响应超时时间(毫秒) 30秒
	CHECK_HTTP_RESPONSE_TIMEOUT = 30 * 1000

	//HTTP默认端口
	HTTP_DEFAULT_PORT = 80

	//需要日志
	STATIC_NEED_LOG = true

	////检查多次主IP打印一次日志
	LOG_COUNT = 30
)

*

  • @功能概要: 全局静态变量类
  • @项目名称: JavaEmpSmsDemo
  • @初创作者: tanglili <jack860127@126.com>
  • @公司名称: ShenZhen Montnets Technology CO.,LTD.
  • @创建时间: 2016-7-6 下午12:24:53
  • <p>
  • 修改记录1:
  • </p> *
  • <pre>
  • 修改日期:
  • 修改人:
  • 修改内容:
  • </pre>

Variables

View Source
var Logger *log.Logger

日志

Functions

func AddressToIPAndPort

func AddressToIPAndPort(addr string) (string, int)

*

  • 将域名替换成IP
  • @param doMain 域名
  • @return ip, err 如果成功返回IP, 1, 解析不成功返回 addr, 0, 格式错误 "", -1

func CheckDomain

func CheckDomain(addr string) bool

*

  • 将域名格式检查
  • @param doMain 域名
  • @return true 如果成功返回TRUE,不成功返回FALSE

func CryptPwd

func CryptPwd(userid string, pwd string, strtime string) string

func FormatContent

func FormatContent(content string) string

*

  • 将UTF8串转为GBK并进行URLENCODE
  • @return 返回URLENCODE的字符串

func FormatCurrentTime

func FormatCurrentTime() string

*

  • 格式化输出赶时间,如时间是:2017-5-11 14:22:30 输出为:0511142230
  • @return 返回时间串

func GetCustid

func GetCustid() (custid string)

*

  • 取用户自定义流水号:该条短信在您业务系统内的ID,比如订单号或者
  • 短信发送记录的流水号。填写后发送状态返回值内将包含用户自定义流
  • 水号。最大可支持64位的ASCII字符串:字母、数字、下划线、减号,如
  • 不需要则不用提交此字段或填空, 用户可以改写里面的内容。
  • @return 返回用户自定义流水号

func GetExdata

func GetExdata() (exdata string)

*

  • 自定义扩展数据:额外提供的最大64个长度的ASCII字符串:字母、数字、
  • 下划线、减号,作为自定义扩展数据,填写后,状态报告返回时将会包含
  • 这部分数据,如不需要则不用提交此字段或填空, 用户可以改写里面的内容。
  • @return 返回自定义扩展数据

func GetExno

func GetExno() string

*

  • 取扩展号:长度不能超过6位,注意通道号+扩展号的总长度不能超过20
  • 位,若超出则exno无效,如不需要扩展号则不用提交此字段或填空, 用户
  • 可以改写里面的内容。
  • @return 返回扩展号

func GetSvrtype

func GetSvrtype() string

*

  • 取业务类型:最大可支持10个长度的英文字母、数字组合的字符串, 用户
  • 可以改写里面的内容。
  • @return 返回业务类型

func HttpPostOnce

func HttpPostOnce(url string, data []byte, content_type string) (int, []byte, error)

*

  • 短连接发送http post 请求,并返回结果。
  • @param url 请求的URL, data发送的数据, content_type数据格式
  • @return http返回码, 内容,出错信息

func PkgToJson

func PkgToJson(pkg interface{}) []byte

*

  • 将数据打包在JSON格式
  • @param pkg 数据
  • @return 返回JSON格式的字符数组

func RemoveAddressElement

func RemoveAddressElement(s []string, element string) []string

*

  • 移出指定的字符串数组成员
  • @param s 字符串数组, element要移出的成员
  • @return true 返回移出后的数组

func SendAndRecvOnce

func SendAndRecvOnce(postobj PostObj) bool

func ValidateCustId

func ValidateCustId(custId string) bool

*

  • 验证流水号是否合法 *
  • @param custId
  • 流水号
  • @return true:合法;false:非法

func ValidateExData

func ValidateExData(exData string) bool

*

  • 验证exdata是否合法 *
  • @param exData
  • 自定义扩展参数
  • @return true:合法;false:非法

func ValidateIpAndPort

func ValidateIpAndPort(ipAddress string) int

*

  • @description 验证IP和端口信息是否合法
  • @param ipAddress
  • IP和端口信息 IP和端口号以:号连接
  • @return 0:合法;非0:不合法
  • @author tanglili <jack860127@126.com>
  • @datetime 2016-9-22 下午05:02:33

func ValidateMessage

func ValidateMessage(content string) bool

*

  • 验证信息内容是否合法 *
  • @param content
  • 短信内容
  • @return true:合法;false:非法

func ValidateMobile

func ValidateMobile(mobile string) bool

*

  • 验证手机单个号码是否合法
  • 手机号码可能是国际号码,暂时不验证手机号码长度 *
  • @param mobile
  • 手机号码
  • @return true:合法;false:非法

func ValidateMobiles

func ValidateMobiles(mobiles string) string

*

  • 验证是否是以英文逗号隔开的1000个手机号码
  • 手机号码可能是国际号码,暂时不验证手机号码长度 **
  • @param strMobiles
  • 手机号码
  • @return success:合法;fail:检测失败;illegalFormat:格式非法;overNum:超过最大支持号码1000个

func ValidatePwd

func ValidatePwd(pwd string) bool

*

  • 验证密码是否合法 *
  • @param pwd
  • 密码
  • @return true:合法;false:非法

func ValidateSubPort

func ValidateSubPort(strSubPort string) bool

*

  • 验证扩展子号是否合法 *
  • @param strSubPort
  • 扩展子号
  • @return true:合法;false:非法

func ValidateSvrType

func ValidateSvrType(svrType string) bool

*

  • 验证业务类型是否合法 *
  • @param svrType
  • 业务类型
  • @return true:合法;false:非法

func ValidateUserId

func ValidateUserId(userid string) bool

*

  • 验证账号是否合法 *
  • @param userid
  • 账号
  • @return true:合法;false:非法

Types

type BatchSend

type BatchSend struct {
	*UserInfo
	*SMData
}

func NewBatchSend

func NewBatchSend(userid string, pwd string, mobile string, content string) *BatchSend

func (*BatchSend) GetName

func (s *BatchSend) GetName() string

type CheckAddress

type CheckAddress struct {
	Cm *ConfigManager
}

func (*CheckAddress) GetAddressByUserID

func (c *CheckAddress) GetAddressByUserID(userid string, password string, timestamp string) string

type ConfigManager

type ConfigManager struct {
	// 请求路径
	RequestPath string

	//主IP和端口
	MasterIpAndPort string

	//主域名和端口    主域名和端口可能为空
	MasterDomainAndPort string

	// 备用IP端口信息 IP和端口号以:号连接
	IpAndPortBak []string

	//备IP和备域名的对应关系。key:备用IP和端口   value:域名和端口
	IpAndDomainBakMap map[string]string

	// 主IP状态 0正常 1异常
	MasterIPState int

	//可用IP
	AvailableIpAndPort string

	//主IP最近检测时间 1970年距今的毫秒数
	LastCheckTime int64

	//主IP异常检测时间间隔 5分钟
	CheckTimeInterval int64

	//IP是否设置
	IpIsSet bool

	//密码是否加密 默认加密
	IsEncryptPwd bool
}

*

  • 配置管理类
  • @author Administrator *

func GetConfigManager

func GetConfigManager() *ConfigManager

*

  • 取配置对象
  • @return 返回配置对象

func (*ConfigManager) AddressToIPAndPort

func (cm *ConfigManager) AddressToIPAndPort(addr string) (string, bool)

*

  • 将域名替换成IP
  • @param doMain 域名
  • @return ip, err 如果成功返回首IP,不成功返回错误信息

func (*ConfigManager) RemoveAllIpInfo

func (cm *ConfigManager) RemoveAllIpInfo()

*

  • 清除所有设置的IP
  • @description
  • @return

func (*ConfigManager) SetIpInfo

func (cm *ConfigManager) SetIpInfo(masterAddress string, bakAddress1 string,
	bakAddress2 string, bakAddress3 string) (ret int)

type GetBalance

type GetBalance struct {
	*UserInfo
}

func NewGetBalance

func NewGetBalance(userid string, pwd string) *GetBalance

func (*GetBalance) GetName

func (s *GetBalance) GetName() string

type GetMo

type GetMo struct {
	*UserInfo
	Retsize int `json:"retsize"`
}

获取上行接口

func NewGetMo

func NewGetMo(userid string, pwd string, retsize int) *GetMo

func (*GetMo) GetName

func (s *GetMo) GetName() string

func (*GetMo) ParseRecvData

func (u *GetMo) ParseRecvData(body []byte) bool

type GetRpt

type GetRpt struct {
	*UserInfo
	Retsize int `json:"retsize"`
}

func NewGetRpt

func NewGetRpt(userid string, pwd string, retsize int) *GetRpt

func (*GetRpt) GetName

func (s *GetRpt) GetName() string

func (*GetRpt) ParseRecvData

func (u *GetRpt) ParseRecvData(body []byte) bool

type Mo

type Mo struct {
	// 平台流水编号
	Msgid string `json:"msgid"`
	// 上行手机号
	Mobile string `json:"mobile"`
	// 上行通道号
	Spno string `json:"spno"`
	// 上行扩展子号
	Exno string `json:"exno"`
	// 上行时间
	Rtime string `json:"rtime"`
	// 上行内容
	Content string `json:"content"`
}

type MoRet

type MoRet struct {
	Result int  `json:"result"`
	Mos    []Mo `json:"mos"`
}

type MultiSend

type MultiSend struct {
	*UserInfo
	Multimt []SMData `json:"multimt"`
}

func NewMultiSend

func NewMultiSend(userid string, pwd string, multmt []SMData) *MultiSend

func (*MultiSend) GetName

func (m *MultiSend) GetName() string

type PostObj

type PostObj interface {
	GetUserid() string
	GetPwd() string
	GetTimestemp() string
	GetName() string
	ParseRecvData([]byte) bool
}

*

  • HTTP POST 短连接发送指定类型的数据并接收返回数据
  • @param postobj 指定类型
  • @return true 如果成功返回TRUE,不成功返回FALSE

type PushMo

type PushMo struct {
	*UserInfo
	// 推送上行请求命令:必须填MO_REQ
	Cmd string
	// 请求消息流水号:匹配回应请求的短信包,每次网络请求加1
	Seqid string
	// 上行信息
	Mos []Mo
}

推送上行接口, 接收云通迅平台推送的MO状态报告

func NewPushMo

func NewPushMo(userid string, pwd string, mos []Mo) *PushMo

func (*PushMo) GetName

func (s *PushMo) GetName() string

func (*PushMo) GetUrlencode

func (p *PushMo) GetUrlencode() string

type PushRpt

type PushRpt struct {
	*UserInfo
	// 推送上行请求命令:必须填MO_REQ
	Cmd string
	// 请求消息流水号:匹配回应请求的短信包,每次网络请求加1
	Seqid string
	// contains filtered or unexported fields
}

推送上行接口, 接收云通迅平台推送的MO状态报告

func NewPushRpt

func NewPushRpt(userid string, pwd string, rpts []Rpt) *PushRpt

func (*PushRpt) GetName

func (s *PushRpt) GetName() string

func (*PushRpt) GetUrlencode

func (p *PushRpt) GetUrlencode() string

type Remains

type Remains struct {
	// contains filtered or unexported fields
}

*

*
* @功能概要:余额对象
* @项目名称: GoSmsSdk5.3
* @初创作者: wangdongyu
* @公司名称: ShenZhen Montnets Technology CO.,LTD.
* @创建时间: 2017-4-28 上午10:13
* <p>修改记录1:</p>
* <pre>
*      修改日期:
*      修改人:
*      修改内容:
* </pre>

func NewRemains

func NewRemains() *Remains

type Rpt

type Rpt struct {
	// 平台流水编号
	Msgid uint64 `json:"msgid"`
	// 用户自定义流水编号
	Custid string `json:"custid"`
	// 当前条数
	Pknum int `json:"pknum"`
	// 总条数
	Pktotal int `json:"pktotal"`
	// 短信接收手机号
	Mobile string `json:"mobile"`
	// 完整的通道号
	Spno string `json:"spno"`
	// 扩展号
	Exno string `json:"exno"`
	// 状态报告对应的下行发送时间
	Stime string `json:"stime"`
	// 状态报告返回时间
	Rtime string `json:"rtime"`
	// 接收状态,0:成功 非0:失败
	Status int `json:"status"`
	// 状态报告错误代码
	Errcode string `json:"errcode"`
	// 状态报告错误代码的描述
	Errdesc string `json:"errdesc"`
	// 下行时填写的exdata
	Exdata string `json:"exdata"`
}

type RptRet

type RptRet struct {
	Result int   `json:"result"`
	Rpts   []Rpt `json:"rpts"`
}

type SMData

type SMData struct {

	//短信接收的手机号,用英文逗号(,)分隔,最大1000个号码。一次提交的号码类型不受限制,但手机会做验证,若有不合法的手机号将会被退回。号码段类型分为:移动、联通、电信手机
	// 注意:请不要使用中文的逗号
	Mobile string `json:"mobile"`

	//最大支持350个字,一个字母或一个汉字都视为一个字
	Content string `json:"content"`

	// 扩展号
	// 长度由账号类型定4-6位,通道号总长度不能超过20位。如:10657****主通道号,3321绑定的扩展端口,主+扩展+子端口总长度不能超过20位。
	Exno string `json:"exno"`

	// 该条短信在您业务系统内的用户自定义流水编号,比如订单号或者短信发送记录的流水号。填写后发送状态返回值内将包含这个ID.最大可支持64位的字符串
	Custid string `json:"custid"`

	// 额外提供的最大64个长度的自定义扩展数据.填写后发送状态返回值内将会包含这部分数据
	Exdata string `json:"exdata"`

	//业务类型
	SvrType string `json:"svrtype"`
}

func NewSMData

func NewSMData(mobile string, content string) (smdata *SMData)

type SingleSend

type SingleSend struct {
	*UserInfo
	*SMData
}

func NewSingleSend

func NewSingleSend(userid string, pwd string, mobile string, content string) *SingleSend

func (*SingleSend) GetName

func (s *SingleSend) GetName() string

func (*SingleSend) GetPwd

func (s *SingleSend) GetPwd() string

func (*SingleSend) GetTimestemp

func (s *SingleSend) GetTimestemp() string

func (*SingleSend) GetUserid

func (s *SingleSend) GetUserid() string

func (*SingleSend) ParseRecvData

func (s *SingleSend) ParseRecvData([]byte) bool

type TemplateSend

type TemplateSend struct {
	*UserInfo
	*VoiceData
}

func NewTemplateSend

func NewTemplateSend(userid string, pwd string, mobile string, content string, msgtype string, tmplid string) *TemplateSend

func (*TemplateSend) GetName

func (s *TemplateSend) GetName() string

type UserInfo

type UserInfo struct {
	// 用户账号:长度最大6个字符,统一大写,如提交参数中包含apikey,
	// 则可以不用填写该参数及pwd,两种鉴权方式中只能选择一种方式来
	Userid string `json:"userid"`

	// 用户密码:定长小写32位字符, 如提交参数中包含apikey,则可以
	// 不用填写该参数及userid,两种鉴权方式中只能选择一种方式来进
	// 行鉴权。
	Pwd string `json:"pwd"`

	// 时间戳,格式为:MMDDHHMMSS,即月日时分秒,定长10位,月日时分秒不足2位时左补0.时间戳请获取您真实的服务器时间,不要填写固定的时间,否则pwd参数起不到加密作用
	Timestamp string `json:"timestamp"`
}

func NewUserInfo

func NewUserInfo(userid string, pwd string) *UserInfo

func (*UserInfo) GetPwd

func (u *UserInfo) GetPwd() string

func (*UserInfo) GetTimestemp

func (u *UserInfo) GetTimestemp() string

func (*UserInfo) GetUserid

func (u *UserInfo) GetUserid() string

func (*UserInfo) ParseRecvData

func (u *UserInfo) ParseRecvData(body []byte) bool

type VoiceData

type VoiceData struct {

	//短信接收的手机号,用英文逗号(,)分隔,最大1000个号码。一次提交的号码类型不受限制,但手机会做验证,若有不合法的手机号将会被退回。号码段类型分为:移动、联通、电信手机
	// 注意:请不要使用中文的逗号
	Mobile string `json:"mobile"`

	//最大支持350个字,一个字母或一个汉字都视为一个字
	Content string `json:"content"`

	// 消息类型:
	// 1:语音验证码
	// 3:语音通知:只有当显号为12590时,实际发出的消息类型仍为语音验证码,并且使用梦网自带的语音模板发送语音验证码,其他显号下仍然使用语音模板编号对应的模板发送语音通知。
	Msgtype string `json:"msgtype"`

	// 语音模版编号:
	// 当msgtype为1时,语音模板编号为非必须项,如提交此字段则使用与提交模板编号对应的模板发送语音验证码,如不提交此字段或填空则使用梦网自带的语音模板发送语音验证码
	// 当msgtype为3时,语音模板编号为必填项
	Tmplid string `json:"tmplid"`

	// 扩展号
	// 长度由账号类型定4-6位,通道号总长度不能超过20位。如:10657****主通道号,3321绑定的扩展端口,主+扩展+子端口总长度不能超过20位。
	Exno string `json:"exno"`

	// 该条短信在您业务系统内的用户自定义流水编号,比如订单号或者短信发送记录的流水号。填写后发送状态返回值内将包含这个ID.最大可支持64位的字符串
	Custid string `json:"custid"`
}

func NewVoiceData

func NewVoiceData(mobile string, content string, msgtype string, tmplid string) (voidata *VoiceData)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL