RickardPettersson / swish-api-csharp

Swish For Merchant API Client .Net Standard Library
MIT License
29 stars 14 forks source link

Lagt till funktionalitet för payout #7

Closed ikinz closed 3 years ago

ikinz commented 3 years ago

Beskrivning

Lagt till funktionalitet för nya payout. Försökt följa din kodlayout så mycket som möjligt men det är så klart fritt fram att ändra runt.

Tänk på att installera rätt certifikat. Endast Swish_Merchant_TestSigningCertificate_1234679304.p12 fungerar för signering i mss. Samma certifikat som vanligt används dock för anropet.

Nya filer

Modeller

PayoutRequestEnvelope.cs

Objekt som skickas till Swish. Innehåller följande:

Efter objektet skapats är det viktigt att funktionen PayoutRequestEnvelope.buildSignature(); körs. Denna funktion bygger upp signaturfältet utefter data i payload. Notera att payloadobjektet måste vara klart. Inget får förändras efter buildSignature() körs. Skulle något förändras, kör funktionen igen.

buildSignature() kommer leta upp certifikatet, från din store, med samma serienummer som skickas med till client.MakePayoutRequest(). Se till att rätt certifikat hittas där.

En liten konstig sak som inte var jättetydlig i Swish dokumentation är att payload-objektet måste hashas två gånger. Det är löst i koden men om någon vill pilla kan det vara bra att veta. I min kod körs först en computeHash() och sedan görs en ytterligare hashning i RSA.signData()-funktionen. Det fungerar även att köra SHA512Managed.computeHash() två gånger och sedan köra RSA.signHash() istället. RSA.signHash() gör ingen hashning själv.

PayoutRequestData.cs

Dataobjekt som skickas

PayoutRequestResponse.cs

Returdata

HTTP-loggning

Lagt till ett mellanlager som kan ge output med den data som skickas och tas emot. Hjälpte enormt vid utveckling av detta så lämnade det kvar. Sätts på genom att sätta: client._enableHTTPLog = true;

Ändringar

Client.cs

Lagt till funktion MakePayoutRequest samt lagt till stöd för HTTP-loggning.

SwishApiConsoleTest

Lagt till test för MakePayoutRequest.

Notera att du måste lägga in ett riktigt personnummer till makePayoutRequest() innan du kör.

RickardPettersson commented 3 years ago

Nice, bra jobbat! Tack för att du gjorde det jobbet, låg på en todo lista som fanns lite annat prioriterat att kolla på.

ikinz commented 3 years ago

Lugnt :). Har en kund som behövde det så var lite skoj att sätta sig in i det.