CyberSource Simple Order API Захват транзакции PayPal

Я пытаюсь захватить транзакцию PayPal, которая была авторизована с помощью кнопки PayPal. Я пытаюсь использовать CyberSource Simple Order API для этого. У меня есть только 3 части информации, которые, кажется, возвращаются с кнопки PayPal: payerID, paymentID и paymentToken. Я пробовал несколько способов передать это API Simple Order, но всегда получаю код 102 с сообщением DECLINE в ответе. Система журналирования Cybersource указывает, что это связано с тем, что The following request field(s) is either invalid or missing: request_token.

Нужно ли мне проводить всю транзакцию - разрешать и захватывать - через киберсервер? Или каким образом я могу взять кнопку сгенерированной paypal и разрешить транзакцию, а затем захватить ее через CyberSource?

Вот мой фрагмент кода для запроса SOAPI CyberSource:

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

Ответ 1

Я решил решить эту проблему. Мой вопрос, связанный с необходимостью использования CyberSource от конца до конца, был правильным путем. В конце концов, я понял, что после нескольких дней работы с поддержкой CyberSource мне нужно было использовать их "Set Service" в методе WebApi для создания "токена" PayPal и передать это кнопке PayPal через ajax в javascript, который генерирует кнопку, Мне также пришлось углубиться в их документацию и документацию PayPal, а также выяснить, как сделать эту работу, потому что она не была очень ясна изначально. Во всяком случае, как только я сделал услугу "Набор", я собрал информацию в ответ от CyberSource вместе с токеном PayPal и отправил ее вместе с вызовом службы "Получить данные" (также CyberSource). Наконец, эта информация предоставляется объединенному призыву Do Sale and Do Capture и средствам. Кнопка разрешила пользователю только войти в свою учетную запись PayPal и убедиться, что она хочет продолжить транзакцию.

Документация CyberSource немного неясна в отношении этого, и они ссылаются на устаревший набор документации PayPal, который не делает ничего проще.

Ответ 2

Вы пытались настроить свой запрос следующим образом? Не обращайте внимания на значения, которые я использовал, но я смотрю на пример в документах (Пример 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" 
      }
}

Ответ 3

Как говорится в ошибке, у вас есть git недопустимые данные, проверьте поля ответа invalidField_0 через invalidField_N для недопустимые поля.

Я надеюсь, что эти Запрос службы авторизации помогут