Browse Source

短信

master
huangjiajun 3 months ago
parent
commit
cf0823b0a1
5 changed files with 192 additions and 0 deletions
  1. +8
    -0
      db/offical/db_sms_num_list.go
  2. +12
    -0
      db/offical/model/agent_sms_money.go
  3. +8
    -0
      db/offical/model/agent_sms_num_list.go
  4. +28
    -0
      db/offical/model/agent_sms_record.go
  5. +136
    -0
      sms/agent_api.go

+ 8
- 0
db/offical/db_sms_num_list.go View File

@@ -13,3 +13,11 @@ func GetSmsNum(engine *xorm.Engine, smsType, uid interface{}) *model.SmsNumList
}
return &data
}
func GetAgentSmsNum(engine *xorm.Engine, smsType, uid interface{}) *model.AgentSmsNumList {
var data model.AgentSmsNumList
get, err := engine.Where("uid=? and type=?", uid, smsType).Get(&data)
if get == false || err != nil {
return nil
}
return &data
}

+ 12
- 0
db/offical/model/agent_sms_money.go View File

@@ -0,0 +1,12 @@
package model

type AgentSmsMoney struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Money float64 `json:"money" xorm:"default 0.00 comment('金额') DOUBLE(11,2)"`
Num int `json:"num" xorm:"default 0 comment('短信条数') INT(11)"`
Hide int `json:"hide" xorm:"default 0 comment('0否 1是') INT(1)"`
Sort int `json:"sort" xorm:"default 0 comment('排序') INT(11)"`
UpdateTime int `json:"update_time" xorm:"default 0 comment('修改时间') INT(11)"`
Time int `json:"time" xorm:"default 0 comment('创建时间') INT(11)"`
Type string `json:"type" xorm:"default '' comment('普通 putong 营销 yingxiao') VARCHAR(50)"`
}

+ 8
- 0
db/offical/model/agent_sms_num_list.go View File

@@ -0,0 +1,8 @@
package model

type AgentSmsNumList struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Uid int `json:"uid" xorm:"default 0 comment('用户') INT(11)"`
Num int `json:"num" xorm:"default 0 comment('短信条数') INT(11)"`
Type string `json:"type" xorm:"default '' comment('普通 putong 营销 yingxiao') VARCHAR(50)"`
}

+ 28
- 0
db/offical/model/agent_sms_record.go View File

@@ -0,0 +1,28 @@
package model

import (
"time"
)

type AgentSmsRecord struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
OrdId string `json:"ord_id" xorm:"not null default '' comment('订单id') VARCHAR(100)"`
Uid int `json:"uid" xorm:"not null default 0 comment('主用户id') INT(11)"`
Phone string `json:"phone" xorm:"not null default 0 comment('主账号-手机号码') VARCHAR(255)"`
Nickname string `json:"nickname" xorm:"not null default '' comment('主账号-昵称') VARCHAR(255)"`
Amount string `json:"amount" xorm:"not null default '0' comment('充值金额') VARCHAR(255)"`
CostPrice string `json:"cost_price" xorm:"not null default '0' comment('付费价格') VARCHAR(255)"`
Balance string `json:"balance" xorm:"not null default '0' comment('当前余额(充值完当前余额)') VARCHAR(255)"`
PayWay int `json:"pay_way" xorm:"not null default 1 comment('支付方式(1:支付宝 2:微信 3:余额)') TINYINT(1)"`
State int `json:"state" xorm:"not null default 0 comment('状态(0:待付款 1:已付款 2:付款失败)') TINYINT(2)"`
Memo string `json:"memo" xorm:"not null default '' comment('备注') VARCHAR(255)"`
CreateAt time.Time `json:"create_at" xorm:"not null default CURRENT_TIMESTAMP comment('创建时间') DATETIME"`
UpdateAt time.Time `json:"update_at" xorm:"default CURRENT_TIMESTAMP comment('更新时间') DATETIME"`
TradeNo string `json:"trade_no" xorm:"not null default '' comment('支付平台(支付宝/微信)订单号') VARCHAR(100)"`
Type int `json:"type" xorm:"default 0 comment('0收入 1支出') INT(1)"`
OrdType string `json:"ord_type" xorm:"comment('订单类型') VARCHAR(255)"`
SubUid int `json:"sub_uid" xorm:"default 0 INT(11)"`
Fee string `json:"fee" xorm:"VARCHAR(255)"`
Ext string `json:"ext" xorm:"TEXT"`
SmsType string `json:"sms_type" xorm:"VARCHAR(255)"`
}

+ 136
- 0
sms/agent_api.go View File

@@ -0,0 +1,136 @@
package sms

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/db"
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/db/offical"
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/db/offical/model"
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"errors"
"fmt"
"github.com/syyongx/php2go"
"github.com/tidwall/gjson"
"strings"
"time"
"xorm.io/xorm"
)

//短信数量
func AgentSmsNumGetSmsNum(engine *xorm.Engine, smsType, uid interface{}) int {
numData := offical.GetAgentSmsNum(engine, smsType, uid)
num := 0
if numData != nil {
num = numData.Num
}
if num < 0 {
num = 0
}
return num
}

//发送短信
func AgentSmsSend(engine *xorm.Engine, args map[string]interface{}) error {
num := AgentSmsNumGetSmsNum(engine, args["sms_type"], args["uid"])
ex := strings.Split(args["mobile"].(string), ",")
if len(ex) == 0 {
return errors.New("请输入手机号")
}
count := len(ex)
contentLen := php2go.Ceil(float64(len(args["content"].(string))) / 4 / 70)
if args["type"] == "mob" {
contentLen = 1
}
if num < count*int(contentLen) {
return errors.New("短信不足")
}
if args["type"] != "mob" { //联江短信数量
send, err := SmsApiSend(engine, "api.v1.accountNum", map[string]interface{}{})
if err != nil {
return err
}
platformCount := gjson.Get(send, "smsNum").Int()
if int(platformCount) < count*int(contentLen) {
return errors.New("平台短信不足")
}
}
where := make(map[string]interface{})
param := []string{
"content", //短信内容
"mobile", //号码多个以英文”,”号分割,最大 2000 个
"code", //扩展号 0-9 数字,超过 8 位自动截取前 8 位
"ext", //自定义信息,状态报告时返回,可以为空
}
for _, v := range param {
if args[v] != "" && args[v] != nil {
where[v] = args[v].(string)
}
}
send := ""
var err error
if args["type"] == "mob" { //mob
if args["templateCode"] == "" {
args["templateCode"] = "normal"
}
where = map[string]interface{}{
"appkey": args["smsmsg_key"],
"zone": args["zone"],
"phone": args["mobile"],
"templateCode": args["templateCode"],
}
send, err = SmsMobApiSend(where)
if err != nil {
return err
}
status := gjson.Get(send, "status").Int()
msg := gjson.Get(send, "error").String()
if status == 471 {
return errors.New("发送的ip不在白名单中")
}
if status == 406 {
return errors.New("appkey不存在")
}
if status != 200 {
return errors.New(msg)
}
} else {
send, err = SmsApiSend(engine, "api.v1.sms", where)
if err != nil {
return err
}
success := gjson.Get(send, "code").Int()
if success != 20000 {
return errors.New("发送失败")
}
}
//存入记录
ext := map[string]interface{}{
"send": send,
"post": where,
}
var record = model.AgentSmsRecord{
OrdId: "",
Uid: int(zhios_third_party_utils.AnyToInt64(args["uid"])),
Amount: zhios_third_party_utils.IntToStr(count * int(contentLen)),
CostPrice: "",
Balance: zhios_third_party_utils.IntToStr(num - count*int(contentLen)),
PayWay: 0,
State: 1,
Memo: "发送短信",
CreateAt: time.Now(),
UpdateAt: time.Now(),
TradeNo: "",
Type: 1,
OrdType: "buy",
Fee: "",
Ext: zhios_third_party_utils.SerializeStr(ext),
SmsType: args["sms_type"].(string),
Phone: args["mobile"].(string),
}
engine.InsertOne(&record)
sql := `UPDATE agent_sms_num_list set num=num-%d WHERE uid=%s and type='%s';`
sql = fmt.Sprintf(sql, count*int(contentLen), args["uid"], args["sms_type"])
fmt.Println(sql)
nativeString, err := db.QueryNativeString(engine, sql)
fmt.Println(nativeString)
fmt.Println(err)
return nil
}

Loading…
Cancel
Save