| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package api
- import (
- "encoding/json"
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/shopspring/decimal"
- "go_zh/model"
- "go_zh/pkg/validator"
- "go_zh/request/api"
- "go_zh/server"
- "go_zh/server/chinaums"
- )
- type ShopOrderController struct {
- BaseController
- }
- func (shopOrder ShopOrderController) GetOrderSn(c *gin.Context) {
- mId := c.GetInt("mId")
- //数据验证
- var data api.CreateOrderRequest
- msg, ok := validator.ValidatorData(c, &data)
- if !ok {
- shopOrder.responseError(c, 400, msg)
- return
- }
- if data.PayType == 1 {
- if mId == 0 {
- shopOrder.responseError(c, 401, "缺少登陆信息")
- return
- }
- }
- //对金额进行精度处理
- money, err := decimal.NewFromString(data.PayMoney)
- if err != nil {
- shopOrder.responseError(c, 400, "金额错误")
- return
- }
- //对最小金额做判断
- minMoney, _ := decimal.NewFromString("0.01")
- if money.LessThan(minMoney) { //当 money小于minMoney时
- shopOrder.responseError(c, 400, "金额不合法")
- return
- }
- redisServer := server.GetRedisServerInstance()
- //获取商户银联信息
- shopMchidModel := model.XShopMchid{}
- var shopMchidInfo = model.XShopMchid{}
- shopMchidKey := fmt.Sprintf("%s%s", "shopMachidInfo", data.ShopId)
- shopMchidJson := redisServer.GetStr(shopMchidKey)
- if len(shopMchidJson) == 0 { //没缓存信息
- shopMchidInfo, err = shopMchidModel.GetShopBankMchid(data.ShopId)
- if err != nil {
- shopOrder.responseError(c, 400, "商户号信息错误"+err.Error())
- return
- }
- //存入缓存
- jsonData, _ := json.Marshal(shopMchidInfo)
- redisServer.SetStr(shopMchidKey, string(jsonData), 120)
- } else {
- _ = json.Unmarshal([]byte(shopMchidJson), &shopMchidInfo)
- }
- isBank := 0
- if shopMchidInfo.ID > 0 { //如果有银联信息就是银联支付
- isBank = 1
- }
- //获取商户配置
- shopSetModel := model.XShopSet{}
- var shopSetInfo = model.XShopSet{}
- shopSetKey := fmt.Sprintf("%s%s", "shopSetInfo", data.ShopId)
- shopSetJson := redisServer.GetStr(shopSetKey)
- if len(shopSetJson) == 0 { //没缓存信息
- shopSetInfo, err = shopSetModel.GetShopSetInfo(data.ShopId)
- if err != nil {
- shopOrder.responseError(c, 400, "商户配置信息错误")
- return
- }
- //存入缓存
- shopSetJsonData, _ := json.Marshal(shopSetInfo)
- redisServer.SetStr(shopSetKey, string(shopSetJsonData), 120)
- } else {
- _ = json.Unmarshal([]byte(shopSetJson), &shopSetInfo)
- }
- var discount decimal.Decimal
- if shopSetInfo.ID <= 0 { //如果没有
- discount, _ = decimal.NewFromString("0")
- } else {
- discount = shopSetInfo.Discount
- }
- orderSnServer := server.GetOrderSnServerInstance(1)
- orderSn := orderSnServer.GenerateString("382FS")
- //创建订单信息
- shopOrderModel := model.XShopOrder{}
- shopOrderModel.ShopID = data.ShopId
- shopOrderModel.PayType = data.PayType
- shopOrderModel.MID = mId
- shopOrderModel.RsSn = orderSn
- shopOrderModel.PayMoney = money
- shopOrderModel.Status = 1
- shopOrderModel.Discount = discount
- shopOrderModel.IsClearing = 0
- shopOrderModel.IsReport = 0
- shopOrderModel.PayCodeSource = data.PayCodeSource
- shopOrderModel.IsBank = isBank
- err = shopOrderModel.CreateShopOrder()
- if err != nil {
- shopOrder.responseError(c, 400, "订单创建失败")
- return
- }
- chinaumsServer := chinaums.GetOrderSnServerInstance()
- weChatServer := server.GetWeChatServerInstance()
- var payUrl string
- var notifyUrl string
- if data.PayType == 1 { //微信支付
- //查询当前用户openid
- memberOpenIdModel := model.XMemberOpenID{}
- var memberOpenIdInfo = model.XMemberOpenID{}
- memberOpenIdInfo, err = memberOpenIdModel.GetMemberOpenInfo(mId, 1)
- if err != nil {
- shopOrder.responseError(c, 409, "会员信息错误")
- return
- }
- if len(memberOpenIdInfo.Openid) <= 0 {
- shopOrder.responseError(c, 409, "会员信息错误")
- return
- }
- memberOpenId := memberOpenIdInfo.Openid
- if isBank == 1 {
- payUrl = chinaumsServer.ShopOrderWxH5Pay(shopMchidInfo, shopOrderModel.RsSn, shopOrderModel.PayMoney, notifyUrl, memberOpenId)
- } else {
- wxPay = weChatServer.WeChatJsPay(shopOrderModel.RsSn, shopOrderModel.PayMoney, notifyUrl, '订单支付', memberOpenId)
- }
- } else { //支付宝支付
- if isBank == 1 {
- payUrl = chinaumsServer.ShopOrderAliH5Pay(shopMchidInfo, shopOrderModel.RsSn, shopOrderModel.PayMoney, notifyUrl)
- }
- }
- shopOrder.responseSuccess(c, payUrl)
- }
|