COGWare.CyberSourceRefunds
1.0.2
dotnet add package COGWare.CyberSourceRefunds --version 1.0.2
NuGet\Install-Package COGWare.CyberSourceRefunds -Version 1.0.2
<PackageReference Include="COGWare.CyberSourceRefunds" Version="1.0.2" />
paket add COGWare.CyberSourceRefunds --version 1.0.2
#r "nuget: COGWare.CyberSourceRefunds, 1.0.2"
// Install COGWare.CyberSourceRefunds as a Cake Addin #addin nuget:?package=COGWare.CyberSourceRefunds&version=1.0.2 // Install COGWare.CyberSourceRefunds as a Cake Tool #tool nuget:?package=COGWare.CyberSourceRefunds&version=1.0.2
CyberSource Credit Card Refunds
Process refunds for transactions submitted via the CyberSource payment platform
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.CyberSourceRefunds -Version <version>
Install-Package Microsoft.Extensions.Logging.Abstractions
CLI:
dotnet add package --version <version> COGWare.CyberSourceRefunds
dotnet add package Microsoft.Extensions.Logging.Abstractions
Add Config
Add the CyberSourceRefunds.IsProduction key to your settings file, eg:
<add key="CyberSourceRefunds.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 CyberSourceRefunds.RefundHelper.ProcessRefund(
// An instance of the RefundConfig object containing details of the
// CyberSource entity that the original transaction was processed against.
// These details are available in the CyberSource Merchant Console.
new RefundConfig() {
// The merchant identifier.
MID = "your_mid_here",
// Your merchant API key.
MerchantKey = "you_merchant_key_here",
// Your merchant API secret.
MerchantSecret = "your_merchant_secret_here"
},
// An instance of a Refund object representing the refund to be processed.
new Refund() {
// The amount to be refunded.
Amount = 1,
// Your refund identifier (must be unique).
Id = "your_unique_identifier_here",
// This will appear as the reference for the refund
Comments = "your_comment_here",
// The original (CyberSource) RequestId of the authorization
RequestId = "CyberSource_requestId_here"
},
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! " +
"Your refund identifier: '" + refundResult.Id + "', " +
"CyberSource refund reference: '" + refundResult.RefundId + "'");
} else {
// Update the status of the refund in your refund system, optionally including the
// errors for analysis and manual resolution (if necessary).
Console.WriteLine("Refund ('" + refundResult.Id + "') failed: " +
refundResult?.Reason + " - " +
refundResult?.Message);
}
} 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 CyberSourceRefunds.RefundHelper.ProcessRefund(
// An instance of the RefundConfig object containing details of the
// CyberSource entity that the original transaction was processed against.
// These details are available in the CyberSource Merchant Console.
new RefundConfig() {
// The merchant identifier.
MID = "your_mid_here",
// Your merchant API key.
MerchantKey = "you_merchant_key_here",
// Your merchant API secret.
MerchantSecret = "your_merchant_secret_here"
},
// An instance of a Refund object representing the refund to be processed.
new Refund() {
// The amount to be refunded.
Amount = 1,
// Your refund identifier (must be unique).
Id = "your_unique_identifier_here",
// This will appear as the reference for the refund
Comments = "your_comment_here",
// The original (CyberSource) RequestId of the authorization
RequestId = "CyberSource_requestId_here"
});
// 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! " +
"Your refund identifier: '" + refundResult.Id + "', " +
"CyberSource refund reference: '" + refundResult.RefundId + "'");
} else {
// Update the status of the refund in your refund system, optionally including the
// errors for analysis and manual resolution (if necessary).
Console.WriteLine("Refund ('" + refundResult.Id + "') failed: " +
refundResult?.Reason + " - " +
refundResult?.Message);
}
} catch(Exception ex) {
Console.WriteLine("ERROR: " + ex.GetBaseException().Message);
}
Response object:
RefundResult
An object representing the response from the CyberSource API.
Id
:(String) - Your refund identifier.RefundId
: (String) - The CyberSource transaction identifier for this specific refund.ClientReferenceInformation
(Object) - Information you can use to reference this refund request.Code
(String) - A code associated with this refund request.TransactionId
(String) - Your unique refund transaction identifier.Comments
(String) - The comment submitted along with this refund request.
ErrorInformation
(Object) - May be populated with error details - depending on severity of error.Reason
(String) - Reason for the error.Message
(String) - Detail of the error.
ProcessorInformation
(Object) - Upstream processing information.ApprovalCode
(String) - ?NetworkTransactionId
(String) - ?RetrievalReferenceNumber
(String) - ?ResponseCode
(String) - Not sure, but it seems '00' is good.
ReconciliationId
: (String) - This seems to match the original RequestId.Status
: (String) - Usually "PENDING" since the refund is not immediately processed.Reason
: (String) - Usually provides the reason for the refund being rejected.Message
: (String) - A longer description for the associated reason.Details
: (List) - If there are specific fields that are invalid, this collection can contain details of those offending items.Field
(String) - The invalid/offencding field.Reason
(String) - The reason why CyberSource has taken offence to this field/value.
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
The CyberSource documentation can be a bit overwhelming to wade through. Warning: here be dragons!
- Create a CyberSource sandbox account
- Create a CyberSource REST API key
- CyberSource response error codes
- CyberSource refunds
- CyberSource refund API documentation
Feedback
I welcome comments, suggestions, feature requests and even honest criticism 😃
Heck, just let me know if you found this useful at all.
- 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.
Added exception handling for missing config, support for .NET 4.8, and some basic metrics to determine usage.