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