copyLink.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package order
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. "app.yhyue.com/moapp/jybase/encrypt"
  5. "app.yhyue.com/moapp/jybase/mongodb"
  6. "context"
  7. "encoding/json"
  8. "errors"
  9. "fmt"
  10. "github.com/gogf/gf/v2/frame/g"
  11. "github.com/gogf/gf/v2/util/gconv"
  12. "io/ioutil"
  13. "jyOrderManager/internal/model"
  14. "log"
  15. "net/http"
  16. "net/url"
  17. "time"
  18. )
  19. func CopyLink(ctx context.Context, param model.OrderCopyLinkParams) (interface{}, error) {
  20. var link string
  21. //查询订单信息
  22. orderData, _ := g.DB().Ctx(ctx).GetOne(ctx, fmt.Sprintf("SELECT a.user_id,a.order_code,jod.product_type,jod.filter,b.saler_name,b.saler_Id FROM dataexport_order a INNER JOIN order_sale_record b on(a.order_code = b.ordercode) INNER JOIN jy_order_detail jod on a.order_code = jod.order_code WHERE a.id=%s and jod.status =1", param.Id))
  23. if !orderData.IsEmpty() {
  24. order := orderData.Map()
  25. filterMap := map[string]interface{}{}
  26. if err := json.Unmarshal([]byte((order["filter"]).(string)), &filterMap); err == nil {
  27. token := GetSellerToken(mongodb.BsonIdToSId(order["user_id"]), gconv.String(order["saler_name"]), gconv.String(order["saler_Id"]), map[string]interface{}{
  28. "tt": common.IntAll(filterMap["give_cycle"]),
  29. "tn": common.IntAll(filterMap["give_type"]),
  30. })
  31. productType := common.ObjToString(order["product_type"])
  32. copyHref := make(map[string]string)
  33. g.Cfg().MustGet(context.Background(), "copyHref").Scan(&copyHref)
  34. href := fmt.Sprintf("%s/jypay/free/seller/wxPaymentPage?orderCode=%s&token=%s&href=%s", g.Cfg().MustGet(context.Background(), "jyWebDomain").String(), common.ObjToString(order["order_code"]), token, copyHref[productType])
  35. link = href
  36. }
  37. log.Println("生成链接:", link)
  38. //调用短地址服务把长链接转成短链接
  39. pam := url.Values{
  40. "LongUrl": []string{link},
  41. }
  42. res, _ := HttpPost(g.Cfg().MustGet(context.Background(), "shortLinkService").String(), pam)
  43. if res != nil && len(res) > 0 && common.IntAll(res["err_code"]) == 0 {
  44. return map[string]interface{}{
  45. "link": res["data"],
  46. }, nil
  47. }
  48. }
  49. return nil, errors.New("复制链接失败")
  50. }
  51. func GetSellerToken(uId, sName string, sid string, desc map[string]interface{}) (token string) {
  52. bytes, _ := json.Marshal(desc)
  53. return encrypt.SE.Encode2Hex(fmt.Sprintf("uid=%s&sName=%s&sid=%s&desc=%s&t=%d", uId, sName, sid, string(bytes), time.Now().Unix()))
  54. }
  55. func HttpPost(path string, param url.Values) (map[string]interface{}, error) {
  56. res, err := http.PostForm(path, param)
  57. if err != nil {
  58. return nil, err
  59. }
  60. defer res.Body.Close()
  61. bs, _ := ioutil.ReadAll(res.Body)
  62. resMap := map[string]interface{}{}
  63. log.Println("req", param.Encode(), "body:", string(bs), "err", err)
  64. err = json.Unmarshal(bs, &resMap)
  65. if err != nil {
  66. return nil, fmt.Errorf("%s 请求返回内容异常 %s", path, string(bs))
  67. }
  68. return resMap, nil
  69. }