public async Task <BankingResult <string> > CreatePaymentInitiationRequestAsync(PaymentInitiationRequest model) { try { var paymentRequest = new BerlinGroupPaymentRequest { creditorAccount = new Base.BerlinGroup.Models.Requests.BerlinGroupCreditorAccount { iban = model.Recipient.Iban }, creditorName = model.Recipient.Name, debtorAccount = new BerlinGroupDebtorAccount { iban = model.Debtor.Iban, currency = model.Debtor.Currency }, instructedAmount = new BerlinGroupInstructedAmount { amount = model.Amount, currency = model.Currency }, endToEndIdentification = model.EndToEndId, requestedExecutionDate = model.RequestedExecutionDate?.ToString("yyyy-MM-dd") }; var content = new StringContent(JsonConvert.SerializeObject(paymentRequest), Encoding.UTF8, "application/json"); var client = GetClient(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("TPP-Explicit-Authorisation-Preferred", "false"); client.DefaultRequestHeaders.Add("PSU-IP-Address", model.PsuIp); client.DefaultRequestHeaders.Add("TPP-Redirect-Preferred", "true"); client.DefaultRequestHeaders.Add("TPP-Redirect-URI", model.RedirectUrl + $"?flowId={model.FlowId}"); client.DefaultRequestHeaders.Add("TPP-Nok-Redirect-URI", model.RedirectUrl + $"?flowId={model.FlowId}&error"); var url = $"/sgbt/lu/bg/v1/payments/sepa-credit-transfers"; var result = await client.PostAsync(url, content); var rawData = await result.Content.ReadAsStringAsync(); var paymentResult = JsonConvert.DeserializeObject <SocieteGeneralePaymentInit>(rawData); if (string.IsNullOrEmpty(paymentResult._links.scaRedirect)) { content = new StringContent("", Encoding.UTF8, "application/json"); client = GetClient(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); string url2 = $"/sgbt/lu/bg/v1/payments/sepa-credit-transfers/{paymentResult.paymentId}/authorisations"; result = await client.PostAsync(url2, content); string rawData2 = await result.Content.ReadAsStringAsync(); var paymentAthorisation = JsonConvert.DeserializeObject <SocieteGeneraleAuthorization>(rawData2); paymentResult._links.scaRedirect = paymentAthorisation._links.scaRedirect; rawData += rawData2; url += url2; } var flowContext = new FlowContext { Id = model.FlowId, ConnectorType = ConnectorType, FlowType = FlowType.Payment, PaymentProperties = new PaymentProperties { PaymentId = paymentResult.paymentId } }; return(new BankingResult <string>(ResultStatus.REDIRECT, url, paymentResult._links.scaRedirect, rawData, flowContext: flowContext)); } catch (ApiCallException e) { throw e; } catch (ApiUnauthorizedException e) { throw e; } catch (PagerException e) { throw e; } catch (SdkUnauthorizedException e) { throw e; } catch (Exception e) { await LogAsync(apiUrl, 500, Http.Get, e.ToString()); throw e; } }
public PaymentInitiationDetails Payinitiationbind() { string SRCSITEID = "L43473", CRN = "INR"; PaymentInitiationDetails Detail = new PaymentInitiationDetails(); List <item> itemdet = new List <item>(); PayprocessDetail PaymentInitiationlist = new PayprocessDetail(); var PayInitiateRequestmessage = Request.Content.ReadAsStringAsync(); PaymentInitiationRequest PayInitiaterequest = JsonConvert.DeserializeObject <PaymentInitiationRequest>(PayInitiateRequestmessage.Result.ToString()); if (PayInitiateRequestmessage.Result.ToString() != null && PayInitiateRequestmessage.Result.ToString() != "") { SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString); SqlCommand cmd = new SqlCommand("usp_Insert_PaymentGateway_MakePayment", con); cmd.Parameters.AddWithValue("@Studentcode", Convert.ToInt32(PayInitiaterequest.studentcode)); cmd.Parameters.AddWithValue("@code", PayInitiaterequest.otherparam1); cmd.Parameters.AddWithValue("@SRCSITEID", SRCSITEID); cmd.Parameters.AddWithValue("@CRN", CRN); cmd.Parameters.AddWithValue("@amount", PayInitiaterequest.Amount); cmd.Parameters.AddWithValue("@CenterCode", PayInitiaterequest.otherparam2); cmd.Parameters.AddWithValue("@RequestFor", PayInitiaterequest.RequestFor); cmd.CommandType = CommandType.StoredProcedure; SqlDataAdapter sda = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); sda.Fill(dt); if (dt.Rows.Count > 0) { foreach (DataRow dtrow in dt.Rows) { string pgway = Convert.ToString(dtrow["PGWayCode"]); var slist = new PayprocessDetail(); slist.deviceId = "WEBSH2"; string tk, rd, full; string[] strSplitResponse; full = generatetoken(pgway, PayInitiaterequest.RequestFor, PayInitiaterequest.Amount, PayInitiaterequest.studentcode); strSplitResponse = full.Split('/'); tk = strSplitResponse[0].ToString(); rd = strSplitResponse[1].ToString(); slist.token = tk; // slist.requestdata = rd; slist.paymentMode = "all"; slist.merchantId = "L43473"; slist.txnId = pgway; slist.txnSubType = "DEBIT"; slist.returnUrl = "http://api.stephenventures.com/HandleReturn/handlereturnapp.aspx"; // slist.consumerEmailId = PayInitiaterequest.RequestFor; // con.Open(); //string stinsert = "insert into tbl_pgwayverification_mobile(studentcode,pgwaycode,token,createddate)values(" + PayInitiaterequest.studentcode + "," + // pgway + ",'" + slist.token + "',getdate())"; //SqlCommand cmdinsert = new SqlCommand(stinsert, con); //cmdinsert.ExecuteNonQuery(); //con.Close(); slist.cartDescription = PayInitiaterequest.studentcode + "}{email: " + PayInitiaterequest.RequestFor; var itemlist = new item(); itemlist.itemId = "Welingkar"; itemlist.amount = PayInitiaterequest.Amount; itemlist.comAmt = "0"; itemdet.Add(itemlist); Detail.PaymentInitiationDetail = slist; Detail.items = itemdet; } } } return(Detail); }
public async Task <BankingResult <string> > CreatePaymentInitiationRequestAsync(PaymentInitiationRequest model) { try { var paymentRequest = new KbcPaymentRequest { creditorAccount = new Models.Requests.KbcCreditorAccount { iban = model.Recipient.Iban }, creditorName = model.Recipient.Name, debtorAccount = new Models.Requests.KbcDebtorAccount { iban = model.Debtor.Iban, currency = model.Debtor.Currency }, instructedAmount = new Models.Requests.KbcInstructedAmount { amount = model.Amount.ToString("0.00", CultureInfo.InvariantCulture), currency = model.Currency }, endToEndIdentification = model.EndToEndId, requestedExecutionDate = model.RequestedExecutionDate?.ToString("yyyy-MM-dd"), remittanceInformationUnstructured = model.RemittanceInformationUnstructured }; var content = new StringContent(JsonConvert.SerializeObject(paymentRequest), Encoding.UTF8, "application/json"); var client = GetClient(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("PSU-IP-Address", model.PsuIp); client.DefaultRequestHeaders.Add("TPP-Redirect-URI", $"{model.RedirectUrl}?flowId={model.FlowId}"); var url = $"/psd2/v2/payments/sepa-credit-transfers"; var result = await client.PostAsync(url, content); var rawData = await result.Content.ReadAsStringAsync(); var paymentResult = JsonConvert.DeserializeObject <KbcPaymentInit>(rawData); var flowContext = new FlowContext { Id = model.FlowId, ConnectorType = ConnectorType, FlowType = FlowType.Payment, PaymentProperties = new PaymentProperties { PaymentId = paymentResult.paymentId } }; return(new BankingResult <string>(ResultStatus.REDIRECT, url, paymentResult._links.scaRedirect, rawData, flowContext: flowContext)); } catch (ApiCallException e) { throw e; } catch (SdkUnauthorizedException e) { throw e; } catch (Exception e) { await LogAsync(apiUrl, 500, Http.Get, e.ToString()); throw e; } }
public async Task <BankingResult <string> > CreatePaymentInitiationRequestAsync(PaymentInitiationRequest model) { try { var request = new PaymentRequest { paymentInformationId = "MyPmtInfIdtt", creationDateTime = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss"), requestedExecutionDate = model.RequestedExecutionDate?.ToString("yyyy-MM-dd"), numberOfTransactions = 1, initiatingParty = new Party { name = SdkApiSettings.TppLegalName, postalAddress = SdkApiSettings.IsSandbox ? new PostalAddress { country = "FR", addressLine = new List <string> { } } : null, organisationId = SdkApiSettings.IsSandbox ? new OrganisationId { identification = "12FR5", issuer = "ACPR", schemeName = "CPAN" } : null }, paymentTypeInformation = new PaymentTypeInformation { serviceLevel = "SEPA" }, debtor = new Debtor { name = model.Debtor.Name, postalAddress = SdkApiSettings.IsSandbox ? new PostalAddress { country = "FR", addressLine = new List <string> { } } : null, privateId = SdkApiSettings.IsSandbox ? new OrganisationId { identification = "FD37G", issuer = "BICXYYTTZZZ", schemeName = "BANK" } : null }, debtorAccount = new Models.Requests.Account { iban = model.Debtor.Iban }, beneficiary = new Beneficiary { creditor = new Party { name = model.Recipient.Name, postalAddress = SdkApiSettings.IsSandbox ? new PostalAddress { country = "FR", addressLine = new List <string> { } } : null, organisationId = SdkApiSettings.IsSandbox ? new OrganisationId { identification = "852126789", schemeName = "SREN", issuer = "FR" } : null }, creditorAccount = new Models.Requests.Account { iban = model.Recipient.Iban } }, creditTransferTransaction = new List <CreditTransferTransaction> { new CreditTransferTransaction { paymentId = new PaymentId { instructionId = model.EndToEndId, endToEndId = model.EndToEndId }, instructedAmount = new InstructedAmount { amount = model.Amount.ToString("0.00", CultureInfo.InvariantCulture), currency = model.Currency }, remittanceInformation = new List <string> { } } }, supplementaryData = new SupplementaryData { acceptedAuthenticationApproach = new List <string> { "REDIRECT", "DECOUPLED" }, successfulReportUrl = model.RedirectUrl + $"?flowId={model.FlowId}", unsuccessfulReportUrl = model.RedirectUrl + $"?flowId={model.FlowId}" } }; var payload = JsonConvert.SerializeObject(request); var content = new StringContent(payload, Encoding.UTF8, "application/json"); var url = $"/v1/payment-requests"; var client = GetClient(); var token = await GetClientToken(model.RedirectUrl); client.DefaultRequestHeaders.Add("Authorization", $"{token.token_type} {token.access_token}"); client.SignRequest(_settings.SigningCertificate, HttpMethod.Post, url, _settings.PemFileUrl); var result = await client.PostAsync(url, content); var rawData = await result.Content.ReadAsStringAsync(); var paymentResult = JsonConvert.DeserializeObject <PaymentInitResponse>(rawData); var flowContext = new FlowContext { Id = model.FlowId, ConnectorType = ConnectorType, FlowType = FlowType.Payment, PaymentProperties = new PaymentProperties { PaymentId = result.Headers.Location.ToString().Split('/').Last() } }; return(new BankingResult <string>(ResultStatus.REDIRECT, url, paymentResult._links.consentApproval.href, rawData, flowContext: flowContext)); } catch (ApiCallException e) { throw e; } catch (ApiUnauthorizedException e) { throw e; } catch (PagerException e) { throw e; } catch (SdkUnauthorizedException e) { throw e; } catch (Exception e) { await LogAsync(apiUrl, 500, Http.Get, e.ToString()); throw e; } }
public async Task <BankingResult <string> > CreatePaymentInitiationRequestAsync(PaymentInitiationRequest model) { var paymentRequest = JsonConvert.SerializeObject(new BelfiusPaymentRequest { remote_account = new RemoteAccount { iban = model.Recipient.Iban, name = model.Recipient.Name }, origin_account = new OriginAccount { iban = model.Debtor.Iban }, amount = model.Amount, currency = model.Currency, payment_id = model.EndToEndId, execution_date = model.RequestedExecutionDate?.ToString("yyyy-MM-dd"), payment_treatment_type = "NORMAL" }); var content = new StringContent(paymentRequest, Encoding.UTF8, "application/json"); content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json"); var client = GetClient(); client.DefaultRequestHeaders.Add("Accept", "application/vnd.belfius.api+json; version=1"); client.DefaultRequestHeaders.Add("Accept-Language", "en"); client.DefaultRequestHeaders.Add("Redirect-URI", model.RedirectUrl); //client.DefaultRequestHeaders.Add("Authorization", "Bearer test"); client.DefaultRequestHeaders.Add("Code-Challenge-Method", "S256"); var codeVerifier = Guid.NewGuid().ToString() + "_" + Guid.NewGuid().ToString(); string codeChallenge; using (SHA256 sha256Hash = SHA256.Create()) { codeChallenge = Convert.ToBase64String(sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(codeVerifier))) .Split('=')[0].Replace("+", "-").Replace("/", "_"); } client.DefaultRequestHeaders.Add("Code-Challenge", codeChallenge); client.DefaultRequestHeaders.Add("Signature", SignatureHelper.GetJwt(paymentRequest, _settings.SigningCertificate)); var url = basePath + $"/payments/sepa-credit-transfers"; var result = await client.PostAsync(url, content); var rawData = await result.Content.ReadAsStringAsync(); return(new BankingResult <string>(ResultStatus.REDIRECT, url, "" /*redirect*/, rawData, null /*flowContext: flowContext*/)); }
public async Task <BankingResult <string> > CreatePaymentInitiationRequestAsync(PaymentInitiationRequest model) { var paymentRequest = new BelfiusPaymentRequest { remote_account = new RemoteAccount { iban = model.Recipient.Iban, name = model.Recipient.Name }, origin_account = new OriginAccount { iban = model.Debtor.Iban }, amount = model.Amount, currency = model.Currency, payment_id = model.EndToEndId, execution_date = model.RequestedExecutionDate?.ToString("yyyy-MM-dd"), payment_treatment_type = "NORMAL" }; var content = new StringContent(JsonConvert.SerializeObject(paymentRequest), Encoding.UTF8, "application/json"); content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json"); var client = GetClient(); client.DefaultRequestHeaders.Add("Accept", "application/vnd.belfius.api+json; version=1"); client.DefaultRequestHeaders.Add("Accept-Language", "en"); client.DefaultRequestHeaders.Add("Redirect-URI", model.RedirectUrl); //client.DefaultRequestHeaders.Add("Authorization", "Bearer test"); client.DefaultRequestHeaders.Add("Code-Challenge-Method", "S256"); client.DefaultRequestHeaders.Add("Code-Challenge", "test"); //TODO add signature client.DefaultRequestHeaders.Add("Signature", "test"); var url = basePath + $"/payments/sepa-credit-transfers"; var result = await client.PostAsync(url, content); var rawData = await result.Content.ReadAsStringAsync(); return(new BankingResult <string>(ResultStatus.REDIRECT, url, "" /*redirect*/, rawData, null /*flowContext: flowContext*/)); }
public async Task <BankingResult <string> > CreatePaymentInitiationRequestAsync(PaymentInitiationRequest model) { try { var request = new PaymentRequest { paymentInformationId = Guid.NewGuid().ToString().Replace("-", ""), creationDateTime = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffzz00"), requestedExecutionDate = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffzz00"), numberOfTransactions = 1, initiatingParty = new Party { name = SdkApiSettings.TppLegalName }, paymentTypeInformation = new PaymentTypeInformation { serviceLevel = "SEPA" }, debtor = new Debtor { name = model.Debtor.Name }, debtorAccount = new Base.Stet.Models.Requests.Account { iban = model.Debtor.Iban }, beneficiary = new Beneficiary { creditor = new Party { name = model.Recipient.Name }, creditorAccount = new Base.Stet.Models.Requests.Account { iban = model.Recipient.Iban } }, ultimateCreditor = new Party { name = "myPreferedUltimateMerchant" }, creditTransferTransaction = new List <CreditTransferTransaction> { new CreditTransferTransaction { paymentId = new PaymentId { instructionId = model.EndToEndId, endToEndId = model.EndToEndId }, instructedAmount = new InstructedAmount { amount = model.Amount.ToString("0.00", CultureInfo.InvariantCulture), currency = model.Currency }, remittanceInformation = new List <string> { model.RemittanceInformationUnstructured } } }, supplementaryData = new SupplementaryData { acceptedAuthenticationApproach = new List <string> { "REDIRECT", "DECOUPLED" }, successfulReportUrl = model.RedirectUrl + $"?flowId={model.FlowId}", unsuccessfulReportUrl = model.RedirectUrl + $"?flowId={model.FlowId}" } }; var payload = JsonConvert.SerializeObject(request); //var payload = "{\n \"paymentInformationId\": \"" + Guid.NewGuid().ToString().Replace("-", "") + "\",\n \"creationDateTime\": \"" + DateTime.UtcNow.AddMinutes(1).ToString("yyyy-MM-ddTHH:mm:ss.fffzz00") + "\",\n \"numberOfTransactions\": 1,\n \"initiatingParty\": {\n \"name\": \"TTP_NAME\",\n \"postalAddress\": null,\n \"organisationId\": null\n },\n \"paymentTypeInformation\": {\n \"serviceLevel\": \"SEPA\"\n },\n \"debtor\": {\n \"name\": \"MyCustomer\",\n \"postalAddress\": null,\n \"privateId\": null\n },\n \"debtorAccount\": {\n \"iban\": \"LU396029145352177301\"\n },\n \"beneficiary\": {\n \"creditor\": {\n \"name\": \"myMerchant\",\n \"postalAddress\": null,\n \"organisationId\": null\n },\n \"creditorAccount\": {\n \"iban\": \"LU147856985236589658\"\n }\n },\n \"ultimateCreditor\": {\n \"name\": \"myPreferedUltimateMerchant\",\n \"postalAddress\": null,\n \"organisationId\": null\n },\n \"requestedExecutionDate\": \"" + DateTime.UtcNow.AddMinutes(5).ToString("yyyy-MM-ddTHH:mm:ss.fffzz00") + "\",\n \"creditTransferTransaction\": [\n {\n \"paymentId\": {\n \"instructionId\": \"MyInstrId2\",\n \"endToEndId\": \"MyEndToEndId2\"\n },\n \"instructedAmount\": {\n \"currency\": \"EUR\",\n \"amount\": \"124.35\"\n },\n \"remittanceInformation\": [\n \"MyRemittanceInformation\"\n ]\n }\n ],\n \"supplementaryData\": {\n \"acceptedAuthenticationApproach\": [\n \"REDIRECT\",\n \"DECOUPLED\"\n ],\n \"successfulReportUrl\": \"" + model.RedirectUrl + $"?flowId={model.FlowId}" + "\",\n \"unsuccessfulReportUrl\": \"" + model.RedirectUrl + $"?flowId={model.FlowId}" + "\"\n }\n}"; var content = new StringContent(payload, Encoding.UTF8, "application/json"); var url = $"{relativeUrlPisPart}/payment-requests"; var client = GetClient(); var token = await GetClientToken(model.RedirectUrl); client.DefaultRequestHeaders.Add("Authorization", $"{token.token_type} {token.access_token}"); if (!SdkApiSettings.IsSandbox) { client.SignRequest(_settings.SigningCertificate, HttpMethod.Post, url, _settings.PemFileUrl); } var result = await client.PostAsync(url, content); var rawData = await result.Content.ReadAsStringAsync(); var paymentResult = JsonConvert.DeserializeObject <PaymentInitResponse>(rawData); var flowContext = new FlowContext { Id = model.FlowId, ConnectorType = ConnectorType, FlowType = FlowType.Payment, RedirectUrl = model.RedirectUrl, PaymentProperties = new PaymentProperties { PaymentId = result.Headers.Location.ToString().Split('/').Last() } }; return(new BankingResult <string>(ResultStatus.REDIRECT, url, paymentResult._links.consentApproval.href, rawData, flowContext: flowContext)); } catch (ApiCallException e) { throw e; } catch (ApiUnauthorizedException e) { throw e; } catch (PagerException e) { throw e; } catch (SdkUnauthorizedException e) { throw e; } catch (Exception e) { await LogAsync(apiUrl, 500, Http.Get, e.ToString()); throw e; } }