control.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package huawei
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strings"
  6. "bet24.com/log"
  7. "bet24.com/servers/payment/db"
  8. "bet24.com/servers/payment/shop"
  9. "github.com/gin-gonic/gin"
  10. )
  11. // 下单
  12. func Order(c *gin.Context) {
  13. obj := db.NewOrder(db.SP_HuaweiPay_ORDER)
  14. if err := c.ShouldBind(&obj.In); err != nil {
  15. log.Debug("%s query params err %v", "huawei.PayOrder", err)
  16. c.String(http.StatusOK, "")
  17. return
  18. }
  19. obj.In.IpAddress = strings.Split(c.Request.RemoteAddr, ":")[0]
  20. // 获取产品信息
  21. item := shop.GetProduct(obj.In.ProductID)
  22. if item == nil {
  23. log.Error("%s query GetProduct productId=%s currency=%s is nil", "huawei.PayOrder", obj.In.ProductID, obj.In.Currency)
  24. c.String(http.StatusOK, "")
  25. return
  26. }
  27. //// 获取当前汇率信息
  28. //info := shop.GetExchangeRate(obj.In.Currency)
  29. //if info == nil {
  30. // log.Error("%s query GetExchangeRate obj.In.Currency=%s is nil", "huawei.PayOrder", obj.In.Currency)
  31. // c.String(http.StatusOK, "")
  32. // return
  33. //}
  34. //
  35. //// 计算价格
  36. //calPrice := info.Rate * item.Price
  37. //
  38. //// 检查价格是否篡改
  39. //if calPrice != obj.In.Price {
  40. // log.Error("%s obj.In.Price=%v info.Rate=%v calPrice=%v is invalid", "huawei.PayOrder", obj.In.Price, info.Rate, calPrice)
  41. // c.String(http.StatusOK, "")
  42. // return
  43. //}
  44. // 检查价格是否篡改
  45. if item.Price != obj.In.Price {
  46. log.Error("%s obj.In.Price=%v calPrice=%v is invalid", "huawei.PayOrder", obj.In.Price, item.Price)
  47. c.String(http.StatusOK, "")
  48. return
  49. }
  50. obj.DoAction(nil)
  51. if obj.Out.OrderID == "" {
  52. log.Debug("%s GenOrder fail obj.In=%+v", "huawei.PayOrder", obj.In)
  53. c.String(http.StatusOK, "")
  54. return
  55. }
  56. c.String(http.StatusOK, obj.Out.OrderID)
  57. return
  58. }
  59. // 回调
  60. func Notify(c *gin.Context) {
  61. _, err := AtDemo.GetAppAt()
  62. if err != nil {
  63. log.Error("%s GetAppAt err is %v", "huawei.Notify", err)
  64. return
  65. }
  66. //获取参数
  67. reqPurchaseData := strings.Join(c.Request.Form["inAppPurchaseData"], "")
  68. //log.Debug("reqPurChaseData ==> %s", reqPurchaseData)
  69. //解析参数
  70. req := purchaseData{}
  71. if err := json.Unmarshal([]byte(reqPurchaseData), &req); err != nil {
  72. log.Debug("%s Query Params reqPurchaseData Unmarshal err %v", "huawei.Notify", err)
  73. return
  74. }
  75. //log.Debug("解析参数:%+v", req)
  76. //验证token有效性
  77. retCode, _ := Client.VerifyToken(req.PurchaseToken, req.ProductId, 0)
  78. c.JSON(http.StatusOK, struct{ RetCode int }{RetCode: retCode})
  79. return
  80. }