2011-05-26 91 views
2

我正在使用支付网关的Cyber​​Source API。我经历了所有可用的单证去与下面的代码上来:使用.NET中的Cyber​​Source API取消/退款交易

  1. 首先,我使用URL https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.60.wsdl

  2. 添加服务引用的Cyber​​Source然后,我添加以下代码用于制作交易,然后取消它。但不知何故,取消似乎并不奏效。我不知道我在做什么错误,因为网上只有很少的文档可用。

    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 = "[email protected]"; 
        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(); 
         } 
        } 
    } 
    

在方法请求退款,我实际上得到响应作为Request.ReasonCode = 102,这意味着一个错误。理想情况下,它应该是100. 102表示“请求中的一个或多个字段包含无效数据。”。

帮助我非常感激......

+0

嗨哈里,我想用Cyber​​Source也。我添加了Web引用,并使用相同的源代码,但找不到“TransactionProcessorClient”。你需要引用一些东西来获得这个命名空间吗? – 2011-06-30 10:17:39

+0

为了防止有人在将来检查此事件(例如我):您应该能够通过登录到Merchant Board中或通过验证Reply对象(应该有一个指示无效字段的字段)来查找必要的信息。 – 2015-12-28 07:56:05

回答

0

一旦你贴作者 用户帐户将会送他/她的钱您可以张贴信贷量。 为此,您需要指定request.ccCreditService并将其运行字段设置为true。 同样的事情可以在他们的商务中心用户界面中完成。

但是,这与取消实际授权/结算交易无关。

3

试试这个。这个对我有用。

  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); 
1

如果您已经使用来自初始授权的requestId,则不需要请求令牌。 所以,你可以安全地删除行:

request.ccAuthReversalService.authRequestToken = order.RequestToken; 

而且,purchaseTotals.currency是没有必要的,通过你的requestId的Cyber​​Source将获得这些信息给你。 保存的另一条线:

request.purchaseTotals.currency = "USD"; 
0
request.ecDebitService = new ECDebitService(); 
request.ecDebitService.run = "true"; 

request.ecCreditService = new ECCreditService(); 
equest.ecCreditService.run = "true"; 

您可以使用此信用卡和借记服务,如果最终用户希望借记一定量例如:$ 100.00他可以进入 - $ 100.00,然后如果总量小于零您可以将信用服务设置为真,反之亦然。

试试这个,如果你需要更多的帮助随时联系我的邮件ID。