劲创营---任务项目
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

137 行
4.0 KiB

  1. package sms
  2. import (
  3. "applet/app/comm/db"
  4. "applet/app/comm/svc"
  5. "applet/app/comm/utils"
  6. "applet/app/comm/utils/cache"
  7. "applet/app/comm/utils/logx"
  8. "applet/app/lib/zhimeng"
  9. "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/aliyun"
  10. "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/sms"
  11. "errors"
  12. "fmt"
  13. "github.com/tidwall/gjson"
  14. "github.com/gin-gonic/gin"
  15. )
  16. // NewZhimengSMS is 智盟的短信服务
  17. func NewZhimengSMS(c *gin.Context) *zhimeng.SDK {
  18. sms := new(zhimeng.SDK)
  19. key := svc.SysCfgGet(c, "third_zm_sms_key")
  20. secret := svc.SysCfgGet(c, "third_zm_sms_secret")
  21. if key == "" || secret == "" {
  22. _ = logx.Warn("短信服务配置错误")
  23. }
  24. sms.Init("send_msg", key, secret)
  25. return sms
  26. }
  27. func GetSmsConfig(c *gin.Context, zone string, postData map[string]interface{}, types string) error {
  28. m := db.SysCfgGet(c, "third_app_push_set")
  29. if c.GetString("app_type") == "o2o" {
  30. m = db.SysCfgGet(c, "biz_third_app_push_set")
  31. }
  32. key := gjson.Get(m, "mobAppKey").String()
  33. postData["is_mob"] = "1"
  34. postData["type"] = "mob"
  35. postData["sms_type"] = "putong"
  36. smsPlatform := GetSmsPlatform(c)
  37. if smsPlatform == "ljioe" {
  38. postData["is_mob"] = "0"
  39. postData["type"] = ""
  40. }
  41. if zone == "" {
  42. zone = "86"
  43. }
  44. if zone != "86" { //国际短信
  45. postData["is_sales"] = "2"
  46. postData["sms_type"] = "international"
  47. }
  48. postData["templateCode"] = GetTplId(c, zone, postData["templateCode"].(string))
  49. postData["zone"] = zone
  50. if key != "" {
  51. postData["smsmsg_key"] = key
  52. }
  53. smsSendType := svc.SysCfgGet(c, "sms_send_type")
  54. aliPaySmsSendType := svc.SysCfgGet(c, "alipay_sms_send_type")
  55. if c.GetString("app_type") != "" && c.GetString("app_type") != "daogou" {
  56. smsSendType = svc.SysCfgGet(c, "o2o_sms_send_type")
  57. }
  58. if types == "bind_alipay" || types == "unbind_alipay" {
  59. smsSendType = aliPaySmsSendType
  60. }
  61. if smsSendType == "1" || smsSendType == "2" {
  62. captcha := utils.CreateCaptcha()
  63. if svc.SysCfgGet(c, "sms_send_code") != "" {
  64. captcha = svc.SysCfgGet(c, "sms_send_code")
  65. }
  66. cache.SetEx("sms:"+c.GetString("mid")+":"+postData["mobile"].(string), captcha, 300)
  67. c.Set("tip", "您的验证码为 "+captcha)
  68. return errors.New("您的验证码为 " + captcha)
  69. }
  70. if c.GetString("sms_type") == "2" { //阿里
  71. captcha := utils.CreateCaptcha()
  72. data := AliyunSmsBase(c)
  73. //发送短信
  74. fmt.Println(captcha)
  75. err := aliyun.AliyunSendSmsOwn(data["aliyun_sms_id"], data["aliyun_sms_secret"], postData["mobile"].(string), data["aliyun_sms_sign_name"], data["aliyun_sms_code"], "{\"code\":\""+captcha+"\"}")
  76. if err != nil {
  77. return errors.New("发送失败")
  78. }
  79. cache.SetEx("sms:"+c.GetString("mid")+":"+postData["mobile"].(string), captcha, 300)
  80. return nil
  81. }
  82. if c.GetString("sms_type") == "1" { //新的
  83. postData["uid"] = c.GetString("mid")
  84. err := sms.SmsSend(db.Db, postData)
  85. if err != nil {
  86. return err
  87. }
  88. return nil
  89. }
  90. fmt.Println("===短信", postData, c.ClientIP())
  91. sdk, err := NewZhimengSMS(c).SelectFunction("msg_doing").WithSMSArgs(postData).Result()
  92. if err != nil {
  93. msg := gjson.Get(err.Error(), "msg").String()
  94. if msg == "" {
  95. msg = err.Error()
  96. }
  97. fmt.Println("===短信", err)
  98. errs := errors.New(msg)
  99. return errs
  100. }
  101. rmap := sdk.ToInterface().(map[string]interface{})
  102. fmt.Println("===短信", rmap)
  103. if rmap["status"] == "" {
  104. return err
  105. }
  106. return nil
  107. }
  108. func GetSmsPlatform(c *gin.Context) string {
  109. var smsPlatform = "mob"
  110. return smsPlatform
  111. }
  112. func GetTplId(c *gin.Context, zone, types string) string {
  113. // 校验短信验证码
  114. tplId := ""
  115. if zone != "86" {
  116. tplId = svc.SysCfgGet(c, "mob_sms_sdk_international_template_id")
  117. } else {
  118. tplId = svc.SysCfgGet(c, "mob_sms_sdk_template_id")
  119. }
  120. if c.GetString("app_type") == "o2o" {
  121. tplId = db.SysCfgGet(c, "biz_mob_sms_sdk_template_id")
  122. }
  123. normal := gjson.Get(tplId, types).String()
  124. if normal == "" {
  125. normal = gjson.Get(tplId, "normal").String()
  126. }
  127. return normal
  128. }
  129. func AliyunSmsBase(c *gin.Context) map[string]string {
  130. data := db.SysCfgFind(c, "aliyun_sms_id", "aliyun_sms_secret", "aliyun_sms_code", "aliyun_sms_sign_name")
  131. return data
  132. }