Cyber​​Source简单订单API捕获PayPal交易

时间:2017-08-17 16:22:42

标签: c# asp.net paypal

我尝试捕获已使用PayPal按钮授权的PayPal交易。我尝试使用Cyber​​Source Simple Order API来执行此操作。我只有3条信息似乎从PayPal按钮返回:payerIDpaymentIDpaymentToken。我已经尝试了几种方法将其交给Simple Order API,但总是在响应中获得带有DECLINE消息的102代码。 Cyber​​source的日志记录系统表明这是因为The following request field(s) is either invalid or missing: request_token

我是否需要通过网络资源进行整个交易 - 授权和捕获?或者我可以采用paypal生成的按钮并授权交易,然后通过Cyber​​Source捕获它的方式是什么?

这是我的Cyber​​Source 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);
}

3 个答案:

答案 0 :(得分:1)

您是否尝试过设置这样的请求?不要理会我使用的值,但我正在查看文档中的示例(Example 21 Request for 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" 
      }
}

答案 1 :(得分:1)

我最终解决了这个问题。我的问题涉及是否需要从端到端采用Cyber​​Source是正确的道路。最后我发现 - 在与Cyber​​Source支持谈了几天之后 - 我需要在WebApi方法中使用他们的“Set Service”来生成PayPal“令牌”并通过生成按钮的javascript中的ajax将其提供给PayPal按钮。我还必须深入研究他们和PayPal的文档,并弄清楚如何使这项工作,因为它最初并不是非常清楚。无论如何,一旦我完成了Set服务,我就会收集来自Cyber​​Source的回复中的信息以及PayPal令牌,并将其发送到Get Details服务电话(也称为Cyber​​Source)。最后,该信息被提供给Do Sale和Do Capture服务电话,并且资金被捕获。该按钮仅允许用户登录其PayPal帐户并验证他们是否希望继续进行交易。

Cyber​​Source的文档在这方面有点缺乏清晰度,它们链接到一组已弃用的PayPal文档,这使得任何操作都不容易。

答案 2 :(得分:-1)

由于错误显示您有git无效数据,请检查回复字段 invalidField_0到invalidField_N 无效的字段。

我希望这些Requesting the Authorization Service样本能够提供帮助