f
This commit is contained in:
87
app/main/api/internal/logic/pay/xpay_deliver.go
Normal file
87
app/main/api/internal/logic/pay/xpay_deliver.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package pay
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"qnc-server/app/main/api/internal/service"
|
||||
"qnc-server/app/main/api/internal/svc"
|
||||
"qnc-server/app/main/model"
|
||||
)
|
||||
|
||||
// XpayDeliverResult 同步 xpay 支付状态(查微信单 → 本地到账 → 异步查报告)
|
||||
type XpayDeliverResult struct {
|
||||
Credited bool `json:"credited"`
|
||||
Notified bool `json:"notified"`
|
||||
WechatDetail string `json:"wechat_detail"`
|
||||
Errors []string `json:"errors"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
// DeliverXpayQueryOrder 按商户订单号同步微信虚拟支付到账(不通知微信发货,发货在报告成功后)
|
||||
func DeliverXpayQueryOrder(ctx context.Context, svcCtx *svc.ServiceContext, orderNo string) (*XpayDeliverResult, error) {
|
||||
order, err := svcCtx.OrderModel.FindOneByOrderNo(ctx, orderNo)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp := &XpayDeliverResult{WechatDetail: "ok"}
|
||||
|
||||
if order.Status == model.OrderStatusPaid {
|
||||
resp.Message = "订单已支付,无需同步"
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
if !model.IsXpayOrder(order) {
|
||||
resp.Errors = append(resp.Errors, "非小程序虚拟支付订单")
|
||||
resp.Message = "非小程序虚拟支付订单"
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
if svcCtx.XpayService == nil || !svcCtx.XpayService.Enabled() {
|
||||
resp.Errors = append(resp.Errors, "虚拟支付未启用")
|
||||
resp.Message = "虚拟支付未启用"
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
openid, err := svcCtx.XpayService.GetWxMiniOpenID(ctx, svcCtx.UserAuthModel, order.UserId)
|
||||
if err != nil {
|
||||
resp.Errors = append(resp.Errors, err.Error())
|
||||
resp.Message = "获取用户 openid 失败"
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
status, qErr := svcCtx.XpayService.QueryOrder(ctx, openid, order.OrderNo, "")
|
||||
if qErr != nil {
|
||||
resp.Errors = append(resp.Errors, qErr.Error())
|
||||
resp.WechatDetail = qErr.Error()
|
||||
resp.Message = "查询微信订单失败"
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
if !service.IsXpayPaidStatus(status.Status) {
|
||||
resp.Errors = append(resp.Errors, "微信侧订单未支付")
|
||||
resp.Message = "微信侧订单未支付"
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
platformOrderID := status.WxOrderID
|
||||
credited, fulfillErr := fulfillQueryOrderPaid(ctx, svcCtx, order, platformOrderID, status.PaidFee)
|
||||
resp.Credited = credited
|
||||
if fulfillErr != nil {
|
||||
resp.Errors = append(resp.Errors, fulfillErr.Error())
|
||||
}
|
||||
|
||||
resp.Message = buildXpayDeliverMessage(resp)
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func buildXpayDeliverMessage(r *XpayDeliverResult) string {
|
||||
if len(r.Errors) > 0 {
|
||||
return strings.Join(r.Errors, ";")
|
||||
}
|
||||
if r.Credited {
|
||||
return "同步成功,订单已到账并开始查询报告"
|
||||
}
|
||||
return "未执行到账"
|
||||
}
|
||||
Reference in New Issue
Block a user