예제 #1
0
        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);
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
        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;
            }
        }
예제 #5
0
        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*/));
        }
예제 #7
0
        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;
            }
        }