cancel
Showing results for 
Search instead for 
Did you mean: 

Cancelling/refund a transaction using CyberSource API in .NET

I am using the CyberSource API for Payment Gateway. I went through all the documentations that are available and came up with the following code:

  1. First I added the service reference to CyberSource using url https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.60.wsdl /omeglzechat

  1. Then I added the following code for making a transaction and then cancelling it. But somehow, cancelling does not seem to work. I am not sure what I am doing wrong as there is very little documentation available on the net.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    using PaymentGatewayConsole.CyberSourceTest;
    
    namespace PaymentGatewayConsole
    {
        class Program
        {
                    private const String MERCHANT_ID = "removed";
                    private const String TRANSACTION_KEY = "removed";
                    private static string REQUEST_TOKEN = string.Empty;
                    private static string REQUEST_ID = string.Empty;
    
            static void Main(string[] args)
            {
                MakePayment(); 
    
                RequestRefund();
            }
    
    private static void MakePayment()
    {
        RequestMessage request = new RequestMessage();
        request.merchantID = MERCHANT_ID;
        // replace request.merchantReferenceCode with reference number for the current transaction.
        request.merchantReferenceCode = "123";
        request.clientLibrary = ".NET WCF";
        request.clientLibraryVersion = Environment.Version.ToString();
        request.clientEnvironment = Environment.OSVersion.Platform + Environment.OSVersion.Version.ToString();
    
        request.ccAuthService = new CCAuthService();
        request.ccAuthService.run = "true";
    
        BillTo billTo = new BillTo();
        billTo.firstName = "John";
        billTo.lastName = "Doe";
        billTo.street1 = "1295 Charleston Road";
        billTo.city = "Mountain View";
        billTo.state = "CA";
        billTo.postalCode = "94043";
        billTo.country = "US";
        billTo.email = "null@cybersource.com";
        billTo.ipAddress = "10.7.111.111";
        request.billTo = billTo;
    
        Card card = new Card();
        card.accountNumber = "4111111111111111";
        card.expirationMonth = "12";
        card.expirationYear = "2020";
        card.cardType = "Visa";
        request.card = card;
    
        PurchaseTotals purchaseTotals = new PurchaseTotals();
        purchaseTotals.currency = "USD";
        request.purchaseTotals = purchaseTotals;
    
        request.item = new Item[1];
        Item item = new Item();
        item.id = "0";
        item.unitPrice = "49.00";
        request.item[0] = item;
    
        try
        {
            TransactionProcessorClient proc = new TransactionProcessorClient();
    
            proc.ChannelFactory.Credentials.UserName.UserName = request.merchantID;
            proc.ChannelFactory.Credentials.UserName.Password = TRANSACTION_KEY;
    
            ReplyMessage reply = proc.runTransaction(request);
    
            REQUEST_ID = reply.requestID;
            REQUEST_TOKEN = reply.requestToken;
    
            Console.WriteLine("decision = " + reply.decision);
            Console.WriteLine("reasonCode = " + reply.reasonCode);
            Console.WriteLine("requestID = " + reply.requestID);
            Console.WriteLine("requestToken = " + reply.requestToken);
            Console.WriteLine("ccAuthReply.reasonCode = " + reply.ccAuthReply.reasonCode);
        }
        catch (TimeoutException e)
        {
            Console.WriteLine("TimeoutException: " + e.Message + "\n" + e.StackTrace);
        }
        catch (FaultException e)
        {
            Console.WriteLine("FaultException: " + e.Message + "\n" + e.StackTrace);
        }
        catch (CommunicationException e)
        {
            Console.WriteLine("CommunicationException: " + e.Message + "\n" + e.StackTrace);
        }
        Console.ReadLine();
    }
    
    /// <summary>
    /// Method for requesting refund 
    /// </summary>
    private static void RequestRefund()
    {
        RequestMessage request = new RequestMessage();
        request.merchantID = MERCHANT_ID;
        request.merchantReferenceCode = "123";
        request.clientLibrary = ".NET WCF";
        request.clientLibraryVersion = Environment.Version.ToString();
        request.clientEnvironment = Environment.OSVersion.Platform + Environment.OSVersion.Version.ToString();
    
        request.ccAuthService = new CCAuthService();
        request.ccAuthService.run = "true";
    
        //request.ccAuthReversalService = new CCAuthReversalService();
        //request.ccAuthReversalService.run = "true";
        //request.ccAuthReversalService.authRequestID = REQUEST_ID;
        //request.orderRequestToken = REQUEST_TOKEN;
        //request.purchaseTotals = new PurchaseTotals();
        //request.purchaseTotals.currency = "USD";
        //request.purchaseTotals.grandTotalAmount = "10";
    
        VoidService reqVoid = new VoidService();
        reqVoid.voidRequestID = REQUEST_ID;
        reqVoid.voidRequestToken = REQUEST_TOKEN;
        reqVoid.run = "true";
        request.voidService = reqVoid;
    
        try
        {
            TransactionProcessorClient proc = new TransactionProcessorClient();
            proc.ChannelFactory.Credentials.UserName.UserName = request.merchantID;
            proc.ChannelFactory.Credentials.UserName.Password = TRANSACTION_KEY;
    
            ReplyMessage reply = proc.runTransaction(request);
    
            Console.WriteLine("decision = " + reply.decision);
            Console.WriteLine("reasonCode = " + reply.reasonCode);
            Console.WriteLine("requestID = " + reply.requestID);
            Console.WriteLine("requestToken = " + reply.requestToken);
    
        }
        catch (TimeoutException e)
        {
            Console.WriteLine("TimeoutException: " + e.Message + "\n" + e.StackTrace);
        }
        catch (FaultException e)
        {
            Console.WriteLine("FaultException: " + e.Message + "\n" + e.StackTrace);
        }
        catch (CommunicationException e)
        {
            Console.WriteLine("CommunicationException: " + e.Message + "\n" + e.StackTrace);
    
        }
        Console.ReadLine();
            }
        }
    }

In method request refund, i am actually getting the response as Request.ReasonCode = 102 which means an error. Ideally it should be 100. 102 means "One or more fields in the request contains invalid data.".

Help is deeply appreciated...

MurbiesWalto
Member
2 REPLIES 2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using PaymentGatewayConsole.CyberSourceTest;

namespace PaymentGatewayConsole
{
    class Program
    {
                private const String MERCHANT_ID = "removed";
                private const String TRANSACTION_KEY = "removed";
                private static string REQUEST_TOKEN = string.Empty;
                private static string REQUEST_ID = string.Empty;

        static void Main(string[] args)
        {
            MakePayment(); 

            RequestRefund();
        }

private static void MakePayment()
{
    RequestMessage request = new RequestMessage();
    request.merchantID = MERCHANT_ID;
    // replace request.merchantReferenceCode with reference number for the current transaction.
    request.merchantReferenceCode = "123";
    request.clientLibrary = ".NET WCF";
    request.clientLibraryVersion = Environment.Version.ToString();
    request.clientEnvironment = Environment.OSVersion.Platform + Environment.OSVersion.Version.ToString();

    request.ccAuthService = new CCAuthService();
richardhensen
Member

Hi, @MurbiesWalto : Could you please share your request and response ?

 

rajvpate
Administrator Administrator
Administrator