COGWare.PeachRefunds
2.0.1
dotnet add package COGWare.PeachRefunds --version 2.0.1
NuGet\Install-Package COGWare.PeachRefunds -Version 2.0.1
<PackageReference Include="COGWare.PeachRefunds" Version="2.0.1" />
paket add COGWare.PeachRefunds --version 2.0.1
#r "nuget: COGWare.PeachRefunds, 2.0.1"
// Install COGWare.PeachRefunds as a Cake Addin #addin nuget:?package=COGWare.PeachRefunds&version=2.0.1 // Install COGWare.PeachRefunds as a Cake Tool #tool nuget:?package=COGWare.PeachRefunds&version=2.0.1
Peach Payments Transaction Refunds
Process refunds for transactions submitted via the Peach Payments payment gateway
Getting Started
Install this NuGet package and the Microsoft.Extensions.Logging.Abstractions
package into your .NET Core 6 or .NET Framework 4.8 application.
Package Manager:
Install-Package COGWare.PeachRefunds -Version <version>
Install-Package Microsoft.Extensions.Logging.Abstractions
CLI:
dotnet add package --version <version> COGWare.PeachRefunds
dotnet add package Microsoft.Extensions.Logging.Abstractions
Add Config
Add the PeachRefunds.IsProduction key to your settings file, eg:
<add key="PeachRefunds.IsProduction" value="false" />
Usage
With logging:
// Create your logger from the logging framework's extensions package (in this case, NLog)
var logger = LoggerFactory.Create(builder => builder.AddNLog()).CreateLogger<Program>();
logger.LogInformation("starting");
try {
RefundResult? refundResult = await PeachRefunds.RefundHelper.ProcessRefund(
// An instance of the RefundConfig object containing details of the
// Peach Payments entity that the original transaction was processed against.
// These details are available in the Peach Payments Console.
new RefundConfig() {
// Your merchant entityId.
EntityId = "xyz123",
// Your merchant secret.
Secret = "123xyz"
},
// An instance of a Refund object representing the refund to be processed.
new Refund() {
// The amount to be refunded.
Amount = 1.00,
// Currency code.
Currency = "ZAR",
// Your refund identifier.
Id = "1",
// The original (Peach Payments) transactionId of the payment.
TransactionId = "456xyz"
},
// optional logger
logger);
// Checks the status of the refund against the API response codes to
// determine if the refund can be considered successful.
if(refundResult!.IsSuccessful) {
// Update the status of the refund in your refund system.
Console.WriteLine("Refund processed successfully! " +
"Refund reference: '" + refundResult.Id + "'");
} else {
// Update the status of the refund in your refund system, optionally including the
// return code and description for analysis and manual resolution (if necessary).
Console.WriteLine("Refund failed: " +
refundResult.Result!.Code + ", " +
refundResult.Result!.Description);
}
} catch(Exception ex) {
Console.WriteLine("ERROR: " + ex.GetBaseException().Message);
}
logger.LogInformation("complete");
Without logging:
Note: Even though you have opted not log, your project will still require a reference to Microsoft.Extensions.Logging.Abstractions
.
try {
RefundResult? refundResult = await PeachRefunds.RefundHelper.ProcessRefund(
// An instance of the RefundConfig object containing details of the
// Peach Payments entity that the original transaction was processed against.
// These details are available in the Peach Payments Console.
new RefundConfig() {
// Your merchant entityId.
EntityId = "xyz123",
// Your merchant secret.
Secret = "123xyz"
},
// An instance of a Refund object representing the refund to be processed.
new Refund() {
// The amount to be refunded.
Amount = 1.00,
// Currency code.
Currency = "ZAR",
// Your refund identifier.
Id = "1",
// The original (Peach Payments) transactionId of the payment.
TransactionId = "456xyz"
});
// Checks the status of the refund against the API response codes to
// determine if the refund can be considered successful.
if(refundResult!.IsSuccessful) {
// Update the status of the refund in your refund system.
Console.WriteLine("Refund processed successfully! " +
"Refund reference: '" + refundResult.Id + "'");
} else {
// Update the status of the refund in your refund system, optionally including the
// return code and description for analysis and manual resolution (if necessary).
Console.WriteLine("Refund failed: " +
refundResult.Result!.Code + ", " +
refundResult.Result!.Description);
}
} catch(Exception ex) {
Console.WriteLine("ERROR: " + ex.GetBaseException().Message);
}
Response object:
RefundResult
An object representing the response from the Peach Payments API.
Id
:(String) - The Peach Payments transaction identifier for this specific refund.ReferenceId
: (String) - The original payment transaction identifier.PaymentType
: (String) - This will be "RF", denoting a refund.Amount
: (String) - The amount that was refunded.Currency
: (String) - The currency that the refund was processed in.Descriptor
: (String) - The merchant payment description.MerchantTransactionId
(String) - The original merchant transaction id.Result
(Object) - An object containing the refund response result.Code
(String) - The Peach Payments response code.Description
(String) - Description associated with the response code.
ResultDetail
(Object) - An object containing the technical details of the refundConnectorTxID1
(String) - Downstream (credit card issuer) connection transaction identifier.ConnectorTxID2
(String) - Additional downstream (credit card issuer) connection transaction identifier.AuthorisationCode
(String) - Downstream (credit card issuer) authorization code.AcquirerReference
(String) - Downstream (credit card issuer) reference.AcquirerResponse
(String) - Downstream (credit card issuer) response.
BuildNumber
(String) - Peach Payments refund module build number.Timestamp
(DateTime) - When this refund was processed.NDC
(String) - No idea, will find out.IsSuccessful
(Boolean) - A flag indicating if the refund was successfully processed.
Logging:
Implements Microsoft.Extensions.Logging, so log away with any compatible logging framework,eg: NLog This package logs at DEBUG level.
Additional documentation
Feedback
I welcome comments, suggestions, feature requests and even honest criticism 😃
- Github Repo
- Email: lance@cogware.co.za
Want to show your appreciation?
That's mighty generous - thank you!
Buy me a coffee
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Framework | net48 is compatible. net481 was computed. |
-
.NETFramework 4.8
- Microsoft.Extensions.Logging (>= 7.0.0)
- Newtonsoft.Json (>= 13.0.3)
- RestSharp (>= 110.2.0)
- System.Configuration.ConfigurationManager (>= 7.0.0)
-
net6.0
- Microsoft.Extensions.Logging (>= 7.0.0)
- Newtonsoft.Json (>= 13.0.3)
- RestSharp (>= 110.2.0)
- System.Configuration.ConfigurationManager (>= 7.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Forgot to update the sample code in README with the new namespace.