Repositori ini telah pindah ke https://codeberg.org/hohlerde/netebics
Ini adalah perpustakaan klien yang menerapkan protokol EBICS untuk perbankan online bisnis.
Perpustakaan ditulis dalam C# (7.2) menggunakan .NET Core 2.x dan diuji dengan kunci pribadi/publik (file PEM) di Linux/Windows.
Netebics adalah perangkat lunak Alpha dan tidak boleh digunakan untuk produksi . Perubahan API/Breaking sangat mungkin.
Netebics adalah denpendent di perpustakaan berikut:
Netebics tidak menggunakan injeksi ketergantungan. Lihat file csproj untuk informasi lebih lanjut.
Saat ini tidak ada paket nuget resmi yang tersedia, jadi Anda harus membangun perpustakaan sendiri dengan mengkloning repositori ini.
Pastikan Anda memiliki .NET Core SDK Versi 2 atau lebih tinggi diinstal.
Klon Repositori.
git clone https://github.com/hohlerde/NetEbics.git
Bangun Perpustakaan.
cd NetEbics
dotnet pack -c Release
Anda akan menemukan paket Nuget di bawah bin/Release .
Untuk menggunakan perpustakaan, Anda harus memiliki pemahaman yang baik tentang protokol EBICS.
Hal pertama yang ingin Anda lakukan sebagai pengguna EBICS baru adalah mengumumkan kunci RSA publik Anda ke bank Anda. Anda perlu membuat tiga pasangan kunci publik/pribadi untuk ini (kunci otentikasi, tanda tangan dan enkripsi).
Membuat kunci mudah dengan Bouncycastle.
var gen = GeneratorUtilities . GetKeyPairGenerator ( "RSA" ) ;
gen . Init ( new KeyGenerationParameters ( new SecureRandom ( ) , 4096 ) ) ;
var signKeyPair = gen . GenerateKeyPair ( ) ;
using ( TextWriter sw = new StreamWriter ( "sign.key" ) )
{
var pw = new PemWriter ( sw ) ;
pw . WriteObject ( signKeyPair ) ;
sw . Flush ( ) ;
}Sesuaikan kode di atas dan juga buat otentikasi ("auth.key") dan kunci enkripsi ("enc.key").
Umumkan kunci tanda tangan publik Anda ke bank Anda. Perhatikan bahwa tombol yang dihasilkan sebelumnya disimpan dalam format PEM dan berisi kunci pribadi dan publik.
AsymmetricCipherKeyPair signKey ;
using ( var sr = new StringReader ( File . ReadAllText ( "sign.key" ) . Trim ( ) ) )
{
var pr = new PemReader ( sr ) ;
signKey = pr . ReadObject ( ) ;
}
var signCert = KeyUtils . CreateX509Certificate2 ( signKey ) ;
var client = EbicsClient . Factory ( ) . Create ( new EbicsConfig
{
Address = "The EBICS URL you got from your bank, i.e. https://ebics-server.com/" ,
Insecure = true ,
TLS = true ,
User = new UserParams
{
HostId = "The host ID of your bank" ,
PartnerId = "Your partner ID you got from your bank" ,
UserId = "Your user ID you got from your bank" ,
SignKeys = new SignKeyPair
{
Version = SignVersion . A005 , // only A005 is supported right now
TimeStamp = DateTime . Now ,
Certificate = signCert // internally we work with keys
}
}
} ) ;
var resp = c . INI ( new IniParams ( ) ) ;Setelah itu kita perlu mengumumkan kunci otentikasi dan enkripsi publik.
// loading of keys "auth.key" and "enc.key" omitted
var authCert = KeyUtils . CreateX509Certificate2 ( authKey ) ;
var encCert = KeyUtils . CreateX509Certificate2 ( encKey ) ;
var client = EbicsClient . Factory ( ) . Create ( new EbicsConfig
{
Address = "The EBICS URL you got from your bank, i.e. https://ebics-server.com/" ,
Insecure = true ,
TLS = true ,
User = new UserParams
{
HostId = "The host ID of your bank" ,
PartnerId = "Your partner ID" ,
UserId = "Your user ID" ,
AuthKeys = new AuthKeyPair
{
Version = AuthVersion . X002 ,
TimeStamp = DateTime . Now ,
Certificate = authCert
} ,
CryptKeys = new CryptKeyPair
{
Version = CryptVersion . E002 ,
TimeStamp = DateTime . Now ,
Certificate = encCert
}
}
} ) ;
var resp = c . HIA ( new HiaParams ( ) ) ;Mengumumkan kunci tidak cukup, karena bank perlu yakin bahwa kunci itu benar -benar milik Anda. Untuk membuktikan ini, Anda perlu mengirim surat -surat INI dan HIA ke bank Anda. Mereka berisi nilai -nilai hash dari kunci publik Anda dan tanda tangan tertulis Anda. Spesifikasi EBICS menjelaskan secara terperinci seperti apa huruf -huruf ini.
Untuk berkomunikasi melalui EBIC dengan bank, Anda memerlukan kunci publik bank, karena data yang dipertukarkan perlu dienkripsi dan diautentikasi.
// loading of keys "auth.key" and "enc.key" omitted
var authCert = KeyUtils . CreateX509Certificate2 ( authKey ) ;
var encCert = KeyUtils . CreateX509Certificate2 ( encKey ) ;
var client = EbicsClient . Factory ( ) . Create ( new EbicsConfig
{
Address = "The EBICS URL you got from your bank, i.e. https://ebics-server.com/" ,
Insecure = true ,
TLS = true ,
User = new UserParams
{
HostId = "The host ID of your bank" ,
PartnerId = "Your partner ID" ,
UserId = "Your user ID" ,
AuthKeys = new AuthKeyPair
{
Version = AuthVersion . X002 ,
TimeStamp = DateTime . Now ,
Certificate = authCert
} ,
CryptKeys = new CryptKeyPair
{
Version = CryptVersion . E002 ,
TimeStamp = DateTime . Now ,
Certificate = encCert
}
}
} ) ;
var hpbResp = c . HPB ( new HpbParams ( ) ) ;
if ( hpbResp . TechnicalReturnCode != 0 || hpbResp . BusinessReturnCode != 0 )
{
// handle error
return ;
}
c . Config . Bank = resp . Bank ; // set bank's public keys
// now issue other commands // loading of keys "auth.key", "enc.key" and "sign.key" omitted
var authCert = KeyUtils . CreateX509Certificate2 ( authKey ) ;
var encCert = KeyUtils . CreateX509Certificate2 ( encKey ) ;
var signCert = KeyUtils . CreateX509Certificate2 ( signKey ) ;
var client = EbicsClient . Factory ( ) . Create ( new EbicsConfig
{
Address = "The EBICS URL you got from your bank, i.e. https://ebics-server.com/" ,
Insecure = true ,
TLS = true ,
User = new UserParams
{
HostId = "The host ID of your bank" ,
PartnerId = "Your partner ID" ,
UserId = "Your user ID" ,
AuthKeys = new AuthKeyPair
{
Version = AuthVersion . X002 ,
TimeStamp = DateTime . Now ,
Certificate = authCert
} ,
CryptKeys = new CryptKeyPair
{
Version = CryptVersion . E002 ,
TimeStamp = DateTime . Now ,
Certificate = encCert
} ,
SignKeys = new SignKeyPair
{
Version = SignVersion . A005 ,
TimeStamp = DateTime . Now ,
Certificate = signCert
}
}
} ) ;
var hpbResp = c . HPB ( new HpbParams ( ) ) ;
if ( hpbResp . TechnicalReturnCode != 0 || hpbResp . BusinessReturnCode != 0 )
{
// handle error
return ;
}
c . Config . Bank = resp . Bank ; // set bank's public keys
// create credit transfer data structure
var cctParams = new CctParams
{
InitiatingParty = "Your name" ,
PaymentInfos = new [ ]
{
new CreditTransferPaymentInfo
{
DebtorName = "Sender's name" ,
DebtorAccount = "Sender's IBAN" ,
DebtorAgent = "Sender's BIC" ,
ExecutionDate = "2018-05-15" ,
CreditTransferTransactionInfos = new [ ]
{
new CreditTransferTransactionInfo
{
Amount = "1.00" ,
CreditorName = "Receiver's name" ,
CreditorAccount = "Receiver's IBAN" ,
CreditorAgent = "Receiver's BIC" ,
CurrencyCode = "EUR" ,
EndToEndId = "something" ,
RemittanceInfo = "Unstructured information for receiver" ,
}
}
}
}
} ;
var cctResp = c . CCT ( cctParams ) ; Jika Anda tidak berada di lingkungan ASP.NET dan ingin melihat beberapa output log, misalnya Anda dapat mengaktifkan serilog bersama dengan logging Microsoft Extensions.
Log . Logger = new LoggerConfiguration ( )
. WriteTo . Console ( )
. MinimumLevel . Debug ( )
. CreateLogger ( ) ;
EbicsLogging . MethodLoggingEnabled = true ; // see entry/exit messages in log
EbicsLogging . LoggerFactory . AddSerilog ( ) ; Anda perlu referensi Serilog.Extensions.Logging dan Serilog.Sinks.Console dalam file csproj Anda untuk menggunakan serilog.
< ItemGroup >
< PackageReference Include = " Serilog.Extensions.Logging " Version = " 2.0.2 " />
< PackageReference Include = " Serilog.Sinks.Console " Version = " 3.1.2-dev-00771 " />
</ ItemGroup > Dalam lingkungan ASP.NET, Anda hanya perlu melewati instance LoggerFactory yang Anda dapatkan dari wadah injeksi depensi ke netebics.
public MyController ( ILoggerFactory loggerFactory )
{
EbicsLogging . MethodLoggingEnabled = true ;
EbicsLogging . LoggerFactory = loggerFactory ;
}Lihat lisensi file.txt untuk informasi lebih lanjut.