MCPcopy Index your code
hub / github.com/53AI/53AIHub / queryWechatOrderStatusWithOriginal

Function queryWechatOrderStatusWithOriginal

api/controller/pay.go:845–898  ·  view source on GitHub ↗

Query WeChat order status and return original status

(eid int64, orderId string)

Source from the content-addressed store, hash-verified

843
844// Query WeChat order status and return original status
845func queryWechatOrderStatusWithOriginal(eid int64, orderId string) (int, string, string, int64, error) {
846 // Get WeChat payment settings
847 paySetting, err := model.GetPaySettingByType(eid, model.PayTypeWechat)
848 if err != nil {
849 return 0, "", "", 0, err
850 }
851
852 order, err := model.GetOrderByOrderId(eid, orderId)
853 if err != nil {
854 return 0, "", "", 0, err
855 }
856
857 factory := &payment.PaymentFactory{}
858 newPayment, err := factory.NewPayment(order.PayType)
859 if err != nil {
860 return 0, "", "", 0, err
861 }
862
863 // Query order status
864 rsp, err := newPayment.QueryPaymentStatus(order, paySetting)
865 if err != nil {
866 return 0, "", "", 0, err
867 }
868
869 wxRsp, ok := rsp.(*wechat.QueryOrderRsp)
870 if !ok {
871 return 0, "", "", 0, fmt.Errorf("invalid response type")
872 }
873
874 var payTime int64
875 if wxRsp.Response.SuccessTime != "" {
876 successTime, err := time.Parse(time.RFC3339, wxRsp.Response.SuccessTime)
877 if err != nil {
878 xlog.Error("Failed to parse success time:", err)
879 payTime = time.Now().UTC().UnixMilli()
880 } else {
881 payTime = successTime.UnixMilli()
882 xlog.Info("Using payment success time from WeChat:", wxRsp.Response.SuccessTime)
883 }
884 } else {
885 payTime = time.Now().UTC().UnixMilli()
886 }
887
888 // Check payment status
889 if wxRsp.Response.TradeState == model.TradeStateSuccess {
890 return model.OrderStatusPaid, wxRsp.Response.TransactionId, wxRsp.Response.TradeState, payTime, nil
891 } else if wxRsp.Response.TradeState == model.TradeStateClosed {
892 return model.OrderStatusExpired, "", wxRsp.Response.TradeState, 0, nil
893 } else if wxRsp.Response.TradeState == model.TradeStateRefund {
894 return model.OrderStatusPending, "", wxRsp.Response.TradeState, 0, nil
895 }
896
897 return model.OrderStatusPending, "", wxRsp.Response.TradeState, 0, nil
898}
899
900// Query Alipay order status and return original status
901func queryAlipayOrderStatusWithOriginal(eid int64, order *model.Order) (int, string, string, int64, error) {

Callers 1

QueryOrderStatusFunction · 0.85

Calls 5

NewPaymentMethod · 0.95
ErrorfMethod · 0.80
InfoMethod · 0.80
QueryPaymentStatusMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected