ClearBank.Net 1.0.25
dotnet add package ClearBank.Net --version 1.0.25
NuGet\Install-Package ClearBank.Net -Version 1.0.25
<PackageReference Include="ClearBank.Net" Version="1.0.25" />
paket add ClearBank.Net --version 1.0.25
#r "nuget: ClearBank.Net, 1.0.25"
// Install ClearBank.Net as a Cake Addin #addin nuget:?package=ClearBank.Net&version=1.0.25 // Install ClearBank.Net as a Cake Tool #tool nuget:?package=ClearBank.Net&version=1.0.25
ClearBank.NET
ClearBank 集成非官方 .NET 客户端,通过他们的 API 创建在线支付。英国银行支付处理自动化。作为 NuGet 软件包 发布。此软件包旨在尽可能简单。
以下是一些先决条件
1. 创建 Azure KeyVault
从访问策略中添加角色和“密钥权限”以进行签名和验证。Azure KeyVault 支持 HSM(硬件安全模块)托管的密钥。
2. 配置“证书”选项卡
例如,使用新的自签名证书,但必须选择 PEM 格式。
下载证书,一个 PEM 文件。
3. 使用 Open-SSL 创建 CSR 并将其上传到 ClearBank 门户
openssl.exe req -new -sha256 -key "c:\temp\downloaded.pem" -out file.csr
- 上传到门户 https://institution-sim.clearbank.co.uk/
- 复制消息框中的私钥(一个长字符串)。在此配置中需要此信息,因为它将用于 POST 头
Authorization: Bearer (the long string)
更新:现在可以直接从 Azure Key Vault 获取 CSR,通过选择证书并点击“证书操作”→“下载 CSR”。
(4. 可选:使用 FI-API-Signtool 确保正确性)
签名的方式与此仓库类似,但官方代码更混乱,因为它是 C#。 GitHub - clearbank/fi-api-signtool
5. 开始使用此库
您的用户代码可能如下所示
let doSomeTransactions =
let clearbankDefaultConfig =
{
BaseUrl = "https://institution-api-sim.clearbank.co.uk/"
PrivateKey = "..."
AzureKeyVaultName = "myVault"
AzureKeyVaultCredentials = DefaultCredentials
} : ClearbankConfigruation
let azureKeyVaultCertificateName = "my-cert"
let fromAccount = UK_Domestic("60-01-34", "51112345")
let target1 =
{
To = UK_Domestic("20-20-15", "55555555")
AccountHolder = "Mr Test"
Sum = 123.00m
Currency = "GBP"
Description = "Phone Bill"
PaymentReference = "123456789"
TransactionId = "12345" // End-to-end: You identify corresponding webhooks with this.
} |> ClearBank.createCreditTransfer
let target2 =
{
To = UK_Domestic("40-47-84", "70872490")
AccountHolder = "John Doe"
Sum = 123.00m
Currency = "GBP"
Description = "Some money"
PaymentReference = "12345"
TransactionId = "12345"
} |> ClearBank.createCreditTransfer
let xReqId = Guid.NewGuid()
let instructions = ClearBank.createPaymentInstruction "Batch123" fromAccount [| target1 ; target2 |]
ClearBank.transferPayments clearbankDefaultConfig azureKeyVaultCertificateName xReqId [| instructions |] |> Async.RunSynchronously
如果您在 KeyVault 认证方面遇到问题,您可以更改配置中的 AzureKeyVaultCredentials。
let clearbankDefaultConfig =
{
BaseUrl = "https://institution-api-sim.clearbank.co.uk/"
PrivateKey = "..."
AzureKeyVaultName = "..."
AzureKeyVaultCertificateName = "..."
AzureKeyVaultCredentials =
CredentialsWithOptions (
Azure.Identity.DefaultAzureCredentialOptions (
//ExcludeEnvironmentCredential = true
//,ExcludeManagedIdentityCredential = true
ExcludeSharedTokenCacheCredential = true
,ExcludeVisualStudioCredential = true
//,ExcludeVisualStudioCodeCredential = true
//,ExcludeAzureCliCredential = true
//,ExcludeInteractiveBrowserCredential = true
))
LogUnsuccessfulHandler = None
} : ClearbankConfiguration
最后一个 LogUnsuccessfulHandler
属性是可选的错误日志回调。例如,您可以将其替换为 Some logging
,并有一个函数
let logging(status,content) =
match ClearBank.parseClarBankErrorContent content with
| ClearBankEmptyResponse -> Console.WriteLine "Response was empty"
| ClearBankTransactionError errors -> errors |> Seq.iter(fun (tid,err) -> Console.WriteLine("Transaction id " + tid + " failed for " + err))
| ClearBankGeneralError(title, detail) -> Console.WriteLine(title + ", " + detail)
| ClearBankUnknownError content -> Console.WriteLine("JSON: " + content)
创建账户
有方法 ClearBank.createNewAccount
可以用来创建新账户。
获取账户和交易
存在方法 ClearBank.getAccounts
,您可以使用它获取余额,以及 ClearBank.getTransactions
配置 pageSize pageNumber startDate endDate
Webhook 响应
为了接收 webhooks,您需要有外部库之外的自定义服务器,然而,此库中提供了一些辅助类。
使用这些类时,您的服务器代码可能看起来如下:
type CBWebhookController() as this =
inherit ApiController()
member __.Post ()
async {
// 1. Verify the webhook against your ClearBank public key:
// Download the public key (a .pem file) from your ClearBank portal and use a converter such as https://raskeyconverter.azurewebsites.net/PemToXml to convert the text to XML
let publicKeyXml = "<RSAKeyValue>...</RSAKeyValue>"
let signature = this.Request.Headers.GetValues("DigitalSignature") |> Seq.tryHead |> Option.map Convert.FromBase64String //add some error handling
let! bodyJson = this.Request.Content.ReadAsStringAsync() |> Async.AwaitTask
let! isVerified = ClearBank.verifySignature publicKeyXml signature bodyJson //proceed only if true
// 2. Parse and handle the request:
let parsed = ClearBankWebhooks.parsePaymentsCall bodyJson
// Use parsed.Type to get the webhook type.
// Different types may have the corresponding end-to-end transactionId in different places.
// Fetch your transaction based on that id, and do whatever you want.
// match parsed.Type with
// | "TransactionSettled" -> ...
// | "PaymentMessageAssessmentFailed" -> ...
// | "PaymentMessageValidationFailed" -> ...
// | "TransactionRejected" -> ...
// | _ -> (* "FITestEvent" *) ...
// 3. Create response
return! ClearBankWebhooks.createResponse clearbankDefaultConfig azureKeyVaultCertificateName this.Request parsed.Nonce
} |> Async.StartAsTask
要测试 webhooks,您可以使用例如 Fiddler 来组成它们,并使用 https://webhook.site/ 来获取它们的调用。
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET | net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 |
.NET Core | netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。 |
NET标准 | netstandard2.0 兼容。 netstandard2.1 兼容。 |
NET框架 | net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。 |
MonoAndroid | monoandroid 已计算。 |
MonoMac | monomac 已计算。 |
MonoTouch | monotouch 已计算。 |
Tizen | tizen40 已计算。 tizen60 已计算。 |
Xamarin.iOS | xamarinios 已计算。 |
Xamarin.Mac | xamarinmac 已计算。 |
Xamarin.TVOS | xamarintvos 已计算。 |
Xamarin.WatchOS | xamarinwatchos 已计算。 |
-
.NETStandard 2.0
- FSharp.Core (>= 8.0.200)
- FSharp.Data (>= 6.4.0)
- KeyVaultSigning (>= 1.0.10)
- Newtonsoft.Json (>= 13.0.3)
- SwaggerProvider (>= 2.0.1)
- System.Diagnostics.DiagnosticSource (>= 6.0.1)
-
.NETStandard 2.1
- FSharp.Core (>= 8.0.200)
- FSharp.Data (>= 6.4.0)
- KeyVaultSigning (>= 1.0.10)
- Newtonsoft.Json (>= 13.0.3)
- SwaggerProvider (>= 2.0.1)
- System.Diagnostics.DiagnosticSource (>= 6.0.1)
NuGet方案包
此包未由任何NuGet方案包使用。
GitHub仓库
此包未由任何流行的GitHub仓库使用。
版本 | 下载 | 最近更新 |
---|---|---|
1.0.25 | 248 | 7/14/2024 |
1.0.24 | 983 | 3/13/2024 |
1.0.23 | 105 | 3/12/2024 |
1.0.22 | 578 | 1/10/2024 |
1.0.21 | 180 | 1/3/2024 |
1.0.20 | 389 | 12/6/2023 |
1.0.19 | 145 | 12/1/2023 |
1.0.18 | 474 | 10/22/2023 |
1.0.16 | 993 | 6/29/2023 |
1.0.15 | 1,373 | 12/12/2022 |
1.0.14 | 411 | 12/2/2022 |
1.0.13 | 779 | 10/11/2022 |
1.0.10 | 2,097 | 10/21/2021 |
1.0.9 | 830 | 9/13/2021 |
1.0.8 | 766 | 4/14/2021 |
1.0.7 | 388 | 2/26/2021 |
1.0.6 | 432 | 2/19/2021 |
1.0.5 | 358 | 2/15/2021 |
1.0.4 | 376 | 2/12/2021 |
1.0.3 | 393 | 2/11/2021 |
1.0.2 | 396 | 2/5/2021 |
1.0.1 | 409 | 2/4/2021 |
1.0.0 | 369 | 2/2/2021 |
0.9.0 | 361 | 1/29/2021 |