public void PayPointPayPal(PayPointAccount account, string notificationUrl, string returnUrl, string cancelUrl, decimal amount, string currency = "GBP", bool isTest = false) { try { string transactionId = "TRAN" + Guid.NewGuid(); string options = string.Format("notificationurl={0},returnurl={1},cancelurl={2}", notificationUrl, returnUrl, cancelUrl); if (isTest) { options += ",test_status=true"; } this._service.Url = account.ServiceUrl; var str = this._service. performTransactionViaAlternatePaymentMethod(account.Mid, account.VpnPassword, "PayPal", "ExpressCheckout", "Initialise", "Transaction", transactionId, amount.ToString(CultureInfo.InvariantCulture), currency, options); Log.Debug(str); var ret = new PayPointReturnData(str); if (!ret.HasError) { } } catch (Exception ex) { Log.Error(ex); } }
//----------------------------------------------------------------------------------- public PayPointReturnData RefundCard(PayPointAccount account, string cardHolder, string cardNumber, decimal amount, DateTime expiryDate, string issueNumber, DateTime startDate, string order, string cv2, bool isTest) { Log.InfoFormat("RefundCard: cardHolder={0}, cardNumber={1}, amount = {2}, expiryDate = {3}, issueNumber={4}, startDate={5}, order={6}, cv2={7}, isTest = {8}", cardHolder, cardNumber, amount, expiryDate, issueNumber, startDate, order, cv2, isTest); this._service.Url = account.ServiceUrl; try { string transactionId = "TRAN" + Guid.NewGuid(); string transactionIdNew = transactionId + "_refund"; string options = String.Format("dups=false,card_type=Visa,cv2={0}", cv2); if (isTest) { options += ",test_status=true"; } string startDateStr = startDate.ToString("MMyy"); string expiryDateStr = expiryDate.ToString("MMyy"); var str = this._service.validateCardFull(account.Mid, account.VpnPassword, transactionId, "127.0.0.1", cardHolder, cardNumber, amount.ToString(CultureInfo.InvariantCulture), expiryDateStr, issueNumber, startDateStr, order, String.Empty, String.Empty, options); Log.Debug("validateCardFull result: " + str); var ret = new PayPointReturnData(str); if (!ret.HasError) { str = this._service.refundCardFull(account.Mid, account.VpnPassword, transactionId, amount.ToString(CultureInfo.InvariantCulture), account.RemotePassword, transactionIdNew); ret = new PayPointReturnData(str); Log.Debug("refundCardFull result: " + str); } else { Log.InfoFormat("RefundCard completed successfully"); } return(ret); } catch (Exception ex) { Log.Error(ex); return(new PayPointReturnData { Error = ex.Message }); } }
public PayPointException(string message, PayPointReturnData paypointData) : base(message) { _paypointData = paypointData; }
// step 2 - actual paypoint transaction (proceedeed according to "old" amount) // no NL here for phase 1 public PayPointReturnData RepeatTransactionEx(PayPointAccount account, string transactionId, decimal amount) { var newTransactionId = transactionId + DateTime.Now.ToString("yyyy-MM-dd_hh:mm:ss"); string str; PayPointReturnData ret; Log.InfoFormat("RepeatTransaction: for transactionId='{0}', amount='{1}', newTransactionId='{2}'", transactionId, amount, newTransactionId); if (account.DebugModeEnabled) { Log.InfoFormat("Paypoint RepeatTransactionEx Debug Mode - not invoking the service call"); var code = "A"; var isValid = true; var message = "debug mode"; var respCode = 0; if (!account.DebugModeIsValidCard) { message = "Card is not valid debug mode"; code = "B"; isValid = false; } else { if (account.EnableCardLimit && amount > account.CardLimitAmount) { message = "Amount more than card amount debug mode"; code = "P:A"; isValid = false; } } Random r = new Random(); var rand = r.Next(10); if (account.DebugModeErrorCodeNEnabled && rand > 6) { isValid = false; code = "N"; message = "INSUFF FUNDS"; respCode = 5; } str = string.Format("?valid={0}&trans_id={1}&code={2}&auth_code=9999&message={3}&resp_code={4}", isValid, transactionId, code, message, respCode); ret = new PayPointReturnData(str); } else { str = _service.repeatCardFullAddr(account.Mid, account.VpnPassword, transactionId, amount.ToString(CultureInfo.InvariantCulture), account.RemotePassword, newTransactionId, null, null, null, null, "repeat=true"); // input for step 3 (NL) ret = new PayPointReturnData(str); } if (ret.HasError) { if (ret.Code == "N") { Log.WarnFormat("RepeatTransaction error: {0} error {1} message {2} respCode {3}", str, ret.Error, ret.Message, (ResponseCode)ret.RespCode); } else { Log.ErrorFormat("RepeatTransaction error: {0} error {1} message {2} respCode {3}", str, ret.Error, ret.Message, (ResponseCode)ret.RespCode); } throw new PayPointException(str, ret); } Log.DebugFormat("RepeatTransaction successful: " + str); return(ret); }
//----------------------------------------------------------------------------------- /// <summary> /// Make automatic payment for given installment /// Called from PaypointCharger job /// </summary> /// <param name="customerId"></param> /// <param name="loanId"></param> /// <param name="loanScheduleId">Installment Id</param> /// <param name="amount">Amount to pay</param> /// <returns>PayPointReturnData as a result of call to paypoint API</returns> public PayPointReturnData MakeAutomaticPayment( int customerId, int loanId, int loanScheduleId, decimal amount ) { LoanScheduleRepository installments = (LoanScheduleRepository)ObjectFactory.GetInstance <ILoanScheduleRepository>(); var loanPaymentFacade = new LoanPaymentFacade(); PayPointReturnData payPointReturnData = null; installments.BeginTransaction(); try { var installment = installments.Get(loanScheduleId); var loan = installment.Loan; var customer = loan.Customer; var now = DateTime.UtcNow; NL_Payments nlPayment = new NL_Payments() { Amount = amount, PaymentMethodID = (int)NLLoanTransactionMethods.Auto, PaymentStatusID = (int)NLPaymentStatuses.Active, PaymentSystemType = NLPaymentSystemTypes.Paypoint, CreationTime = now, CreatedByUserID = 1, Notes = "autocharger" }; Log.InfoFormat("Making automatic repayment for customer {0}(#{1}) for amount {2} for loan# {3}({4})", customer.PersonalInfo.Fullname, customer.RefNumber, amount, loan.RefNumber, loan.Id); PayPointCard defaultCard = customer.PayPointCards.FirstOrDefault(x => x.IsDefaultCard); if (defaultCard == null && customer.PayPointCards.Any()) { defaultCard = customer.PayPointCards.First(); } if (defaultCard == null) { // ReSharper disable once ThrowingSystemException throw new Exception("Debit card not found"); } var payPointTransactionId = defaultCard.TransactionId; try { payPointReturnData = RepeatTransactionEx(defaultCard.PayPointAccount, payPointTransactionId, amount); // set real charged amount nlPayment.Amount = amount; } catch (PayPointException ex) { loan.Transactions.Add(new PaypointTransaction { Amount = amount, Description = ex.PaypointData.Message ?? "Exception:" + ex.Message, PostDate = now, Status = LoanTransactionStatus.Error, PaypointId = payPointTransactionId, IP = "", Balance = loan.Balance, Principal = loan.Principal, Loan = loan, LoanTransactionMethod = ObjectFactory.GetInstance <DatabaseDataHelper>().LoanTransactionMethodRepository.FindOrDefault("Auto") }); installments.CommitTransaction(); // save failed NL payment + PP transaction long nlLoanId = ObjectFactory.GetInstance <IEzServiceAccessor>().GetLoanByOldID(loanId, customerId); if (nlLoanId > 0) { nlPayment.Amount = 0; nlPayment.PaymentStatusID = (int)NLPaymentStatuses.Error; nlPayment.PaypointTransactions.Clear(); nlPayment.PaypointTransactions.Add(new NL_PaypointTransactions() { TransactionTime = now, Amount = amount, // in the case of Exception amount should be 0 ???? Notes = ex.PaypointData.Message ?? "Exception:" + ex.Message, PaypointTransactionStatusID = (int)NLPaypointTransactionStatuses.Error, IP = string.Empty, PaypointUniqueID = payPointTransactionId, PaypointCardID = defaultCard.Id }); Log.InfoFormat("Failed Paypoint transaction: customerId={0} loanID = {1}, loanScheduleId={2} amount={3}; nlPayment={4}", customerId, loanId, loanScheduleId, amount, nlPayment); ObjectFactory.GetInstance <IEzServiceAccessor>().AddPayment(loan.Customer.Id, nlPayment); } return(ex.PaypointData); } installments.CommitTransaction(); loanPaymentFacade.PayLoan(loan, payPointReturnData.NewTransId, amount, null, now, "auto-charge", false, null, nlPayment); } catch (Exception e) { if (!(e is PayPointException)) { Log.Error(e); } if (payPointReturnData == null) { payPointReturnData = new PayPointReturnData { Error = e.Message } } ; installments.RollbackTransaction(); } return(payPointReturnData); }