sun_code.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package services
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_yb/models/tables/yb_pc_suncode"
  6. "hongze/hongze_yb/models/tables/yb_suncode_pars"
  7. "hongze/hongze_yb/services/wx_app"
  8. "hongze/hongze_yb/utils"
  9. "os"
  10. "time"
  11. )
  12. // SunCodeReq 获取太阳码请求体
  13. type SunCodeReq struct {
  14. CodePage string `json:"CodePage" description:"太阳码page"`
  15. CodeScene string `json:"CodeScene" description:"太阳码scene"`
  16. }
  17. // PcCreateAndUploadSunCode 生成太阳码并上传OSS
  18. func PcCreateAndUploadSunCode(scene, page string) (imgUrl string, err error) {
  19. if page == "" {
  20. err = errors.New("page不能为空")
  21. return
  22. }
  23. // scene超过32位会生成失败,md5处理至32位
  24. sceneMD5 := "a=1"
  25. if scene != "" {
  26. sceneMD5 = utils.MD5(scene)
  27. }
  28. picByte, err := wx_app.GetSunCode(page, sceneMD5)
  29. if err != nil {
  30. return
  31. }
  32. // 生成图片
  33. localPath := "./static/img"
  34. fileName := utils.GetRandStringNoSpecialChar(28) + ".png"
  35. fpath := fmt.Sprint(localPath, "/", fileName)
  36. f, err := os.Create(fpath)
  37. if err != nil {
  38. return
  39. }
  40. if _, err = f.Write(picByte); err != nil {
  41. return
  42. }
  43. defer func() {
  44. f.Close()
  45. os.Remove(fpath)
  46. }()
  47. // 上传OSS
  48. fileDir := "yb/suncode/"
  49. imgUrl, err = UploadAliyunToDir(fileName, fpath, fileDir)
  50. if err != nil {
  51. return
  52. }
  53. if err != nil {
  54. return
  55. }
  56. // 记录参数
  57. if scene != "" {
  58. newPars := &yb_pc_suncode.YbPcSuncode{
  59. Scene: scene,
  60. SceneMd5: sceneMD5,
  61. CodePage: page,
  62. SuncodeURL: imgUrl,
  63. CreateTime: time.Now(),
  64. }
  65. err = newPars.Create()
  66. }
  67. // 记录参数md5
  68. if scene != "" {
  69. newPars := &yb_suncode_pars.YbSuncodePars{
  70. Scene: scene,
  71. SceneKey: sceneMD5,
  72. CreateTime: time.Now(),
  73. }
  74. err = newPars.Create()
  75. }
  76. return
  77. }