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); }
//[Fact] //public void GetMobileInfoByPhoneNumber_test() //{ // IRepository repository = new SimpleRepository(ConnectionStrings.Key_ORACLE_LOG, SimpleRepositoryOptions.None); // //var mobile = SMSService.GetMobileInfoByPhoneNumber(""); // var citys = repository.All<City>(); // var province = repository.All<Province>(); //} // [Fact] public void SMSCallbackLogicTest() { //IRepository repository = new SimpleRepository(ConnectionStrings.KEY_ORACLE_GENERAL, SimpleRepositoryOptions.RunMigrations); //repository.Add<Partner>(new Partner() { CallbackURL = "http://fh_charge.auroraorbit.com/sms_callback.ashx", PartnerNo = "1" }); IRedisService realRedisService = new RedisService(); PaymentNotification pn = new PaymentNotification() { OutOrderNo = "outOrderNo", CallbackURL = "http://fh_charge.auroraorbit.com/sms_callback.ashx", OrderNo = "orderNo", ResultCode = 2 }; //realRedisService.AddItemToQueue<PaymentNotification>(); realRedisService.AddItemToQueue <PaymentNotification>(BillingConsts.KEY_CARD_PAYMENT_CALLBACK_PROCESSING_QUEUE, pn); }
private int RetryNotify(PaymentNotification callbackInfo, int retryCount) { callbackInfo.LastRequestDate = DateTime.Now; retryCount++; if (retryCount <= retryTimesLimitation) { RedisService.AddItemToQueue <PaymentNotification>(BillingConsts.KEY_CARD_PAYMENT_CALLBACK_RETRY_QUEUE + retryCount, callbackInfo); } else// final failed { Order currentOrder = oracleRepo.Single <Order>(s => s.OrderNo == callbackInfo.OrderNo); if (currentOrder.OrderStatus == OrderStatus.Processing) { //processing status without operation } else { FailedNofity(callbackInfo, currentOrder); } } return(retryCount); }
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 } ); } }