[英]Cybersource simple order api sample application gives “The type initializer for 'CyberSource.WSSecurity.Signature' threw an exception.”
[英]CyberSource Simple Order API Capture PayPal transaction
我正在尝试捕获已使用PayPal按钮授权的PayPal交易。 我正在尝试使用CyberSource Simple Order API来执行此操作。 我只有3条信息似乎从PayPal按钮返回: payerID
, paymentID
和paymentToken
。 我已经尝试了几种方法将其交给Simple Order API,但总是在响应中获得带有DECLINE
消息的102代码。 Cybersource的日志记录系统表明这是因为The following request field(s) is either invalid or missing: request_token
。
我是否需要通过网络资源进行整个交易 - 授权和捕获? 或者我可以采用paypal生成的按钮并授权交易,然后通过CyberSource捕获它的方式是什么?
这是我的CyberSource SOAPI请求的代码片段:
RequestMessage request = new RequestMessage
{
merchantID = WebConfigurationManager.AppSettings["cybs.merchantID"]
, payPalDoCaptureService = new PayPalDoCaptureService {
run = "true"
, invoiceNumber = orders
, paypalAuthorizationId = authId
, paypalAuthorizationRequestToken = requestToken
, completeType = "Complete" }
, clientApplication = "MyClient Application"
, clientApplicationVersion = "2.0"
, clientApplicationUser = userName
, clientEnvironment = WebConfigurationManager.AppSettings["Tier"]
, merchantReferenceCode = orders
, customerID = OrderConstants.CustomerNumber
, merchantDefinedData = new MerchantDefinedData { field1 = "Customer #: " + OrderConstants.CustomerNumber, field2 = orders }
, purchaseTotals = new PurchaseTotals { currency = "usd", grandTotalAmount = total, taxAmount = taxtotal }
, item = items.ToArray()
};
ReplyMessage reply = new ReplyMessage();
try
{
reply = SoapClient.RunTransaction(request);
}
catch (Exception ex)
{
reply.decision = "SYSTEM ERROR";
reply.additionalData = string.Format("Error processing request. Exception message: {0}", ex.Message);
}
您是否尝试过像这样设置您的请求? 不要理会我使用的值,但我正在查看文档中的示例(例21请求payPalDoCaptureService)。 您需要按ctrl + f才能找到它。
RequestMessage request = new RequestMessage
{
payPalDoCaptureService_run=true
, merchantID = WebConfigurationManager.AppSettings["cybs.merchantID"]
, merchantReferenceCode = HTNsubscription9647
, purchaseTotals = new PurchaseTotals { currency = "usd", grandTotalAmount = total, taxAmount = taxtotal }
, payPalDoCaptureService = new PayPalDoCaptureService
{
run = "true"
, invoiceNumber = orders
, paypalAuthorizationId = authId
, paypalAuthorizationRequestID = authReqId
, paypalAuthorizationRequestToken = requestToken
, completeType = "Complete"
}
}
我最终解决了这个问题。 我的问题涉及是否需要从端到端采用CyberSource是正确的道路。 最后我发现 - 在与CyberSource支持谈了几天之后 - 我需要在WebApi方法中使用他们的“Set Service”来生成PayPal“令牌”并通过生成按钮的javascript中的ajax将其提供给PayPal按钮。 我还必须深入研究他们和PayPal的文档,并弄清楚如何使这项工作,因为它最初并不是非常清楚。 无论如何,一旦我完成了Set服务,我就会收集来自CyberSource的回复中的信息以及PayPal令牌,并将其发送到Get Details服务电话(也称为CyberSource)。 最后,该信息被提供给Do Sale和Do Capture服务电话,并且资金被捕获。 该按钮仅允许用户登录其PayPal帐户并验证他们是否希望继续该交易。
关于这一点,CyberSource的文档有点缺乏清晰度,它们链接到一组已弃用的PayPal文档,这并没有使任何事情变得更容易。
由于错误显示您有git无效数据,请检查无效字段的回复字段invalidField_0到invalidField_N 。
我希望这些申请授权服务的样本会有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.