This commit is contained in:
li 2022-11-26 16:52:05 +08:00
parent 09685704f5
commit 81e54ea039
11 changed files with 956 additions and 38 deletions

View File

@ -361,7 +361,7 @@ func PostagePackageBuy(c *gin.Context) {
orderSn := model.GetOrderSn()
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: user.MemberLevel,
OrderType: 11, UserCouponId: 0}.Insert()
OrderType: 11, UserCouponId: 0, Attach: wxpay.WxPayPostagePackage}.Insert()
if err != nil {
logger.Error(errors.New("web pay err"))
RespJson(c, status.InternalServerError, nil)
@ -373,9 +373,15 @@ func PostagePackageBuy(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
webPay, err := wxpay.WebPay(orderSn, info.PostagePackageFee, user.WxOpenID, "N", wxpay.WxPayPostagePackage, configInfo.NotifyUrl)
//webPay, err := wxpay.WebPay(orderSn, info.PostagePackageFee, user.WxOpenID, "N", wxpay.WxPayPostagePackage, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("web pay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, info.PostagePackageFee, user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("web pay err"))
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}

View File

@ -23,6 +23,7 @@ import (
"mh-server/lib/wxpay"
"mh-server/model"
"sort"
"strconv"
"strings"
"time"
)
@ -1089,6 +1090,817 @@ func PushWXPayNotice(c *gin.Context) {
RespBodyXML(c, ret)
}
type HmPushWXPayNoticeReq struct {
AppId string `json:"app_id" form:"app_id"`
BankOrderNo string `json:"bank_order_no" form:"bank_order_no"`
BankTrxNo string `json:"bank_trx_no" form:"bank_trx_no"`
BankWayCode string `json:"bank_way_code" form:"bank_way_code"`
BuyerId string `json:"buyer_id" form:"buyer_id"`
BuyerTradeFundBillDetail string `json:"buyer_trade_fund_bill_detail" form:"buyer_trade_fund_bill_detail"`
NotifyType string `json:"notify_type" form:"notify_type"`
OutOrderNo string `json:"out_order_no" form:"out_order_no"`
PayAmount string `json:"pay_amount" form:"pay_amount"`
PayModeCode string `json:"pay_mode_code" form:"pay_mode_code"`
PaySuccessTime string `json:"pay_success_time" form:"pay_success_time"`
PayWayCode string `json:"pay_way_code" form:"pay_way_code"`
PlatTrxNo string `json:"plat_trx_no" form:"plat_trx_no"`
SettleAmount string `json:"settle_amount" form:"settle_amount"`
SettleAppId string `json:"settle_app_id" form:"settle_app_id"`
Sign string `json:"sign" form:"sign"`
SignType string `json:"sign_type" form:"sign_type"`
}
// 微信推送支付通知
func HmPushWXPayNotice(c *gin.Context) {
fmt.Println("微信推送支付通知")
bankOrderNo := c.Query("bank_order_no")
outOrderNo := c.Query("out_order_no")
payAmount := c.Query("pay_amount")
sign := c.Query("sign")
tradeStatus := c.Query("trade_status")
if tradeStatus != "SUCCESS" {
logger.Error("tradeStatus err:")
RespOK(c, "Error")
return
}
//fmt.Println("URL:", c.Request.URL.String())
//fmt.Println("sign-----", sign)
substance, err := model.ParaToSubstance(c, sign)
if err != nil {
logger.Error("substance err:", err)
RespOK(c, "Error")
return
}
err = wxpay.HmVerifySha1Rsa(substance, sign)
if err != nil {
logger.Error("HmVerifySha1Rsa err:", err)
RespOK(c, "Error")
return
}
record := &model.UserOpenMemberRecord{OpenNo: outOrderNo}
err = record.GetByOpenNo()
if err != nil {
logger.Error("err:", err)
}
if record.State == 2 {
RespOK(c, "SUCCESS")
return
}
fundRecord := new(model.FundRecord)
payAmountFloat, err := strconv.ParseFloat(payAmount, 64)
if err != nil {
logger.Error("parse err:", err)
}
fundRecord.Amount = int64(payAmountFloat * 100)
if record.Attach == wxpay.WxPayRentCard {
logger.Info("租借游戏卡 支付成功:")
var order model.Order
err := model.NewOrderQuerySet(model.DB).OrderSnEq(outOrderNo).
PayStatusEq(PayStatusUnPay).CardStatusNe(OrderCardStatusCancel).One(&order)
if err != nil {
logger.Error("err:", err)
return
}
//orderJson, _ := json.Marshal(&order)
//fmt.Println("orderJson:", string(orderJson))
begin := model.DB.Begin()
err = model.NewOrderQuerySet(begin).IDEq(order.ID).GetUpdater().
SetPayStatus(model.PayStatusPaid).SetPayTime(time.Now()).Update()
if err != nil {
begin.Rollback()
logger.Error("err:", err)
return
}
//model.OrderCard{}
_, err = model.NewOrderCardQuerySet(begin).OrderIdEq(order.ID).GetUpdater().
SetPayStatus(model.PayStatusPaid).UpdateNum()
if err != nil {
begin.Rollback()
logger.Error("err:", err)
return
}
sub := model.DeliverTaskSub{
Uid: uint32(order.Uid),
UserAddressId: uint32(order.UserAddressId),
OrderType: 1,
OrderId: order.ID,
StoreId: uint32(order.StoreId),
}
err = sub.Add()
if err != nil {
logger.Error("deliver task sub add err:", err)
}
err = order.InventoryReduction(begin)
if err != nil {
begin.Rollback()
logger.Error("err:", err)
if order.PostageType == 1 {
// 库存不足取消订单
orderSn := model.GetOrderSn()
memberRecord := &model.UserOpenMemberRecord{OpenNo: orderSn, OrderType: 2, Order: &order}
err = memberRecord.OrderRefund(outOrderNo)
if err != nil {
logger.Error("err:", err)
return
}
}
// TODO
if order.PostageType == 2 {
var userCoupon model.UserCoupon
err = model.NewUserCouponQuerySet(model.DB).ActivityTypeEq(3).UidEq(uint32(order.Uid)).
StateEq(2).OrderAscByID().Limit(1).One(&userCoupon)
if err != nil && err != model.RecordNotFound {
logger.Error("user coupon err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
err = model.NewUserCouponQuerySet(model.DB).IDEq(userCoupon.ID).GetUpdater().SetState(1).Update()
if err != nil {
logger.Error("user coupon err:", err)
}
}
_, err := model.NewOrderQuerySet(model.DB).IDEq(order.ID).GetUpdater().
SetCardStatus(OrderCardStatusCancel).UpdateNum()
if err != nil {
logger.Error("err:", err)
return
}
_, err = model.NewOrderCardQuerySet(model.DB).OrderIdEq(order.ID).GetUpdater().
SetCardStatus(OrderCardStatusCancel).UpdateNum()
if err != nil {
logger.Error("err:", err)
return
}
return
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("err:", err)
return
}
go model.ShoppingCartCreateOrderByOrder(order)
fundRecord.Uid = uint32(order.Uid)
fundRecord.FundType = model.FundTypeExpressFee
fundRecord.Remark = "借卡邮费"
}
if record.Attach == wxpay.WxPayMember {
logger.Info("开通会员 支付成功:")
logger.Info("用户uid:", outOrderNo)
remark := ""
if record.MemberLevel == 2 {
remark = "黄金会员费"
} else if record.MemberLevel == 4 {
remark = "白金会员费"
} else if record.MemberLevel == 5 {
remark = "黑金会员费"
}
fundRecord.Uid = uint32(record.Uid)
fundRecord.FundType = model.FundTypeMemberFee
fundRecord.Remark = remark
memberRecord := &model.UserMemberRecord{
Uid: record.Uid,
AfterMemberLevel: record.MemberLevel,
}
newTime := time.Now()
var spendType uint32
var user model.User
err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).One(&user)
if err != nil {
logger.Error("err:", err)
return
} else {
spendType = uint32(2)
if !user.OpenMemberTime.IsZero() {
spendType = 3
}
expireTime := newTime.AddDate(1, 0, 0)
if user.MemberExpire.After(newTime) {
expireTime = user.MemberExpire.AddDate(1, 0, 0)
}
memberRecord.BeforeMemberLevel = user.MemberLevel
memberRecord.BeforeMemberExpire = user.MemberExpire
memberRecord.Serial = uint32(user.MemberExpire.Unix())
memberRecord.AfterMemberExpire = expireTime
if user.IsMember() {
memberRecord.OpenMemberLevel = user.OpenMemberLevel
memberRecord.OpenMemberTime = user.OpenMemberTime
} else {
memberRecord.OpenMemberLevel = record.MemberLevel
memberRecord.OpenMemberTime = newTime
}
memberConfig, err := model.GetMemberConfig(record.MemberLevel)
if err != nil {
logger.Error("GetMemberConfig err:", err)
return
}
//openMemberTime := newTime
userUpdateQs := model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).
SetMemberExpire(expireTime).SetDeposit(memberConfig.MemberDeposit)
if user.OpenMemberTime.IsZero() {
//openMemberTime = user.OpenMemberTime
userUpdateQs = userUpdateQs.SetOpenMemberTime(newTime).SetOpenMemberLevel(record.MemberLevel)
memberRecord.Type = model.GetUserMemberRecordType(record.MemberLevel, 1)
} else {
memberRecord.Type = model.GetUserMemberRecordType(record.MemberLevel, 2)
}
_, err = userUpdateQs.UpdateNum()
if err != nil {
logger.Error("err:", err)
return
}
if record.UserCouponId > 0 {
err = model.NewUserCouponQuerySet(model.DB).IDEq(record.UserCouponId).GetUpdater().
SetState(2).SetUseTime(utils.Now()).Update()
if err != nil {
logger.Error("update user coupon state err:", err)
}
var userCoupon model.UserCoupon
err = model.NewUserCouponQuerySet(model.DB).IDEq(record.UserCouponId).One(&userCoupon)
if err != nil {
logger.Error("user coupon err:", err)
} else {
if userCoupon.Approach == 1 {
err = model.StorePromotion(userCoupon.PromotionalSales, userCoupon.Uid, nil, &user)
if err != nil {
logger.Error("store promotion err:", err)
}
}
}
}
// 邀请记录
var invite model.UserInvite
//err = model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).OrderDescByID().Limit(1).One(&invite)
err = model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).OrderDescByCreatedAt().Limit(1).One(&invite)
if err != nil && err != model.RecordNotFound {
logger.Error("err:", err)
} else {
//if err == model.RecordNotFound {
// userInvite := &model.UserInvite{
// FromUid: 0,
// UserType: 0,
// StoreId: 0,
// MemberOpenTime: newTime,
// MemberType: 2,
// ToUid: record.Uid,
// MemberStatus: 2,
// MemberLevel: record.MemberLevel,
// Action: 1,
// SpendType: 1,
// }
// err := userInvite.Create(model.DB)
// if err != nil {
// logger.Error("err:", err)
// }
// err = model.SendUserVm(record.Uid, record.MemberLevel, 100)
// if err != nil {
// logger.Error("send user vm err:", err)
// }
//}
if err == nil {
//qs := model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).GetUpdater()
if invite.Action != 2 {
qs := model.NewUserInviteQuerySet(model.DB).IDEq(invite.ID).GetUpdater()
// SpendType 类型
//if user.MemberLevel != 2 {
// qs = qs.SetMemberOpenTime(newTime).SetMemberLevel(record.MemberLevel)
//}
qs = qs.SetMemberOpenTime(newTime).SetMemberLevel(record.MemberLevel)
_, err = qs.SetMemberType(2).SetMemberStatus(2).
SetAction(2).SetSpendType(spendType).UpdateNum()
if err != nil {
logger.Error("update user invite action spend type err:", err)
}
if invite.UserInviteRecordId != 0 {
go func() {
err = model.NewUserInviteRecordQuerySet(model.DB).IDEq(invite.UserInviteRecordId).GetUpdater().
SetAction(2).SetSpendType(spendType).SetMemberLevel(record.MemberLevel).
SetActionTime(newTime).Update()
if err != nil {
logger.Error("update user invite record err:", err)
}
}()
}
} else {
inviteRecordNew := &model.UserInviteRecord{
ToUid: invite.ToUid,
FromUid: invite.FromUid,
Action: 2,
SpendType: spendType,
MemberLevel: record.MemberLevel,
First: 0,
Scan: 0, // 自动生成
ActionTime: newTime,
}
err = model.DB.Create(inviteRecordNew).Error
if err != nil {
logger.Error("create invite record err:", err)
}
userInviteNew := &model.UserInvite{
FromUid: invite.FromUid,
UserType: invite.UserType,
StoreId: invite.StoreId,
//MemberOpenTime: invite.MemberOpenTime,
MemberOpenTime: time.Now(),
MemberType: 2,
MemberStatus: 2,
ToUid: invite.ToUid,
StoreType: invite.StoreType,
Action: 2,
SpendType: spendType,
MemberLevel: record.MemberLevel,
UserInviteRecordId: inviteRecordNew.ID,
FirstInvite: 0,
}
err = model.DB.Create(userInviteNew).Error
if err != nil {
logger.Error("create invite record err:", err)
}
}
if invite.FromUid != 0 {
inviteUser := model.GetUserByUid(invite.FromUid)
if inviteUser != nil {
if inviteUser.UserType != 2 /*不是店员*/ && user.MemberLevel != 2 { // 邀请 新用户推送一次
err = model.SendUserVm(inviteUser.Uid, record.MemberLevel, 1)
if err != nil {
logger.Error("send user vm err:", err)
}
}
if spendType == 2 {
err = model.SendUserVm(user.Uid, record.MemberLevel, 0)
if err != nil {
logger.Error("send user vm err:", err)
}
}
openMemberChannel := model.OpenMemberChannelUserInvite
userQs := model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater()
if inviteUser.UserType == 2 {
openMemberChannel = model.OpenMemberChannelStorePromotion
if !user.OpenMemberTime.IsZero() {
userQs = userQs.SetCooperativeBusinessId(inviteUser.CooperativeBusinessId).
SetCooperativeName(inviteUser.CooperativeName)
fmt.Println("用户续费---")
model.AddCooperativeMemberRenewal(inviteUser.CooperativeBusinessId,
uint32(inviteUser.StoreId), inviteUser.Uid, int(record.MemberLevel))
} else {
fmt.Println("用户开通------")
model.AddCooperativeMemberPromotion(inviteUser.CooperativeBusinessId,
uint32(inviteUser.StoreId), inviteUser.Uid, int(record.MemberLevel))
}
}
_, err = userQs.SetOpenMemberChannel(openMemberChannel).UpdateNum()
if err != nil {
logger.Error("err:", err)
}
}
}
}
}
if user.MemberLevel != 2 {
}
go func() {
err = model.DB.Create(memberRecord).Error
if err != nil {
logger.Error("create member record err:", err)
}
}()
model.CreateUserRentCardByMemberLevel(record.Uid, record.MemberLevel, memberConfig.CardMax)
}
_, err = model.NewUserOpenMemberRecordQuerySet(model.DB).IDEq(record.ID).
GetUpdater().SetState(2).UpdateNum()
if err != nil {
logger.Error("update user open member record state:err", err)
}
fmt.Println("notify.TotalFee:", fundRecord.Amount)
fmt.Println("notify.OutTradeNo:", outOrderNo)
}
if record.Attach == wxpay.WxPayDeposit {
//record := &model.UserOpenMemberRecord{OpenNo: notifyInfo.OutTradeNo}
//err := record.GetByOpenNo()
//if err != nil {
// logger.Error("err:", err)
// return
//}
//if record.State == 2 {
// ret.ReturnCode = "SUCCESS"
// RespBodyXML(c, ret)
// return
//}
//if record.State != 2 {
user := model.GetUserByUid(record.Uid)
if user == nil {
logger.Error("user nil")
return
}
memberConfig, err := model.GetMemberConfig(user.MemberLevel)
if err != nil {
logger.Error("err:", err)
return
}
remark := ""
if user.MemberLevel == 2 {
remark = "黄金会员押金"
} else if user.MemberLevel == 4 {
remark = "白金会员押金"
} else if user.MemberLevel == 5 {
remark = "黑金会员押金"
}
fundRecord.Uid = uint32(record.Uid)
fundRecord.FundType = model.FundTypeMemberDeposit
fundRecord.Remark = remark
num, err := model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().
SetDeposit(memberConfig.MemberDeposit).UpdateNum()
if err != nil {
logger.Error("update deposit err:", err)
}
if num == 0 {
logger.Error("update deposit num is 0")
}
_, err = model.NewUserOpenMemberRecordQuerySet(model.DB).IDEq(record.ID).GetUpdater().SetState(2).UpdateNum()
if err != nil {
logger.Error("update user open member record state:err", err)
}
//}
}
if record.Attach == wxpay.WxPayBuyGoods {
_, err = model.NewGoodsOrderQuerySet(model.DB).SerialNoEq(outOrderNo).GetUpdater().
SetPayTime(time.Now()).
SetPayStatus(model.PayStatusOK).
SetState(model.GoodsOrderStateOnDeliver).UpdateNum()
if err != nil {
logger.Error("err:", err)
}
var goodsOrder model.GoodsOrder
err = model.NewGoodsOrderQuerySet(model.DB).SerialNoEq(outOrderNo).One(&goodsOrder)
if err != nil {
logger.Error("err:", err)
}
err = model.OrderUpdateGoodsStock(goodsOrder.GoodsAttributeId, goodsOrder.Quantity, model.DB)
if err != nil {
logger.Error("err:", err)
}
err = model.UserVmUpdate(goodsOrder.Uid, int(goodsOrder.Vm)*-1, model.VmEventBuyGoods, "购买商品积分抵扣")
if err != nil {
logger.Error("err:", err)
}
sub := model.DeliverTaskSub{
Uid: uint32(goodsOrder.Uid),
UserAddressId: uint32(goodsOrder.AddressId),
OrderType: 2,
OrderId: goodsOrder.OrderId,
StoreId: 13,
}
err = sub.Add()
if err != nil {
logger.Error("deliver task sub add err:", err)
}
fundRecord.Uid = uint32(goodsOrder.Uid)
fundRecord.FundType = model.FundTypeBuyGoods
fundRecord.Remark = "商城购买"
}
if record.Attach == wxpay.WxPayUpgradeMember {
//record := &model.UserOpenMemberRecord{OpenNo: notifyInfo.OutTradeNo}
//err := record.GetByOpenNo()
//if err != nil {
// logger.Error("err:", err)
//}
//if record.State == 2 {
// ret.ReturnCode = "SUCCESS"
// RespBodyXML(c, ret)
// return
//}
fmt.Println("UpgradeMember:", record.Uid)
var user model.User
err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).One(&user)
if err != nil {
logger.Error("user err:", err)
return
}
memberRecord := &model.UserMemberRecord{
Uid: record.Uid,
BeforeMemberLevel: user.MemberLevel,
AfterMemberLevel: record.MemberLevel,
BeforeMemberExpire: user.MemberExpire,
AfterMemberExpire: record.MemberExpire,
InviteUid: 0,
DeductionDays: record.DeductionDays,
DeductionFee: record.DeductionFee,
CouponId: record.UserCouponId,
Serial: uint32(user.MemberExpire.Unix()),
Type: model.GetUserMemberRecordType(record.MemberLevel, 3),
OpenMemberLevel: user.OpenMemberLevel,
OpenMemberTime: user.OpenMemberTime,
}
memberRecord.Add()
memberConfig, err := model.GetMemberConfig(record.MemberLevel)
if err != nil {
logger.Error("GetMemberConfig err:", err)
return
}
var fundRecordRecord model.FundRecord
err = model.NewFundRecordQuerySet(model.DB).UidEq(record.Uid).FundTypeEq(model.FundTypeMemberFee).
CreatedAtGte(time.Now().Add(-10 * time.Minute)).One(&fundRecordRecord)
if err == nil && fundRecordRecord.OutTradeNo != "" {
var userOpenMemberRecord model.UserOpenMemberRecord
err := model.NewUserOpenMemberRecordQuerySet(model.DB).OpenNoEq(fundRecordRecord.OutTradeNo).One(&userOpenMemberRecord)
if err != nil {
logger.Error("user open member record err:", err)
return
}
if userOpenMemberRecord.CreatedAt.After(record.CreatedAt) {
record.MemberExpire = record.MemberExpire.AddDate(1, 0, 0)
}
}
_, err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).
SetMemberExpire(record.MemberExpire).SetDeposit(memberConfig.MemberDeposit).UpdateNum()
//err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: record.MemberLevel, MemberExpire: expireTime, Deposit: memberConfig.MemberDeposit})
if err != nil {
logger.Error("err:", err)
return
}
// 添加会员时长 等级 借卡数量
var userRentCard model.UserRentCard
err = model.NewUserRentCardQuerySet(model.DB).UidEq(record.Uid).One(&userRentCard)
if err != nil {
logger.Error("err:", err)
return
}
_, err = model.NewUserRentCardQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).
SetLevelRentCount(memberConfig.CardMax).SetCanRentCount(memberConfig.CardMax - userRentCard.HaveRentCount).UpdateNum()
if err != nil {
logger.Error("err:", err)
return
}
model.CreateUserRentCardByMemberLevel(record.Uid, record.MemberLevel, memberConfig.CardMax)
if record.UserCouponId > 0 {
_, err = model.NewUserCouponQuerySet(model.DB).IDEq(record.UserCouponId).GetUpdater().
SetState(2).SetUseTime(utils.Now()).UpdateNum()
if err != nil {
logger.Error("update user coupon state err:", err)
}
}
_, err = model.NewUserOpenMemberRecordQuerySet(model.DB).IDEq(record.ID).GetUpdater().SetState(2).UpdateNum()
if err != nil {
logger.Error("update user open member record state:err", err)
}
fundRecord.Uid = uint32(record.Uid)
fundRecord.FundType = model.FundTypeUpgradeMember
fundRecord.Remark = "升级会员"
}
if record.Attach == wxpay.WxPayMemberExpireDelay {
//record := &model.UserOpenMemberRecord{OpenNo: notifyInfo.OutTradeNo}
//err := record.GetByOpenNo()
//if err != nil {
// logger.Error("err:", err)
// return
//}
//if record.State == 2 {
// ret.ReturnCode = "SUCCESS"
// RespBodyXML(c, ret)
// return
//}
var user model.User
err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).One(&user)
if err != nil {
logger.Error("err:", err)
return
}
_, err = model.NewUserMemberExpireDelayQuerySet(model.DB).UidEq(record.Uid).MemberExpireEq(user.MemberExpire).
GetUpdater().SetIsPay(1).UpdateNum()
if err != nil {
logger.Error("err:", err)
return
}
_, err = model.NewUserOpenMemberRecordQuerySet(model.DB).IDEq(record.ID).GetUpdater().SetState(2).UpdateNum()
if err != nil {
logger.Error("update user open member record state:err", err)
}
fundRecord.Uid = uint32(record.Uid)
fundRecord.FundType = model.FundTypeMemberExpireDelay
fundRecord.Remark = "会员过期滞纳金"
}
if record.Attach == wxpay.WxPayShareCardRetrieve {
//record := &model.UserOpenMemberRecord{OpenNo: notifyInfo.OutTradeNo}
//err := record.GetByOpenNo()
//if err != nil {
// logger.Error("err:", err)
//}
//if record.State == 2 {
// ret.ReturnCode = "SUCCESS"
// RespBodyXML(c, ret)
// return
//}
fmt.Println("UpgradeMember:", record.Uid)
_, err = model.NewShareCardRetrieveQuerySet(model.DB).IDEq(record.OrderId).
GetUpdater().SetPayState(2).UpdateNum()
if err != nil {
logger.Error("update pay state err:", err)
}
_, err = model.NewShareCardRetrieveCardQuerySet(model.DB).ShareCardRetrieveIdEq(record.OrderId).GetUpdater().
SetPayState(2).UpdateNum()
if err != nil {
logger.Error("update pay state err:", err)
}
var share model.ShareCardRetrieve
err = model.NewShareCardRetrieveQuerySet(model.DB).IDEq(record.ID).One(&share)
if err != nil {
log.Error().Msgf("share card retrieve err:%#v", err)
}
if err == nil {
sub := model.DeliverTaskSub{
Uid: share.Uid,
UserAddressId: share.AddressId,
OrderType: 3,
OrderId: share.ID,
}
err = sub.Add()
if err != nil {
logger.Error("deliver task sub add err:", err)
}
}
_, err = model.NewUserOpenMemberRecordQuerySet(model.DB).IDEq(record.ID).GetUpdater().SetState(2).UpdateNum()
if err != nil {
logger.Error("update user open member record state:err", err)
}
fundRecord.Uid = uint32(record.Uid)
fundRecord.FundType = model.FundTypeExpressFee
fundRecord.Remark = "共享卡收回卡快递费"
}
if record.Attach == wxpay.WxPayPostagePackage {
//record := &model.UserOpenMemberRecord{OpenNo: notifyInfo.OutTradeNo}
//err := record.GetByOpenNo()
//if err != nil {
// logger.Error("err:", err)
//}
//if record.State == 2 {
// ret.ReturnCode = "SUCCESS"
// RespBodyXML(c, ret)
// return
//}
var activity model.Activity
err = model.NewActivityQuerySet(model.DB).IDEq(3).One(&activity)
if err != nil {
logger.Error("coupon err:", err)
return
}
var coupon model.Coupon
err = model.NewCouponQuerySet(model.DB).ActivityTypeEq(activity.ActivityType).One(&coupon)
if err != nil {
logger.Error("coupon err:", err)
//ret.ReturnCode = "Error"
//RespBodyXML(c, ret)
RespOK(c, "Error")
return
}
defer func() {
if err := recover(); err != nil {
logger.Error("err:", err)
}
}()
//info, err := model.PostagePackageFeeConfigInfo()
//if err != nil {
// logger.Error("postage package fee config err")
// ret.ReturnCode = "Error"
// RespBodyXML(c, ret)
// return
//}
//originalMemberConfig, err := model.GetMemberConfig(record.MemberLevel)
//if err != nil {
// logger.Error("err:", err)
// ret.ReturnCode = "Error"
// RespBodyXML(c, ret)
// return
//}
//days := (info.PostagePackageFee * 365) / originalMemberConfig.MemberFee
user := model.GetUserByUid(record.Uid)
days := model.GetPostagePackageMemberDuration(user.MemberLevel)
durationRecord := &model.UserMemberDurationRecord{
Uid: record.Uid,
Duration: days,
EventType: 1,
MemberLevel: record.MemberLevel,
}
nowTime := time.Now()
go func() {
begin := model.DB.Begin()
for i := 0; i < 10; i++ {
userCoupon := &model.UserCoupon{
Uid: record.Uid,
CouponId: coupon.ID,
CouponType: coupon.CouponType,
ActivityType: activity.ActivityType,
ActivityId: activity.ID,
Value: coupon.Value,
State: 1,
ActiveStart: nowTime,
ActiveEnd: nowTime.AddDate(10, 0, 0),
MemberLevel: record.MemberLevel,
}
err = begin.Create(userCoupon).Error
if err != nil {
begin.Rollback()
logger.Error("user coupon err:", err)
return
}
}
memberExpire := user.MemberExpire.AddDate(0, 0, int(days))
err := model.NewUserQuerySet(begin).UidEq(record.Uid).GetUpdater().SetMemberExpire(memberExpire).Update()
if err != nil {
begin.Rollback()
logger.Error("update member expire err:", err)
return
}
err = begin.Create(durationRecord).Error
if err != nil {
logger.Error("create duration record err:", err)
return
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", err)
return
}
}()
fundRecord.Uid = uint32(record.Uid)
fundRecord.FundType = model.FundTypePostagePackageFee
fundRecord.Remark = "购买运费包"
}
fundRecord.TransactionId = bankOrderNo
fundRecord.OutTradeNo = outOrderNo
fundRecord.Status = 2
err = model.DB.Create(&fundRecord).Error
if err != nil {
logger.Error("create fund record err:", err)
}
logger.Debug("微信推动支付通知")
RespOK(c, "SUCCESS")
}
type WxPayRefundPlaintext struct {
Mchid string `json:"mchid"`
OutTradeNo string `json:"out_trade_no"`

View File

@ -289,15 +289,21 @@ func MallOrderCreate(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
webPay, err := wxpay.WebPay(order.SerialNo, order.Rm, user.WxOpenID, "N",
wxpay.WxPayBuyGoods, configInfo.NotifyUrl)
//webPay, err := wxpay.WebPay(order.SerialNo, order.Rm, user.WxOpenID, "N",
// wxpay.WxPayBuyGoods, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: order.SerialNo, OrderId: order.OrderId, OrderType: 6, Attach: wxpay.WxPayBuyGoods}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: order.SerialNo, OrderId: order.OrderId, OrderType: 6}.Insert()
webPay, err := wxpay.HmJsPayUnifiedOrder(order.SerialNo, order.Rm, user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)

View File

@ -497,13 +497,26 @@ func RentCardOrderCreate(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
webPay, err := wxpay.WebPay(order.OrderSn, req.Price, user.WxOpenID, "N", wxpay.WxPayRentCard, configInfo.NotifyUrl)
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, OrderId: order.ID, OrderType: 1, Attach: wxpay.WxPayRentCard}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
//webPay, err := wxpay.WebPay(order.OrderSn, req.Price, user.WxOpenID, "N", wxpay.WxPayRentCard, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
webPay, err := wxpay.HmJsPayUnifiedOrder(order.OrderSn, req.Price, user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
//webPay, err := wxpay.HmJsPayUnifiedOrder(order.OrderSn, req.Price, user.WxOpenID, "N", wxpay.WxPayRentCard, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
@ -524,13 +537,6 @@ func RentCardOrderCreate(c *gin.Context) {
// return
//}
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, OrderId: order.ID, OrderType: 1}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
ret := map[string]interface{}{
"web_pay": webPay,
"order_id": order.ID,
@ -681,7 +687,21 @@ func OrderPay(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
webPay, err := wxpay.WebPay(order.OrderSn, order.PayPrice, user.WxOpenID, "N", wxpay.WxPayRentCard, configInfo.NotifyUrl)
//webPay, err := wxpay.WebPay(order.OrderSn, order.PayPrice, user.WxOpenID, "N", wxpay.WxPayRentCard, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
orderSn := model.GetOrderSn()
err = model.UserOpenMemberRecord{Uid: uint32(order.Uid), OpenNo: orderSn, OrderId: order.ID, OrderType: 1, Attach: wxpay.WxPayRentCard}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
webPay, err := wxpay.HmJsPayUnifiedOrder(order.OrderSn, order.PayPrice, user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)

View File

@ -307,7 +307,7 @@ func OpenMember(c *gin.Context) {
//orderSn := utils.GetSerialNo32HEXString()
orderSn := model.GetOrderSn()
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: req.MemberLevel,
UserCouponId: req.UserCouponId}.Insert()
UserCouponId: req.UserCouponId, Attach: wxpay.WxPayMember}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
@ -326,7 +326,7 @@ func OpenMember(c *gin.Context) {
// return
//}
webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayRentCard, configInfo.NotifyUrl)
webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, totalFee, user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
@ -498,7 +498,7 @@ func UpgradeMember(c *gin.Context) {
orderSn := model.GetOrderSn()
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn,
MemberLevel: req.MemberLevel, OrderType: 9, MemberExpire: memberExpire,
UserCouponId: req.UserCouponId}.Insert()
UserCouponId: req.UserCouponId, Attach: wxpay.WxPayUpgradeMember}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
@ -510,14 +510,19 @@ func UpgradeMember(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
webPay, err := wxpay.WebPay(orderSn, uint32(totalFee), user.WxOpenID, "N", wxpay.WxPayUpgradeMember,
configInfo.NotifyUrl)
//webPay, err := wxpay.WebPay(orderSn, uint32(totalFee), user.WxOpenID, "N", wxpay.WxPayUpgradeMember,
// configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, uint32(totalFee), user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, webPay)
}
@ -671,7 +676,7 @@ func PayDeposit(c *gin.Context) {
user := model.GetUserByUid(uc.Uid)
orderSn := model.GetOrderSn()
err := model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn}.Insert()
err := model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, Attach: wxpay.WxPayDeposit}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
@ -706,13 +711,18 @@ func PayDeposit(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
webPay, err := wxpay.WebPay(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayDeposit, configInfo.NotifyUrl)
//webPay, err := wxpay.WebPay(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayDeposit, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, totalFee, user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, webPay)
}
@ -862,19 +872,25 @@ func UserMemberExpireDelayingPay(c *gin.Context) {
return
}
orderSn := model.GetOrderSn()
webPay, err := wxpay.WebPay(orderSn, uint32(userMemberExpireDelay.DelayAmount), user.WxOpenID, "N", wxpay.WxPayMemberExpireDelay, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, OrderId: 0, OrderType: 3}.Insert()
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, OrderId: 0, OrderType: 3, Attach: wxpay.WxPayMemberExpireDelay}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
//webPay, err := wxpay.WebPay(orderSn, uint32(userMemberExpireDelay.DelayAmount), user.WxOpenID, "N", wxpay.WxPayMemberExpireDelay, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, uint32(userMemberExpireDelay.DelayAmount), user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
ret := make(map[string]interface{}, 0)
ret["is_surrender"] = 1
ret["expire_days"] = userMemberExpireDelay.ExpireDays

View File

@ -410,14 +410,19 @@ func ShareCardRetrieveCreate(c *gin.Context) {
RespJson(c, status.InternalServerError, nil)
return
}
webPay, err := wxpay.WebPay(retrieve.OrderSn, req.Amount, user.WxOpenID, "N", wxpay.WxPayShareCardRetrieve, configInfo.NotifyUrl)
//webPay, err := wxpay.WebPay(retrieve.OrderSn, req.Amount, user.WxOpenID, "N", wxpay.WxPayShareCardRetrieve, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: retrieve.OrderSn, OrderId: retrieve.ID, OrderType: 1, Attach: wxpay.WxPayShareCardRetrieve}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: retrieve.OrderSn, OrderId: retrieve.ID, OrderType: 1}.Insert()
webPay, err := wxpay.HmJsPayUnifiedOrder(retrieve.OrderSn, req.Amount, user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)

View File

@ -1039,7 +1039,7 @@ type HmPayUnifiedOrderRsp struct {
}
//hm 微信支付
func HmJsPayUnifiedOrder(orderId string, totalFee uint32, openId, profitSharing, attach, notifyUrl string) (*HmPayUnifiedOrderPayData, error) {
func HmJsPayUnifiedOrder(orderId string, totalFee uint32, openId, notifyUrl string) (*HmPayUnifiedOrderPayData, error) {
now := time.Now().Local()
strTime := fmt.Sprintf("%04d%02d%02d%02d%02d%02d", now.Year(), now.Month(), now.Day(), now.Hour(),
now.Minute(), now.Second())

View File

@ -5,9 +5,11 @@ import (
"errors"
"fmt"
"github.com/codinl/go-logger"
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
"github.com/rs/zerolog/log"
"mh-server/lib/utils"
"net/url"
"sort"
"strconv"
"strings"
@ -1070,3 +1072,51 @@ func UpdateDeliverTaskSubStateCancel(orderId uint32) {
// logger.Error("commit err:", err)
//}
}
func ParaToSubstance(c *gin.Context, sign string) (string, error) {
urlString := c.Request.URL.String()
urlPara, err := url.QueryUnescape(urlString)
if err != nil {
return "", errors.New("url query unescape err")
}
if !strings.Contains(urlPara, "/api/v1/wxpay/notice?") {
return "", errors.New("url err")
}
para := strings.Replace(urlPara, "/api/v1/wxpay/notice?", "", -1)
//fmt.Println("para--", para)
conspire := strings.Split(para, "&")
signConspire := make([]string, 0, len(conspire))
for i, _ := range conspire {
if !strings.Contains(conspire[i], "sign=") {
//fmt.Println("conspire---------", conspire[i])
signConspire = append(signConspire, conspire[i])
}
}
sort.Strings(signConspire)
//signDataJson2, _ := json.MarshalIndent(&signData, "", " ")
//fmt.Println("signDataJson2", string(signDataJson2))
signStr := strings.Join(signConspire, "&")
//signStr = signStr + "&key=" + payKey
logger.Info("签字符串1 :", signStr)
return signStr, nil
}
//paramMap := make(map[string]string, 0)
//appId := c.Param("app_id")
//bankTrxNo := c.Param("bank_trx_no")
//bankWayCode := c.Param("bank_way_code")
//buyerId := c.Param("buyer_id")
//billDetail := c.Param("buyer_trade_fund_bill_detail")
//notifyType := c.Param("notify_type")
//payModeCode := c.Param("pay_mode_code")
//paySuccessTime := c.Param("pay_success_time")
//payWayCode := c.Param("pay_way_code")
//platTrxNo := c.Param("plat_trx_no")
//settleAmount := c.Param("settle_amount")
//settleAppId := c.Param("settle_app_id")
//signType := c.Param("sign_type")

View File

@ -164,6 +164,7 @@ func InitTestDB() {
&UserActionLog{},
&UserCoupon{},
&ShopperPromotionCode{},
&UserOpenMemberRecord{},
)
fmt.Println("DB init success")
@ -211,6 +212,7 @@ func InitDBProd() {
&ShopperPromotionCode{},
&UserCoupon{},
&UserOpenMemberRecord{},
)
if err := DBProd.DB().Ping(); err != nil {
@ -2114,7 +2116,7 @@ func TestSha1withRsa(t *testing.T) {
}
func TestHmJsPayUnifiedOrder(t *testing.T) {
order, err := wxpay.HmJsPayUnifiedOrder("84FDC15BCC", 2, "ohuHh4riVVPxwKHrYHsWwZRpxVMk", "N", wxpay.WxPayRentCard, "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice")
order, err := wxpay.HmJsPayUnifiedOrder("84FDC15BCC", 2, "ohuHh4riVVPxwKHrYHsWwZRpxVMk", "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice")
if err != nil {
fmt.Println("err:", err)
}

View File

@ -288,7 +288,7 @@ type UserOpenMemberRecord struct {
Order *Order `json:"order" gorm:"-"`
ShareCardRetrieve *ShareCardRetrieve `json:"share_card_retrieve" gorm:"-"`
GoodsOrder *GoodsOrder `json:"goods_order" gorm:"-"`
//Attach string `json:"attach"`
Attach string `json:"attach"`
}
func (o *UserOpenMemberRecord) TableName() string {

View File

@ -30,7 +30,8 @@ func ConfigAppRouter(r gin.IRouter) {
// //api.POST("sys/config", controller.SysConfig) // 配置
// api.POST("step/config", controller.StepConfig) // 步数配置
// //api.POST("upload_user_info", controller.UploadUserInfo) // 上传用户信息
api.POST("wxpay/notice", controller.PushWXPayNotice) // 微信推送支付通知
//api.POST("wxpay/notice", controller.PushWXPayNotice) // 微信推送支付通知
api.GET("wxpay/notice", controller.HmPushWXPayNotice) // 微信推送支付通知
api.POST("wxpay_refund/notice", controller.PushWXPayRefundNotice) // 微信推送支付退款通知
api.POST("aliyun/sts_token", controller.AliyunStsTokenGet) // 阿里云上传图片token
api.POST("auto_reply/focus", controller.AutoReplyFocusMsg) // 自动回复