使用.NET中的CyberSource API取消/退款交易

使用.NET中的CyberSource API取消/退款交易,.net,payment-gateway,.net,Payment Gateway,我正在使用CyberSourceAPI作为支付网关。我查阅了所有可用的文档,得出了以下代码: 首先,我使用url将服务引用添加到CyberSource 然后,我添加了下面的代码,用于创建一个事务,然后取消它。但不知何故,取消似乎不起作用。我不确定我做错了什么,因为网上几乎没有可用的文档 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Servic

我正在使用CyberSourceAPI作为支付网关。我查阅了所有可用的文档,得出了以下代码:

  • 首先,我使用url将服务引用添加到CyberSource

  • 然后,我添加了下面的代码,用于创建一个事务,然后取消它。但不知何故,取消似乎不起作用。我不确定我做错了什么,因为网上几乎没有可用的文档

    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();
            }
        }
    }
    
    使用系统;
    使用System.Collections.Generic;
    使用System.Linq;
    使用系统文本;
    使用System.ServiceModel;
    使用PaymentGatewayConsole.CyberSourceTest;
    命名空间PaymentGatewayConsole
    {
    班级计划
    {
    私有常量字符串\u ID=“已删除”;
    私有常量字符串事务\u KEY=“已删除”;
    私有静态字符串请求\u令牌=string.Empty;
    私有静态字符串请求\u ID=string.Empty;
    静态void Main(字符串[]参数)
    {
    付款();
    请求退款();
    }
    私人静态支付()
    {
    RequestMessage请求=新的RequestMessage();
    request.merchantID=商户ID;
    //用当前交易的参考号替换request.merchantReferenceCode。
    request.merchantReferenceCode=“123”;
    request.clientLibrary=“.NET WCF”;
    request.clientLibraryVersion=Environment.Version.ToString();
    request.clientEnvironment=Environment.OSVersion.Platform+Environment.OSVersion.Version.ToString();
    request.ccAuthService=新的ccAuthService();
    request.ccAuthService.run=“true”;
    BillTo BillTo=新BillTo();
    billTo.firstName=“约翰”;
    billTo.lastName=“Doe”;
    billTo.street1=“查尔斯顿路1295号”;
    billTo.city=“山景”;
    billTo.state=“CA”;
    billTo.postalCode=“94043”;
    billTo.country=“美国”;
    billTo.email=”null@cybersource.com";
    billTo.ipAddress=“10.7.111.111”;
    request.billTo=billTo;
    卡片=新卡片();
    card.accountNumber=“4111111111”;
    card.expirationMonth=“12”;
    card.expirationYear=“2020”;
    card.cardType=“Visa”;
    request.card=卡片;
    PurchaseTotals PurchaseTotals=新的PurchaseTotals();
    purchaseTotals.currency=“USD”;
    request.purchaseTotals=purchaseTotals;
    request.item=新项[1];
    项目=新项目();
    item.id=“0”;
    item.unitPrice=“49.00”;
    请求.项[0]=项;
    尝试
    {
    TransactionProcessorClient proc=新建TransactionProcessorClient();
    proc.ChannelFactory.Credentials.UserName.UserName=request.merchantID;
    proc.ChannelFactory.Credentials.UserName.Password=事务密钥;
    ReplyMessage reply=proc.runTransaction(请求);
    REQUEST\u 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”);
    }
    捕获(超时异常e)
    {
    Console.WriteLine(“TimeoutException:”+e.Message+“\n”+e.StackTrace);
    }
    捕获(错误异常e)
    {
    Console.WriteLine(“FaultException:+e.Message+”\n“+e.StackTrace);
    }
    捕获(通信异常e)
    {
    Console.WriteLine(“通信异常:“+e.Message+”\n“+e.StackTrace”);
    }
    Console.ReadLine();
    }
    /// 
    ///申请退款的方法
    /// 
    私有静态void requestreturn()
    {
    RequestMessage请求=新的RequestMessage();
    request.merchantID=商户ID;
    request.merchantReferenceCode=“123”;
    request.clientLibrary=“.NET WCF”;
    request.clientLibraryVersion=Environment.Version.ToString();
    request.clientEnvironment=Environment.OSVersion.Platform+Environment.OSVersion.Version.ToString();
    request.ccAuthService=新的ccAuthService();
    request.ccAuthService.run=“true”;
    //request.ccAuthReversalService=新的ccAuthReversalService();
    //request.ccAuthReversalService.run=“true”;
    //request.ccAuthReversalService.authRequestID=请求\u ID;
    //request.orderRequestToken=请求\令牌;
    //request.purchaseTotals=新的purchaseTotals();
    //request.purchaseTotals.currency=“USD”;
    //request.purchaseTotals.grandTotalAmount=“10”;
    VoidService reqVoid=新的VoidService();
    reqVoid.voidRequestID=请求\u ID;
    reqVoid.voidRequestToken=请求令牌;
    reqVoid.run=“true”;
    request.voidService=reqVoid;
    尝试
    {
    TransactionProcessorClient proc=新建TransactionProcessorClient();
    proc.ChannelFactory.Credentials.UserName.UserName=request.merchantID;
    proc.ChannelFactory.Credentials.UserName.Password=事务密钥;
    ReplyMessage reply=proc.runTransaction(请求);
    Console.WriteLine(“decision=“+reply.decision”);
    Console.WriteLine(“reasonCode=“+reply.reasonCode”);
    Console.WriteLine(“requestID=“+reply.requestID”);
    Console.WriteLine(“requestToken=“+reply.requestToken”);
    }
    捕获(超时异常e)
    {
    Console.WriteLine(“TimeoutException:”+e.Message+“\n”+e.StackTrace);
    }
    捕获(错误异常e)
    {
    Console.WriteLine(“FaultException:+e.Message+”\n“+e.StackTrace);
    }
    捕获(通信异常e)
    {
    Console.WriteLine(“通信异常:“+e.Message+”\n“+e.StackTrace”);
    }
    Console.ReadLine();
    }
    }
    }
    
  • 在方法request return中,我实际得到的响应是request.ReasonCode=102,这意味着一个错误。理想情况下应该是100。102表示“请求中的一个或多个字段包含无效数据。”

    救命稻草
                RequestMessage request = new RequestMessage();
                request.ccAuthReversalService = new CCAuthReversalService();
                request.ccAuthReversalService.run = "true";
                request.ccAuthReversalService.authRequestID = order.Transactionno;
                request.ccAuthReversalService.authRequestToken = order.RequestToken;
                request.purchaseTotals = new PurchaseTotals();
                request.purchaseTotals.currency = "USD";
                request.purchaseTotals.grandTotalAmount = (order.Total).ToString("0.00");
                request.merchantID = MerchantId;
                request.merchantReferenceCode = order.OrderNumber;
                TransactionProcessorClient proc = new TransactionProcessorClient();
                proc.ChannelFactory.Credentials.UserName.UserName = request.merchantID;
                proc.ChannelFactory.Credentials.UserName.Password = Key;
                ReplyMessage reply = proc.runTransaction(request);
    
    request.ccAuthReversalService.authRequestToken = order.RequestToken;
    
    request.purchaseTotals.currency = "USD";
    
    request.ecDebitService = new ECDebitService();
    request.ecDebitService.run = "true";
    
    request.ecCreditService = new ECCreditService();
    equest.ecCreditService.run = "true";