Query WeChat order status and return original status
(eid int64, orderId string)
| 843 | |
| 844 | // Query WeChat order status and return original status |
| 845 | func 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 |
| 901 | func queryAlipayOrderStatusWithOriginal(eid int64, order *model.Order) (int, string, string, int64, error) { |
no test coverage detected