|
|
@@ -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 |
|
|
|
} |