修改了退款相关接口
This commit is contained in:
parent
99320a018c
commit
68adc70ba6
@ -4,8 +4,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/services/payments/app"
|
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/services/payments/jsapi"
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"hepa-calc-admin-api/api/dao"
|
"hepa-calc-admin-api/api/dao"
|
||||||
"hepa-calc-admin-api/api/model"
|
"hepa-calc-admin-api/api/model"
|
||||||
@ -41,10 +39,6 @@ func (r *OrderMemberService) CancelOrderMember(tx *gorm.DB, orderMember *model.O
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 订单状态(1:待支付 2:已完成 3:已取消)
|
// 订单状态(1:待支付 2:已完成 3:已取消)
|
||||||
if orderMember.OrderStatus == 2 {
|
|
||||||
return false, errors.New("订单已完成,无法取消")
|
|
||||||
}
|
|
||||||
|
|
||||||
if orderMember.OrderStatus == 3 {
|
if orderMember.OrderStatus == 3 {
|
||||||
return false, errors.New("订单已取消,请勿重复操作")
|
return false, errors.New("订单已取消,请勿重复操作")
|
||||||
}
|
}
|
||||||
@ -54,11 +48,6 @@ func (r *OrderMemberService) CancelOrderMember(tx *gorm.DB, orderMember *model.O
|
|||||||
return false, errors.New("订单已取消")
|
return false, errors.New("订单已取消")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
|
|
||||||
if orderMember.PayStatus == 2 {
|
|
||||||
return false, errors.New("订单已支付,无法取消")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款)
|
// 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款)
|
||||||
if orderMember.RefundStatus == 1 {
|
if orderMember.RefundStatus == 1 {
|
||||||
return false, errors.New("订单已申请退款")
|
return false, errors.New("订单已申请退款")
|
||||||
@ -77,6 +66,8 @@ func (r *OrderMemberService) CancelOrderMember(tx *gorm.DB, orderMember *model.O
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 修改订单为取消
|
// 修改订单为取消
|
||||||
|
orderMemberDao := dao.OrderMemberDao{}
|
||||||
|
|
||||||
orderMemberData := make(map[string]interface{})
|
orderMemberData := make(map[string]interface{})
|
||||||
orderMemberData["order_status"] = 3
|
orderMemberData["order_status"] = 3
|
||||||
if cancelReason == 3 {
|
if cancelReason == 3 {
|
||||||
@ -86,112 +77,29 @@ func (r *OrderMemberService) CancelOrderMember(tx *gorm.DB, orderMember *model.O
|
|||||||
orderMemberData["cancel_status"] = 1
|
orderMemberData["cancel_status"] = 1
|
||||||
orderMemberData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05")
|
orderMemberData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05")
|
||||||
orderMemberData["cancel_remarks"] = utils.OrderCancelReasonToString(cancelReason)
|
orderMemberData["cancel_remarks"] = utils.OrderCancelReasonToString(cancelReason)
|
||||||
orderMemberData["updated_at"] = time.Now().Format("2006-01-02 15:04:05")
|
|
||||||
|
|
||||||
orderMemberDao := dao.OrderMemberDao{}
|
|
||||||
err = orderMemberDao.EditOrderMemberById(tx, orderMember.OrderId, orderMemberData)
|
err = orderMemberDao.EditOrderMemberById(tx, orderMember.OrderId, orderMemberData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, errors.New("订单取消失败")
|
return false, errors.New("订单取消失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 退还订单优惠卷
|
|
||||||
if orderMember.CouponAmountTotal != 0 {
|
|
||||||
// 获取订单优惠卷数据
|
|
||||||
orderMemberCouponDao := dao.OrderMemberCouponDao{}
|
|
||||||
orderMemberCoupon, err := orderMemberCouponDao.GetOrderMemberCouponByOrderId(orderMember.OrderId)
|
|
||||||
if err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
return false, errors.New("订单取消失败")
|
|
||||||
}
|
|
||||||
|
|
||||||
userCouponService := &UserCouponService{}
|
|
||||||
userCouponService.ReturnUserCoupon(tx, orderMemberCoupon.UserCouponId)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 退还订单优惠卷
|
|
||||||
err = r.OrderCouponRefund(tx, orderMember)
|
|
||||||
if err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 订单退款
|
// 订单退款
|
||||||
_, err = r.OrderRefund(tx, orderMember, refundAmount, utils.OrderCancelReasonToString(cancelReason))
|
_, err = r.OrderRefund(tx, orderMember, refundAmount, utils.OrderCancelReasonToString(cancelReason))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tx.Rollback()
|
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理支付金额为0时退还优惠卷问题
|
||||||
|
if orderMember.PaymentAmountTotal == 0 {
|
||||||
|
// 退还订单优惠卷
|
||||||
|
err = r.OrderCouponRefund(tx, orderMember)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetJsapiPrepay 获取jsapi预支付交易会话标识
|
|
||||||
func (r *OrderMemberService) GetJsapiPrepay(m *model.OrderMember) (prepay *jsapi.PrepayWithRequestPaymentResponse, err error) {
|
|
||||||
// 获取用户数据
|
|
||||||
userDao := dao.UserDao{}
|
|
||||||
user, err := userDao.GetUserById(m.UserId)
|
|
||||||
if err != nil || user == nil {
|
|
||||||
return nil, errors.New("用户错误")
|
|
||||||
}
|
|
||||||
|
|
||||||
if user.OpenId != "" {
|
|
||||||
return nil, errors.New("发起支付失败")
|
|
||||||
}
|
|
||||||
|
|
||||||
jsapiRequest := weChat.JsapiRequest{
|
|
||||||
AppId: config.C.Wechat.AppId,
|
|
||||||
MchId: config.C.Wechat.Pay1281030301.MchId,
|
|
||||||
Description: "肝病算一算",
|
|
||||||
OutTradeNo: m.OrderNo,
|
|
||||||
NotifyUrl: config.C.Wechat.RefundNotifyDomain + config.C.Wechat.MemberRefundNotifyUrl,
|
|
||||||
Amount: weChat.JsapiRequestAmountRequest{
|
|
||||||
Total: int64(m.PaymentAmountTotal * 100),
|
|
||||||
Currency: "CNY",
|
|
||||||
},
|
|
||||||
Payer: weChat.JsapiRequestPayerRequest{OpenId: user.OpenId},
|
|
||||||
}
|
|
||||||
|
|
||||||
prepay, err = jsapiRequest.GetJsapiPrepay()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return prepay, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetAppPrepay 获取app预支付交易会话标识
|
|
||||||
func (r *OrderMemberService) GetAppPrepay(m *model.OrderMember) (prepay *app.PrepayWithRequestPaymentResponse, err error) {
|
|
||||||
// 获取用户数据
|
|
||||||
userDao := dao.UserDao{}
|
|
||||||
user, err := userDao.GetUserById(m.UserId)
|
|
||||||
if err != nil || user == nil {
|
|
||||||
return nil, errors.New("用户错误")
|
|
||||||
}
|
|
||||||
|
|
||||||
if user.OpenId != "" {
|
|
||||||
return nil, errors.New("发起支付失败")
|
|
||||||
}
|
|
||||||
|
|
||||||
appRequest := weChat.AppRequest{
|
|
||||||
AppId: config.C.Wechat.AppId,
|
|
||||||
MchId: config.C.Wechat.Pay1281030301.MchId,
|
|
||||||
Description: "肝病算一算",
|
|
||||||
OutTradeNo: m.OrderNo,
|
|
||||||
NotifyUrl: config.C.Wechat.RefundNotifyDomain + config.C.Wechat.MemberRefundNotifyUrl,
|
|
||||||
Amount: weChat.AppRequestAmountRequest{
|
|
||||||
Total: int64(m.PaymentAmountTotal * 100),
|
|
||||||
Currency: "CNY",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
prepay, err = appRequest.GetAppPrepay()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return prepay, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// OrderRefund 订单退款
|
// OrderRefund 订单退款
|
||||||
func (r *OrderMemberService) OrderRefund(tx *gorm.DB, order *model.OrderMember, refundAmount *float64, refundReason string) (*model.OrderMemberRefund, error) {
|
func (r *OrderMemberService) OrderRefund(tx *gorm.DB, order *model.OrderMember, refundAmount *float64, refundReason string) (*model.OrderMemberRefund, error) {
|
||||||
var refundStatus int
|
var refundStatus int
|
||||||
|
|||||||
@ -4,8 +4,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/services/payments/app"
|
|
||||||
"github.com/wechatpay-apiv3/wechatpay-go/services/payments/jsapi"
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"hepa-calc-admin-api/api/dao"
|
"hepa-calc-admin-api/api/dao"
|
||||||
"hepa-calc-admin-api/api/model"
|
"hepa-calc-admin-api/api/model"
|
||||||
@ -41,10 +39,6 @@ func (r *OrderSingleService) CancelOrderSingle(tx *gorm.DB, orderSingle *model.O
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 订单状态(1:待支付 2:已完成 3:已取消)
|
// 订单状态(1:待支付 2:已完成 3:已取消)
|
||||||
if orderSingle.OrderStatus == 2 {
|
|
||||||
return false, errors.New("订单已完成,无法取消")
|
|
||||||
}
|
|
||||||
|
|
||||||
if orderSingle.OrderStatus == 3 {
|
if orderSingle.OrderStatus == 3 {
|
||||||
return false, errors.New("订单已取消,请勿重复操作")
|
return false, errors.New("订单已取消,请勿重复操作")
|
||||||
}
|
}
|
||||||
@ -54,11 +48,6 @@ func (r *OrderSingleService) CancelOrderSingle(tx *gorm.DB, orderSingle *model.O
|
|||||||
return false, errors.New("订单已取消")
|
return false, errors.New("订单已取消")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
|
|
||||||
if orderSingle.PayStatus == 2 {
|
|
||||||
return false, errors.New("订单已支付,无法取消")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款)
|
// 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常 7:部分退款)
|
||||||
if orderSingle.RefundStatus == 1 {
|
if orderSingle.RefundStatus == 1 {
|
||||||
return false, errors.New("订单已申请退款")
|
return false, errors.New("订单已申请退款")
|
||||||
@ -77,6 +66,8 @@ func (r *OrderSingleService) CancelOrderSingle(tx *gorm.DB, orderSingle *model.O
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 修改订单为取消
|
// 修改订单为取消
|
||||||
|
orderSingleDao := dao.OrderSingleDao{}
|
||||||
|
|
||||||
orderSingleData := make(map[string]interface{})
|
orderSingleData := make(map[string]interface{})
|
||||||
orderSingleData["order_status"] = 3
|
orderSingleData["order_status"] = 3
|
||||||
if cancelReason == 3 {
|
if cancelReason == 3 {
|
||||||
@ -86,130 +77,21 @@ func (r *OrderSingleService) CancelOrderSingle(tx *gorm.DB, orderSingle *model.O
|
|||||||
orderSingleData["cancel_status"] = 1
|
orderSingleData["cancel_status"] = 1
|
||||||
orderSingleData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05")
|
orderSingleData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05")
|
||||||
orderSingleData["cancel_remarks"] = utils.OrderCancelReasonToString(cancelReason)
|
orderSingleData["cancel_remarks"] = utils.OrderCancelReasonToString(cancelReason)
|
||||||
orderSingleData["updated_at"] = time.Now().Format("2006-01-02 15:04:05")
|
|
||||||
|
|
||||||
orderSingleDao := dao.OrderSingleDao{}
|
|
||||||
err = orderSingleDao.EditOrderSingleById(tx, orderSingle.OrderId, orderSingleData)
|
err = orderSingleDao.EditOrderSingleById(tx, orderSingle.OrderId, orderSingleData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, errors.New("订单取消失败")
|
return false, errors.New("订单取消失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 退还订单优惠卷
|
|
||||||
err = r.OrderCouponRefund(tx, orderSingle)
|
|
||||||
if err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 订单退款
|
// 订单退款
|
||||||
_, err = r.OrderRefund(tx, orderSingle, refundAmount, utils.OrderCancelReasonToString(cancelReason))
|
_, err = r.OrderRefund(tx, orderSingle, refundAmount, utils.OrderCancelReasonToString(cancelReason))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tx.Rollback()
|
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return true, nil
|
// 处理支付金额为0时退还优惠卷问题
|
||||||
}
|
if orderSingle.PaymentAmountTotal == 0 {
|
||||||
|
// 退还订单优惠卷
|
||||||
// GetJsapiPrepay 获取jsapi预支付交易会话标识
|
err = r.OrderCouponRefund(tx, orderSingle)
|
||||||
func (r *OrderSingleService) GetJsapiPrepay(m *model.OrderSingle) (prepay *jsapi.PrepayWithRequestPaymentResponse, err error) {
|
|
||||||
// 获取用户数据
|
|
||||||
userDao := dao.UserDao{}
|
|
||||||
user, err := userDao.GetUserById(m.UserId)
|
|
||||||
if err != nil || user == nil {
|
|
||||||
return nil, errors.New("用户错误")
|
|
||||||
}
|
|
||||||
|
|
||||||
if user.OpenId == "" {
|
|
||||||
return nil, errors.New("发起支付失败")
|
|
||||||
}
|
|
||||||
|
|
||||||
jsapiRequest := weChat.JsapiRequest{
|
|
||||||
AppId: config.C.Wechat.AppId,
|
|
||||||
MchId: config.C.Wechat.Pay1281030301.MchId,
|
|
||||||
Description: "肝病算一算",
|
|
||||||
OutTradeNo: m.OrderNo,
|
|
||||||
NotifyUrl: config.C.Wechat.RefundNotifyDomain + config.C.Wechat.SingleRefundNotifyUrl,
|
|
||||||
Amount: weChat.JsapiRequestAmountRequest{
|
|
||||||
Total: int64(m.PaymentAmountTotal * 100),
|
|
||||||
Currency: "CNY",
|
|
||||||
},
|
|
||||||
Payer: weChat.JsapiRequestPayerRequest{OpenId: user.OpenId},
|
|
||||||
}
|
|
||||||
|
|
||||||
prepay, err = jsapiRequest.GetJsapiPrepay()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return prepay, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetAppPrepay 获取app预支付交易会话标识
|
|
||||||
func (r *OrderSingleService) GetAppPrepay(m *model.OrderSingle) (prepay *app.PrepayWithRequestPaymentResponse, err error) {
|
|
||||||
// 获取用户数据
|
|
||||||
userDao := dao.UserDao{}
|
|
||||||
user, err := userDao.GetUserById(m.UserId)
|
|
||||||
if err != nil || user == nil {
|
|
||||||
return nil, errors.New("用户错误")
|
|
||||||
}
|
|
||||||
|
|
||||||
if user.OpenId == "" {
|
|
||||||
return nil, errors.New("发起支付失败")
|
|
||||||
}
|
|
||||||
|
|
||||||
appRequest := weChat.AppRequest{
|
|
||||||
AppId: config.C.Wechat.AppId,
|
|
||||||
MchId: config.C.Wechat.Pay1281030301.MchId,
|
|
||||||
Description: "肝病算一算",
|
|
||||||
OutTradeNo: m.OrderNo,
|
|
||||||
NotifyUrl: config.C.Wechat.RefundNotifyDomain + config.C.Wechat.SingleRefundNotifyUrl,
|
|
||||||
Amount: weChat.AppRequestAmountRequest{
|
|
||||||
Total: int64(m.PaymentAmountTotal * 100),
|
|
||||||
Currency: "CNY",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
prepay, err = appRequest.GetAppPrepay()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return prepay, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// CompleteUnPayOrderSingle 完成未支付单项订单-开通会员成功时使用
|
|
||||||
func (r *OrderSingleService) CompleteUnPayOrderSingle(tx *gorm.DB, userId int64) (bool, error) {
|
|
||||||
// 获取所有未支付单项订单
|
|
||||||
orderSingleDao := dao.OrderSingleDao{}
|
|
||||||
maps := make(map[string]interface{})
|
|
||||||
maps["user_id"] = userId
|
|
||||||
maps["order_status"] = 1
|
|
||||||
maps["pay_status"] = 1
|
|
||||||
maps["cancel_status"] = 0
|
|
||||||
orderSingles, err := orderSingleDao.GetOrderSingleList(maps)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, single := range orderSingles {
|
|
||||||
// 生成第三方支付流水号
|
|
||||||
escrowTradeNo := "GD" + global.Snowflake.Generate().String()
|
|
||||||
|
|
||||||
orderSingleData := make(map[string]interface{})
|
|
||||||
orderSingleData["order_status"] = 2
|
|
||||||
orderSingleData["pay_status"] = 2
|
|
||||||
orderSingleData["pay_time"] = time.Now().Format("2006-01-02 15:04:05")
|
|
||||||
orderSingleData["escrow_trade_no"] = escrowTradeNo
|
|
||||||
orderSingleData["updated_at"] = time.Now().Format("2006-01-02 15:04:05")
|
|
||||||
err = orderSingleDao.EditOrderSingleById(tx, single.OrderId, orderSingleData)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 增加题目支付次数
|
|
||||||
questionDao := dao.QuestionDao{}
|
|
||||||
err = questionDao.Inc(tx, single.QuestionId, "pay_count", 1)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@ -302,7 +184,7 @@ func (r *OrderSingleService) OrderRefund(tx *gorm.DB, order *model.OrderSingle,
|
|||||||
orderSingleRefundDao := dao.OrderSingleRefundDao{}
|
orderSingleRefundDao := dao.OrderSingleRefundDao{}
|
||||||
orderSingleRefund, err := orderSingleRefundDao.AddOrderSingleRefund(tx, orderRefund)
|
orderSingleRefund, err := orderSingleRefundDao.AddOrderSingleRefund(tx, orderRefund)
|
||||||
if err != nil || orderSingleRefund == nil {
|
if err != nil || orderSingleRefund == nil {
|
||||||
return nil, errors.New(err.Error())
|
return nil, errors.New("退款失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
return orderSingleRefund, nil
|
return orderSingleRefund, nil
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user