package hdl import ( "applet/app/customer/lib/validate" "applet/app/customer/md" "applet/app/customer/svc" "applet/app/db" "applet/app/db/model" "applet/app/e" "applet/app/enum" "encoding/json" "github.com/gin-gonic/gin" ) func BuyPackage(c *gin.Context) { var req md.BuyPackageReq err := c.ShouldBindJSON(&req) if err != nil { err = validate.HandleValidateErr(err) err1 := err.(e.E) e.OutErr(c, err1.Code, err1.Error()) return } outTradeNo, tradeNo, total, err := svc.BuyPackage(c, req) if err != nil { e.OutErr(c, e.ERR, err.Error()) return } e.OutSuc(c, map[string]interface{}{ "out_trade_no": outTradeNo, "trade_no": tradeNo, "total": total, }, nil) return } func OrdState(c *gin.Context) { outTradeNo := c.DefaultQuery("out_trade_no", "") centralKitchenForSchoolPackageOrd := db.CentralKitchenForSchoolPackageOrd{} centralKitchenForSchoolPackageOrd.Set(outTradeNo) ord, err := centralKitchenForSchoolPackageOrd.GetCentralKitchenForSchoolPackageOrd() if err != nil { e.OutErr(c, e.ERR_DB_ORM, err.Error()) return } if ord == nil { e.OutErr(c, e.ERR_NO_DATA, "未查询到对应订单记录") return } if ord.State == enum.CentralKitchenForSchoolPackageOrdStateForWait { //处于待支付状态,请求支付宝同步订单状态 sysCfgDb := db.SysCfgDb{} sysCfgDb.Set() sysCfg := sysCfgDb.SysCfgFindWithDb(enum.JsapiPayAppAutToken, enum.OpenAlipayAppid, enum.OpenAlipayAppPrivateKey, enum.OpenAlipayPublicKey) err2, result := svc.CurlAlipayTradeQuery(md.CurlAlipayTradeQueryReq{ Config: struct { PayAliAppId string `json:"pay_ali_app_id" label:"支付宝开放平台-第三方应用-appid"` PayAliPrivateKey string `json:"pay_ali_private_key" label:"支付宝开放平台-第三方应用-接口加签-应用私钥"` PayAliPublicKey string `json:"pay_ali_public_key" label:"支付宝开放平台-第三方应用-接口加签-支付宝公钥"` }{ PayAliAppId: sysCfg[enum.OpenAlipayAppid], PayAliPrivateKey: sysCfg[enum.OpenAlipayAppPrivateKey], PayAliPublicKey: sysCfg[enum.OpenAlipayPublicKey], }, OutTradeNo: outTradeNo, AppAuthToken: sysCfg[enum.JsapiPayAppAutToken], }) if err2 != nil { e.OutErr(c, e.ERR, err2.Error()) return } if result.TradeStatus == "TRADE_CLOSED" { ord.State = enum.CentralKitchenForSchoolPackageOrdStateForFail } if result.TradeStatus == "TRADE_SUCCESS" { ord.State = enum.CentralKitchenForSchoolPackageOrdStateForSuccess ord.OrdState = enum.CentralKitchenForSchoolPackageOrdOrdStateForSuccess //TODO::将预留数据插入到 `central_kitchen_for_school_user_with_day` var data []*model.CentralKitchenForSchoolUserWithDay err4 := json.Unmarshal([]byte(ord.WithDayData), &data) if err4 != nil { e.OutErr(c, e.ERR, err4.Error()) return } for _, v := range data { v.OrdNo = outTradeNo } centralKitchenForSchoolUserWithDayDb := db.CentralKitchenForSchoolUserWithDayDb{} centralKitchenForSchoolUserWithDayDb.Set(0) _, err5 := centralKitchenForSchoolUserWithDayDb.BatchAddCentralKitchenForSchoolUserWithDays(data) if err != nil { e.OutErr(c, e.ERR, err5.Error()) return } } _, err3 := centralKitchenForSchoolPackageOrd.CentralKitchenForSchoolPackageOrdUpdate(ord, "state", "ord_state") if err3 != nil { e.OutErr(c, e.ERR_DB_ORM, err3.Error()) return } } e.OutSuc(c, map[string]interface{}{ "sate": ord.State, "sate_zh": enum.CentralKitchenForSchoolPackageOrdState.String(enum.CentralKitchenForSchoolPackageOrdState(ord.State)), }, nil) return }