public async Task <string> MVISAExchangeRate(MVISAExchangeRate model) { string url = BaseURI; string endpoint = "Spay/MVisaForeignExchangeRates"; try { var response = await apiRequest.Post(model, "", BaseURI, endpoint, "CardToCardPage"); if (response.StatusCode == HttpStatusCode.OK) { var jsonstring = await response.Content.ReadAsStringAsync(); return(jsonstring); } } catch (Exception ex) { string log = ex.Message; await BusinessLogic.Log(ex.ToString(), "Error calling MVisa Exchange Rate", url, "", "", "CardToCardPage"); } return(""); }
private async void ProcessPayment() { var pd = await ProgressDialog.Show("Sending payment, please wait..."); DateTime d = DateTime.Today; int yr = DateTime.Today.Year; string lastDigitOfYear = yr.ToString().Substring(3, 1); var da = lastDigitOfYear + d.DayOfYear.ToString("000"); var systTraceAuditNo = "05" + GenNewPin().ToString(); string destAmt = ""; var curCode = customer.ListOfAllAccounts.Where(s => s.nuban.Equals(SenderAccountNumber)).FirstOrDefault().currency; var cardEnquiry = new MVISAEnquiryData() { Referenceid = Utilities.GenerateReferenceId(), RequestType = 138, Translocation = GlobalStaticFields.GetUserLocation, acquiringBin = "408999", acquirerCountryCode = "840", primaryAccountNumber = BeneficiaryCard, retrievalReferenceNumber = da + DateTime.Now.ToString("HH") + systTraceAuditNo, //"0055" + _helperClass.GenNewPin(), systemsTraceAuditNumber = systTraceAuditNo }; // call name Enquiry var market = await GetMarkup(); // get the markup rate MarkupRate markupRate = null; if (!string.IsNullOrEmpty(market)) { markupRate = JsonConvert.DeserializeObject <MarkupRate>(market); // deserialise the markup rate } var enquiryResponse = await MVISAAccEnquiry(cardEnquiry); if (!string.IsNullOrEmpty(enquiryResponse)) { var jsonData = JsonConvert.DeserializeObject <MVISAEnquiryResponse>(enquiryResponse); // perform some operations after name enquiry var replc = jsonData.responsedata.Replace('\\', ' '); var dd = JsonConvert.DeserializeObject <MVISAEnquiryResponseData>(replc); if (dd.geoRestrictionInd != "N") { await pd.Dismiss(); MessageDialog.Show("Error", "Recipient issuer does not participate in fast funds.", DialogType.Error, "OK", null); return; } if (dd.pushFundsBlockIndicator == "N") { await pd.Dismiss(); MessageDialog.Show("Error", "Recipient issuer does not participate in fast funds.", DialogType.Error, "OK", null); return; } if (dd.cardIssuerCountryCode != "566") { Random gen0 = new Random(); var TraceNo = gen0.Next(100000, 999999); // lets have a watchlist before var wl = new MVisaWatchListReq() { cardIssuerCountryCode = dd.cardIssuerCountryCode, city = dd.billingCurrencyCode, name = Beneficiary, Translocation = GlobalStaticFields.GetUserLocation, Referenceid = Utilities.GenerateReferenceId(), RequestType = 140, referenceNumber = da + DateTime.Now.ToString("HH") + TraceNo.ToString() }; // call watchlist var wldata = await MVisawatchListInquiry(wl); if (!string.IsNullOrEmpty(wldata)) { var wldd = JsonConvert.DeserializeObject <MVISAEnquiryResponse>(wldata); var wldReplc = wldd.responsedata.Replace('\\', ' '); var wlrplcdd = JsonConvert.DeserializeObject <WListData>(wldReplc); if (Convert.ToInt32(wlrplcdd.ofacScore) >= 65) { await pd.Dismiss(); MessageDialog.Show("Transaction Failed", "Recipient issuer does not participate in fast funds.", DialogType.Error, "OK", null); return; } } // lets call exchange rate var exrate = new MVISAExchangeRate() { destinationCurrencyCode = dd.billingCurrencyCode, sourceAmount = Amount, markUpRate = markupRate.markUpRate, systemsTraceAuditNumber = systTraceAuditNo, Referenceid = Utilities.GenerateReferenceId(), RequestType = 137, retrievalReferenceNumber = da + DateTime.Now.ToString("HH") + systTraceAuditNo, sourceCurrencyCode = curCode, Translocation = GlobalStaticFields.GetUserLocation }; var exchrt = await MVISAExchangeRate(exrate); if (!string.IsNullOrEmpty(exchrt)) { var dt = JsonConvert.DeserializeObject <MVISAEnquiryResponse>(exchrt); var dtrplc = dt.responsedata.Replace('\\', ' '); var rplc = JsonConvert.DeserializeObject <ExchangeRateResponse>(dtrplc); // destAmt = rplc.destinationAmount; var newDestAmount = Convert.ToDecimal(Amount) / Convert.ToDecimal(rplc.destinationAmount); var newDestAmount2 = newDestAmount * (Convert.ToDecimal(markupRate.markUpRate) / 100); var newDestAmount3 = newDestAmount + newDestAmount2; var actualDestinationAmount = Convert.ToDecimal(Amount) / newDestAmount3; destAmt = actualDestinationAmount.ToString(); } } else { destAmt = Amount; } var mVISA = new MVISACardModel() { senderAccountNumber = SenderAccountNumber, name = customer?.FirstName + " " + customer?.LastName, recipientName = Beneficiary, businessApplicationId = "PP", merchantCategoryCode = "6012", sourceOfFundsCode = "03", country = dd.cardIssuerCountryCode, county = dd.cardIssuerCountryCode, zipCode = dd.cardIssuerCountryCode, state = "", Translocation = GlobalStaticFields.GetUserLocation, Referenceid = Utilities.GenerateReferenceId(), idCode = "SBPL" + GenNewPin(), terminalId = "323" + GenNewPin(), transactionIdentifier = GenNewPin().ToString(), systemsTraceAuditNumber = systTraceAuditNo, RequestType = 144, retrievalReferenceNumber = da + DateTime.Now.ToString("HH") + systTraceAuditNo, recipientPrimaryAccountNumber = BeneficiaryCard, amount = destAmt, transactionCurrencyCode = dd.billingCurrencyCode, destinationAmount = destAmt }; var response = await CardToCardMVISA(mVISA); if (!string.IsNullOrEmpty(response)) { var json = JsonConvert.DeserializeObject <CardToCardResponse>(response); await pd.Dismiss(); if (json.response == "00") { if (dd.fastFundsIndicator == "B" || dd.fastFundsIndicator == "D" || dd.fastFundsIndicator == "E") { MessageDialog.Show("Info", "Your transaction was successful. Funds will be available to recipient within 30 mins of successful transfer", DialogType.Success, "OK", null); } else { MessageDialog.Show("Info", "YOur transaction was Successful. Funds will be available within 2 business days", DialogType.Success, "OK", null); } } } else { await pd.Dismiss(); MessageDialog.Show("Error", "Sorry, this operation was not successful. Please try again later.", DialogType.Error, "OK", null); return; } } else { await pd.Dismiss(); MessageDialog.Show("Error", "Sorry we are unable to validate the beneficiary account. Please review and try again.", DialogType.Error, "OK", null); return; } }