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 }