ที่เก็บนี้ได้ย้ายไปที่ https://codeberg.org/hohlerde/netebics
นี่คือห้องสมุดลูกค้าที่ใช้โปรโตคอล EBICS สำหรับธนาคารออนไลน์ธุรกิจ
ไลบรารีเขียนด้วย C# (7.2) โดยใช้. NET Core 2.x และได้รับการทดสอบด้วยคีย์ส่วนตัว/สาธารณะ (ไฟล์ PEM) บน Linux/Windows
Netebics เป็นซอฟต์แวร์อัลฟ่าและไม่ควรใช้สำหรับการผลิต การเปลี่ยนแปลง API/การแตกหักมีแนวโน้มมาก
Netebics เป็น denpendent ในห้องสมุดต่อไปนี้:
Netebics ไม่ได้ใช้การฉีดพึ่งพา ดูไฟล์ CSPROJ สำหรับข้อมูลเพิ่มเติม
ตอนนี้ไม่มีแพ็คเกจ Nuget อย่างเป็นทางการดังนั้นคุณต้องสร้างห้องสมุดด้วยตัวเองโดยการโคลนนิ่งที่เก็บนี้
ตรวจสอบให้แน่ใจว่าคุณติดตั้ง. NET Core SDK เวอร์ชัน 2 หรือสูงกว่า
โคลนที่เก็บ
git clone https://github.com/hohlerde/NetEbics.git
สร้างห้องสมุด
cd NetEbics
dotnet pack -c Release
คุณจะพบแพ็คเกจ Nuget ภายใต้ bin/Release
ในการใช้ห้องสมุดคุณควรมีความเข้าใจที่ดีเกี่ยวกับโปรโตคอล EBICS
สิ่งแรกที่คุณต้องการทำในฐานะผู้ใช้ EBICS ใหม่คือการประกาศกุญแจ RSA สาธารณะของคุณไปยังธนาคารของคุณ คุณต้องสร้างคู่คีย์สาธารณะ/ส่วนตัวสามคู่สำหรับ (การตรวจสอบความถูกต้องลายเซ็นและปุ่มเข้ารหัส)
การสร้างคีย์นั้นง่ายด้วย 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 ( ) ;
}ปรับรหัสด้านบนและสร้างการรับรองความถูกต้อง ("auth.key") และการเข้ารหัส ("enc.key") คีย์
ประกาศคีย์ลายเซ็นสาธารณะของคุณไปยังธนาคารของคุณ โปรดทราบว่าคีย์ที่สร้างขึ้นก่อนหน้านี้จะถูกเก็บไว้ในรูปแบบ PEM และมีคีย์ส่วนตัวและสาธารณะ
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 ( ) ) ;หลังจากนั้นเราจำเป็นต้องประกาศการตรวจสอบความถูกต้องสาธารณะและปุ่มเข้ารหัส
// 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 ( ) ) ;การประกาศกุญแจไม่เพียงพอเนื่องจากธนาคารต้องแน่ใจว่ากุญแจเป็นของคุณจริงๆ ในการพิสูจน์สิ่งนี้คุณต้องส่งจดหมาย INI และ HIA ไปยังธนาคารของคุณ พวกเขามีค่าแฮชของกุญแจสาธารณะและลายเซ็นที่เป็นลายลักษณ์อักษรของคุณ ข้อกำหนด EBICS อธิบายรายละเอียดว่าตัวอักษรเหล่านี้ควรมีลักษณะอย่างไร
ในการสื่อสารผ่าน Ebics กับธนาคารคุณต้องมีกุญแจสาธารณะของธนาคารเนื่องจากต้องมีการเข้ารหัสข้อมูลและการรับรองข้อมูล
// 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 ) ; หากคุณไม่ได้อยู่ในสภาพแวดล้อม ASP.NET และต้องการดูเอาต์พุตบันทึกบางอย่างคุณสามารถทำได้เช่นเปิดใช้งาน serilog พร้อมกับการบันทึกส่วนขยายของ Microsoft
Log . Logger = new LoggerConfiguration ( )
. WriteTo . Console ( )
. MinimumLevel . Debug ( )
. CreateLogger ( ) ;
EbicsLogging . MethodLoggingEnabled = true ; // see entry/exit messages in log
EbicsLogging . LoggerFactory . AddSerilog ( ) ; คุณต้องอ้างอิง Serilog.Extensions.Logging และ Serilog.Sinks.Console ในไฟล์ csproj ของคุณเพื่อใช้ serilog
< ItemGroup >
< PackageReference Include = " Serilog.Extensions.Logging " Version = " 2.0.2 " />
< PackageReference Include = " Serilog.Sinks.Console " Version = " 3.1.2-dev-00771 " />
</ ItemGroup > ในสภาพแวดล้อม asp.net คุณเพียงแค่ต้องผ่านอินสแตนซ์ LoggerFactory ที่คุณได้รับจากคอนเทนเนอร์ฉีด depency ไปยัง Netebics
public MyController ( ILoggerFactory loggerFactory )
{
EbicsLogging . MethodLoggingEnabled = true ;
EbicsLogging . LoggerFactory = loggerFactory ;
}ดู File License.txt สำหรับข้อมูลเพิ่มเติม