PayPal NVP.NET SDK ошибка

Folks,

У нас есть веб-сайт, который использует PayPal Express Checkout для цифровых товаров для продажи программного обеспечения. Работает нормально уже 5 месяцев. На прошлой неделе мы начали получать сообщение об ошибке: "Запрос был прерван: не удалось создать защищенный канал SSL/TLS." С живого сайта. Когда я запускаю сайт с моего сервера разработки, он работает нормально, и мы можем обработать транзакцию. Все это в отношении живого сайта PayPal. При рассмотрении многих вопросов на этом и других форумах основной проблемой, по-видимому, является использование неправильных конечных точек. Я использую.NET SDK и методы nvp. Я проверил конечные точки, и они являются текущими PayPal для транзакций NvP. Даже посмотрел в DLL, чтобы убедиться, что у нас не было более старой версии. У нас все хорошо.

Тогда я подумал, что хост-сервер мог бы установить безопасную ссылку на PayPal, поэтому создал тестовую страницу с URL-адресом и строкой запроса к конечной точке, например ( https://api-3t.paypal.com/nvp?USER=XXXX_api1.XXX.com&PWD=XXX&SIGNATURE=XXXXXX&VERSION=60.0&PAYMENTACTION=Authorization&AMT=1.95&RETURNURL=https://www.paypal.com&CANCELURL=https://www.paypal.com&METHOD=SetExpressCheckout

Это сработало и вернул ожидаемый токен транзакции. Таким образом, мы можем подключиться с сервера хостинга. Затем, подумав, что наши учетные данные или код для их получения могут быть проблемой, я вытащил учетные данные из нашей базы данных и провел тест следующим образом.

Проверка строки запроса с кодом данных сервера ============================================

Это сработало, так что учетные данные и конечная точка хороши на хост-сервере.

   ( Dim sCEnvironment As String =   System.Configuration.ConfigurationManager.AppSettings("Environment")
    Dim dtsettings As DataTable
    dtsettings = Dac.ExecuteDataTable("GetCredentials", Dac.Parameter("@Environment", sCEnvironment))

    '// Set up your API credentials, PayPal end point, API operation and version.
    Dim sAPIUsername As String = dtsettings.Rows(0).Item("UserName").ToString
    Dim sAPISignature As String = dtsettings.Rows(0).Item("Signature").ToString
    Dim sAPIPassword As String = dtsettings.Rows(0).Item("Password").ToString
    Dim sEnvironment As String = dtsettings.Rows(0).Item("Environment").ToString

    Dim QS As String = "https://api-3t.paypal.com/nvp?USER=" & sAPIUsername & "&PWD=" & sAPIPassword & "&SIGNATURE=" & sAPISignature & "&VERSION=60.0&PAYMENTACTION=Authorization&AMT=1.95&RETURNURL=https://www.paypal.com&CANCELURL=https://www.paypal.com&METHOD=SetExpressCheckout"
    Response.Redirect(QS)

Затем я перешел к тестированию генерации токенов с помощью sdk dll (paypal_base.dll). Смотрите код ниже. Когда каждая строка сгенерирована, я добавил к ней строку, которая записывается на тестовую страницу, чтобы я мог понять, что происходит на нашем хостинг-сервере. Мы используем экспресс-заказ для процесса цифровых товаров. Я получил основной код из https://cms.paypal.com/cms_content/FR/fr_FR/files/developer/nvp_DoAuthorization_cs.txt и добавил параметры запроса цифровых товаров в онлайн-документацию. Это работает на моем сервере разработки и возвращает токен. Он работал на хостинге около четырех месяцев, пока между 27 и 30 января я не получил первое уведомление о том, что клиент не может приобрести продукт.

При запуске на нашем хостинг-сервере мы получаем сообщение об ошибке "Не удалось создать безопасный канал SSL/TLS" в строке кода, выделенной ниже. Строка запроса генерируется кодером и хранится в переменной pStrrequestforNvp, чтобы кодер работал.

Я в растерянности. Что может отличаться на сервере хостинга от нашего сервера разработки? Есть ли метод в dll, который я мог бы использовать для записи фактического вызова на сервер PayPal? Я разместил тот же самый файл dll, который мы использовали при разработке, на сайте хостинга, но что-то другое.

Протестируйте сгенерированный sdk запрос ===========================

Dim caller As NVPCallerServices = New NVPCallerServices
    Dim profile As IAPIProfile = ProfileFactory.createSignatureAPIProfile
    Dim sCEnvironment As String = System.Configuration.ConfigurationManager.AppSettings("Environment")
    Dim dtsettings As DataTable
    Dim sMsg As String
    dtsettings = Dac.ExecuteDataTable("GetCredentials", Dac.Parameter("@Environment", sCEnvironment))

    profile.APIUsername = dtsettings.Rows(0).Item("UserName").ToString
    sMsg = "APIUserName = " & dtsettings.Rows(0).Item("UserName").ToString & "<br/>"

    profile.APISignature = dtsettings.Rows(0).Item("Signature").ToString
    sMsg = sMsg & "APISignature = " & dtsettings.Rows(0).Item("Signature").ToString & "<br/>"

    profile.APIPassword = dtsettings.Rows(0).Item("Password").ToString
    sMsg = sMsg & "APIPassword = " & dtsettings.Rows(0).Item("Password").ToString & "<br/>"

    profile.Environment = dtsettings.Rows(0).Item("Environment").ToString
    sMsg = sMsg & "Environment = " & dtsettings.Rows(0).Item("Environment").ToString & "<br/>"

    caller.APIProfile = profile
    Dim encoder As NVPCodec = New NVPCodec
    encoder("VERSION") = "65.1"
    encoder("METHOD") = "SetExpressCheckout"
    encoder("RETURNURL") = "http://www.multiware.biz/return.aspx"
    encoder("CANCELURL") = "http://www.multiware.biz/cancel.aspx"

    encoder("PAYMENTREQUEST_0_CURRENCYCODE") = "USD"
    encoder("PAYMENTREQUEST_0_PAYMENTACTION") = "Sale"
    encoder("PAYMENTREQUEST_0_AMT") = "1.95"
    encoder("PAYMENTREQUEST_0_ITEMAMT") = "1.95"
    encoder("PAYMENTREQUEST_0_DESC") = "Software"
    encoder("L_PAYMENTREQUEST_0_ITEMCATEGORY0") = "Digital"
    encoder("L_PAYMENTREQUEST_0_NAME0") = "Test"
    encoder("L_PAYMENTREQUEST_0_NUMBER0") = "123"
    encoder("L_PAYMENTREQUEST_0_QTY0") = "1"
    encoder("L_PAYMENTREQUEST_0_AMT0") = "1.95"
    encoder("L_PAYMENTREQUEST_0_DESC0") = "Download"
    encoder("REQCONFIRMSHIPPING") = "0"
    encoder("NOSHIPPING") = "1"
    encoder("SOLUTIONTYPE") = "Sole"
    Try

        Dim pStrrequestforNvp As String = encoder.Encode
        sMsg = sMsg & "pStrrequestforNvp = " & pStrrequestforNvp & "<br/>"

        Dim pStresponsenvp As String = caller.Call(pStrrequestforNvp)     ***Error occurs here***
        sMsg = sMsg & "pStresponsenvp = " & pStresponsenvp & "<br/>"

        Dim decoder As NVPCodec = New NVPCodec
        decoder.Decode(pStresponsenvp)
        Dim Token As String = decoder("TOKEN")
        sMsg = sMsg & "Token = " & Token & "<br/>"
        Me.lblResponse.Text = sMsg.ToString
    Catch ex As Exception
        sMsg = sMsg & "<br/>" & ex.Message.ToString & "<br/>" _
            & ex.StackTrace.ToString
        Me.lblResponse.Text = sMsg.ToString
    End Try

1 ответ

Я отвечу на свой вопрос. После многих взлетов и падений со службой веб-хостинга и PayPal мы сузили проблему до того, что Сервер не авторизует сертификат безопасности. Пришлось оставить след на нашей странице, чтобы найти это и доказать, что это было на их стороне. Как я и подозревал, это было обновление MS, которое облажалось. Однажды сайт работал, на следующий - нет.

Для дальнейшего чтения по теме см. Диалог по адресу http://forum.arvixe.com/smf/other-programs-promotions-graphics/need-urgent-help!-(paypal-checkout-not-working-any-more)/msg39498/

К их чести, ребята из Arvixe разыскали проблему и, в конце концов, решили ее, после того, как мы несколько раз изучили, чья это была проблема.

Другие вопросы по тегам