public static bool SyncPaymentResult(decimal orderId) { IOnlineOrder factory = OnlineOrderFactory.GetFactory(); OnlineOrder order = factory.QueryByOrderId(orderId); if (order.PaymentChannel != PaymentChannel.WeiXinPay && order.PaymentChannel == PaymentChannel.AliPay) { throw new MyException("目前只能同步微信或支付宝的支付结果"); } if (order.Status != OnlineOrderStatus.WaitPay && order.Status != OnlineOrderStatus.Paying) { throw new MyException("只有待支付或支付中的订单才能同步"); } switch (order.PaymentChannel) { case PaymentChannel.WeiXinPay: { UnifiedOrderQueryMessage result = PaymentServices.UnifiedOrderQuery(order.CompanyID, order.SerialNumber, order.OrderID.ToString()); if (result.Success) { DateTime payTime = GetConversionWeiXinPayTime(result.Tiem_End); return(PaySuccess(orderId, result.TransactionId, payTime)); } if (result.Return_Code.ToUpper() != "SUCCESS") { throw new MyException(string.Format("同步失败:{0}", result.Return_Msg)); } if (result.Result_Code.ToUpper() != "SUCCESS") { throw new MyException(string.Format("同步失败:【{0}】{1}", result.Err_Code, result.Err_Code_Des)); } if (result.Trade_State.ToUpper() != "SUCCESS") { throw new MyException(string.Format("同步失败:{0}", GetWeiXinPayOrderErrorStateDes(result.Trade_State))); } break; } case PaymentChannel.AliPay: { DateTime payTime = DateTime.Now; bool result = AliPayApiServices.QueryPayResult(order.CompanyID, order.OrderID.ToString(), order.PrepayId, out payTime); if (result) { return(PaySuccess(orderId, order.PrepayId, payTime)); } else { throw new MyException("该订单未支付"); } } default: throw new MyException("支付通道不正确"); } return(false); }
/// <summary> /// 取消待支付订单 /// </summary> /// <param name="orderId"></param> /// <returns></returns> public static bool CancelOrder(decimal orderId) { lock (order_lock) { try { IOnlineOrder factory = OnlineOrderFactory.GetFactory(); OnlineOrder order = factory.QueryByOrderId(orderId); if (order.Status == OnlineOrderStatus.WaitPay) { bool result = factory.UpdateOrderStatusByOrderId(orderId, OnlineOrderStatus.Cancel); if (result && order.PaymentChannel == PaymentChannel.WeiXinPay) { PaymentServices.CloseOrderPay(order.CompanyID, orderId.ToString()); } return(result); } } catch (Exception ex) { ExceptionsServices.AddExceptionToDbAndTxt("OnlineOrderServices", "取消订单失败", ex, LogFrom.WeiXin); } } return(false); }
private static bool Refund(OnlineOrder model, string certpath) { IOnlineOrder factory = OnlineOrderFactory.GetFactory(); bool refundResult = false; string refundOrderId = IdGenerator.Instance.GetId().ToString(); using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { try { dbOperator.BeginTransaction(); refundResult = factory.RefundSuccess(model.OrderID, refundOrderId, dbOperator); if (!refundResult) { throw new MyException("更改订单为退款成功时失败"); } switch (model.PaymentChannel) { case PaymentChannel.WeiXinPay: { string refundAmount = ((int)(model.Amount * 100)).ToString(); refundResult = PaymentServices.Refund(model.CompanyID, model.SerialNumber, model.OrderID.ToString(), refundAmount, refundAmount, refundOrderId, certpath); TxtLogServices.WriteTxtLogEx("OnlineOrderServices", string.Format("方法名:{0},操作类型:{1},订单编号:{2},备注:{3} {4}", "Refund", "订单退款处理", model.OrderID, model.SerialNumber.ToString(), (model.Amount / 100).ToString("F2"), refundOrderId)); if (!refundResult) { throw new MyException("微信退款失败"); } break; } case PaymentChannel.AliPay: { refundResult = AliPayApiServices.RefundRequest(model.CompanyID, model.OrderID.ToString(), model.SerialNumber.ToString(), model.Amount.ToString("F2"), "车场网络异常", refundOrderId); TxtLogServices.WriteTxtLogEx("OnlineOrderServices", string.Format("方法名:{0},操作类型:{1},订单编号:{2},备注:{3} {4}", "Refund", "订单退款处理", model.OrderID, model.SerialNumber.ToString(), (model.Amount / 100).ToString("F2"), refundOrderId)); if (!refundResult) { throw new MyException("支付宝退款失败"); } break; } default: throw new MyException("退款渠道不正确"); } dbOperator.CommitTransaction(); TxtLogServices.WriteTxtLogEx("OnlineOrderServices", "方法名:{0},操作类型:{1},订单编号:{2},备注:{3}", "Refund", "订单退款处理", model.OrderID, "退款成功"); } catch (Exception ex) { refundResult = false; dbOperator.RollbackTransaction(); ExceptionsServices.AddExceptionToDbAndTxt("OnlineOrderServices", string.Format("订单退款失败,订单编号{0},描述:{1}", model.OrderID, ex.Message), ex, LogFrom.WeiXin); } if (!refundResult) { factory.RefundFail(model.OrderID); } if (model.PaymentChannel == PaymentChannel.WeiXinPay) { if (!refundResult) { switch (model.OrderType) { case OnlineOrderType.PkBitBooking: { TemplateMessageServices.SendBookingBitNoRefundFail(model.CompanyID, model.OrderID.ToString(), "车场网络异常", model.Amount, model.PayAccount); break; } case OnlineOrderType.SellerRecharge: { TemplateMessageServices.SendSellerRechargeRefundFail(model.CompanyID, model.OrderID.ToString(), "车场网络异常", model.Amount, model.PayAccount); break; } default: { TemplateMessageServices.SendParkingRefundFail(model.CompanyID, model.OrderID.ToString(), "车场网络异常", model.Amount, model.PayAccount); break; } } } else { string message = string.IsNullOrWhiteSpace(model.Remark) ? "车场网络异常" : model.Remark; switch (model.OrderType) { case OnlineOrderType.PkBitBooking: { TemplateMessageServices.SendBookingBitNoRefundSuccess(model.CompanyID, model.OrderID.ToString(), message, model.Amount, model.PayAccount); break; } case OnlineOrderType.SellerRecharge: { TemplateMessageServices.SendSellerRechargeRefundSuccess(model.CompanyID, model.OrderID.ToString(), message, model.Amount, model.PayAccount); break; } default: { TemplateMessageServices.SendParkingRefundSuccess(model.CompanyID, model.OrderID.ToString(), message, model.Amount, model.PayAccount); break; } } } } } return(refundResult); }