|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- 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 SmsNumGetSmsNum(engine *xorm.Engine, smsType, uid interface{}) int {
- numData := offical.GetSmsNum(engine, smsType, uid)
- num := 0
- if numData != nil {
- num = numData.Num
- }
- if num < 0 {
- num = 0
- }
- return num
- }
-
- //发送短信
- func SmsSend(engine *xorm.Engine, args map[string]interface{}) error {
- num := SmsNumGetSmsNum(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, "data.smsNum").String()
- if zhios_third_party_utils.StrToInt(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] != "" {
- where[v] = args[v].(string)
- }
- }
- send := ""
- var err error
- if args["type"] == "mob" { //mob
- where = map[string]interface{}{
- "appkey": args["smsmsg_key"],
- "zone": args["zone"],
- "phone": args["phone"],
- "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, "success").Int()
- if success == 0 {
- return errors.New("发送失败")
- }
- }
- //存入记录
- ext := map[string]interface{}{
- "send": send,
- "post": where,
- }
- var record = model.SmsRecord{
- 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),
- }
- engine.InsertOne(&record)
- sql := `UPDATE 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"])
- db.QueryNativeString(engine, sql)
- return nil
- }
-
- func SmsApiSend(engine *xorm.Engine, method string, args map[string]interface{}) (string, error) {
- smsmsgKey := offical.SysCfgByKey(engine, "smsmsg_key")
- smsmsgAccount := offical.SysCfgByKey(engine, "smsmsg_account")
- smsWebHost := offical.SysCfgByKey(engine, "sms_web_host")
- salesSmsmsgKey := offical.SysCfgByKey(engine, "sales_smsmsg_key")
- salesSmsmsgAccount := offical.SysCfgByKey(engine, "sales_smsmsg_account")
-
- if args["sms_type"] == "yingxiao" {
- smsmsgKey = salesSmsmsgKey
- smsmsgAccount = salesSmsmsgAccount
- }
- thisUrl := smsWebHost
- if thisUrl == "" {
- thisUrl = "http://api.ljioe.cn/"
- }
- thisUrl += strings.ReplaceAll(method, ".", "/")
- args["timestamp"] = zhios_third_party_utils.Int64ToStr(time.Now().Unix())
- args["account"] = smsmsgAccount
- args["key"] = php2go.Md5(smsmsgKey + php2go.Md5(args["timestamp"].(string)))
- post, err := zhios_third_party_utils.CurlPost(thisUrl, zhios_third_party_utils.SerializeStr(args), nil)
- fmt.Println(string(post))
- fmt.Println(err)
- return string(post), err
- }
- func SmsMobApiSend(args map[string]interface{}) (string, error) {
- thisUrl := "https://webapi.sms.mob.com/sms/sendmsg"
- post, err := zhios_third_party_utils.CurlPost(thisUrl, zhios_third_party_utils.SerializeStr(args), nil)
- fmt.Println(string(post))
- fmt.Println(err)
- return string(post), err
- }
|