pdd.ddk.goods.detail.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package pdd
  2. import (
  3. "duoduo/conf"
  4. "duoduo/models/pdd"
  5. "duoduo/tools"
  6. "duoduo/tools/app"
  7. "fmt"
  8. "github.com/gin-gonic/gin"
  9. "github.com/shopspring/decimal"
  10. "time"
  11. )
  12. //商品详情
  13. func PddDdkGoodsDetail(c *gin.Context) {
  14. var inData pdd.PddDdkGoodsDetailRequest
  15. var outData pdd.PddDdkGoodsDetailResponse
  16. var pddErr pdd.ErrorPddResponse
  17. confIni, err := conf.ConnIni()
  18. if err != nil {
  19. app.Error(c, 400, err, err.Error())
  20. return
  21. }
  22. err = c.ShouldBindJSON(&inData)
  23. if err != nil {
  24. app.Error(c, 400, err, err.Error())
  25. return
  26. }
  27. inData.ClientId = confIni.MustValue("pdd", "client_id")
  28. inData.Type = "pdd.ddk.goods.detail"
  29. inData.Timestamp = fmt.Sprintf("%d", time.Now().Unix())
  30. inData.DataType = "JSON"
  31. inData.Sign = "sign"
  32. sign, err := DDKSign(inData)
  33. if err != nil {
  34. app.Error(c, 400, err, err.Error())
  35. return
  36. }
  37. inData.Sign = sign
  38. val, err := PostDDk(inData, nil)
  39. if err != nil {
  40. app.Error(c, 400, err, err.Error())
  41. return
  42. }
  43. err = tools.JsonUnmarshal(val, &pddErr)
  44. if err != nil {
  45. app.Error(c, 500, err, err.Error())
  46. return
  47. }
  48. if pddErr.ErrorResponse.ErrorCode != 0 {
  49. app.Error(c, 500, err, pddErr.ErrorResponse.ErrorMsg)
  50. return
  51. }
  52. err = tools.JsonUnmarshal(val, &outData)
  53. if err != nil {
  54. app.Error(c, 500, err, err.Error())
  55. return
  56. }
  57. outData.GoodsDetailResponse.GoodsDetails[0].MinAmount = decimal.NewFromInt(outData.GoodsDetailResponse.GoodsDetails[0].MinGroupPrice).Sub(decimal.NewFromInt(outData.GoodsDetailResponse.GoodsDetails[0].CouponDiscount)).Div(decimal.NewFromInt(100)).Round(2)
  58. outData.GoodsDetailResponse.GoodsDetails[0].Rebate = outData.GoodsDetailResponse.GoodsDetails[0].MinAmount.Mul(decimal.NewFromInt(outData.GoodsDetailResponse.GoodsDetails[0].PromotionRate)).Div(decimal.NewFromInt(1000)).Mul(decimal.NewFromFloat(0.55)).Round(2)
  59. app.OK(c, outData, app.Success)
  60. }