public CardPaymentRequestStatus ProcessCardPaymentRequest(CardPayment cardPayment, int retryCount) { var result = CardPaymentRequestStatus.NotRequest; // SZXResult szxResult = PaymentsService.YeepayCardPayments(cardPayment); //卡内金额全部充值 SZXResult szxResult = PaymentsService.YeepayCardPartialPayments(cardPayment); //部分充值 LogHelper.WriteInfo(string.Format("Processing card payment with OrderNo : {0}, request result : {1}", cardPayment.OrderNo, szxResult == null ? "null" : szxResult.R1_Code)); if (szxResult == null || string.IsNullOrEmpty(szxResult.R1_Code)) // retry { if (retryCount == -1) { result = CardPaymentRequestStatus.RequestFailed; } else { cardPayment.RequestDateTime = DateTime.Now; retryCount++; result = CardPaymentRequestStatus.RequestFailed; if (retryCount <= retryTimesLimitation) { RedisService.AddItemToQueue <CardPayment>(BillingConsts.KEY_CARD_PAYMENT_REQUEST_RETRY_QUEUE + retryCount, cardPayment); } else // final failed { Order currentOrder = oracleRepo.Single <Order>(cardPayment.OrderID); SetFailedOrderStatus(CardPaymentRequestStatus.RequestFailed, currentOrder); //record the info for retry manually var cardPaymentInfoForRetry = EntityMapping.Auto <CardPayment, CardPaymentRetry>(cardPayment); var AddRes = oracleRepo.Add <CardPaymentRetry>(cardPaymentInfoForRetry); } } } else { CardPaymentRequestStatus requestStatus = (CardPaymentRequestStatus)szxResult.R1_Code.ToInt32(); Order currentOrder = oracleRepo.Single <Order>(cardPayment.OrderID); if (currentOrder != null) { switch (requestStatus) { case CardPaymentRequestStatus.Success: SetSuccessOrderStatus(currentOrder); result = requestStatus; break; default: SetFailedOrderStatus(requestStatus, currentOrder); result = requestStatus; break; } } } return(result); }
private void SetFailedOrderStatus(CardPaymentRequestStatus resultCode, Order currentOrder) { currentOrder.OrderStatus = OrderStatus.Failed; currentOrder.CardPaymentRequestStatus = resultCode; int updateRet = oracleRepo.Update <Order>(currentOrder); if (!string.IsNullOrEmpty(currentOrder.CallBackUrl)) { RedisService.AddItemToQueue <PaymentNotification>(BillingConsts.KEY_CARD_PAYMENT_CALLBACK_PROCESSING_QUEUE, new PaymentNotification { ResultCode = (int)CardPaymentCallBackStatus.RequestError, OrderNo = currentOrder.OrderNo, Description = CardPaymentDataDict.CardPaymentRequestStatusDesc[((int)resultCode).ToString()], RequestAmount = currentOrder.Amount, OutOrderNo = currentOrder.OutOrderNo, SuccessAmount = 0.0f, CallbackURL = currentOrder.CallBackUrl, LastRequestDate = DateTime.Now } ); } }