.NET |
取消/退款交易。
我正在使用CyberSource API for Payment Gateway。我仔细阅读了所有可用的文档,并提出了以下代码:
首先,我使用url将服务引用添加到CyberSource
https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.60.wsdl
然后,我添加了以下代码以进行交易,然后取消交易。但是以某种方式,取消似乎不起作用。我不确定我在做什么错,因为网上很少有文档。
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();
}
}
}
在方法请求退款中,我实际上得到的响应为Request.ReasonCode = 102,这意味着错误。理想情况下应为100。102表示“请求中的一个或多个字段包含无效数据。”。
非常感谢您的帮助...
没有找到相关结果
已邀请:
4 个回复
浩挎
伞腹
另外,也不需要purchaseTotals.currency,通过您的requestId CyberSource可以为您获取该信息。 另一行保存:
物崎巩
耐扫鹤胶鞭
您可以使用此借记和借记服务,如果最终用户想要借记某些金额,例如:$ 100.00,他可以输入-$ 100.00,然后,如果总金额小于零,则可以将贷记服务设置为true,反之亦然。 尝试此操作,如果您需要更多帮助,请随时通过邮件ID与我联系。