Как создать кнопку Encrypted PayNow «на лету» для сторонних клиентов, используя API Paypal NVP?

Мне нужно на лету создать зашифрованные кнопки PayPal PayNow для веб-сайта.
Я прочитал всю документацию, которую смог найти на сайте PayPal.
Я понял, что мне нужно использовать BMCreateButton ButtonManager NVP API.
Но я не смог найти ни информации, ни достаточно простого и задокументированного примера кода о том, КАК я должен вызывать эти API.

Нужно ли мне поместить свой параметр в форму и опубликовать его на каком-то сервере?
Нужно ли указывать все параметры в URL-адресе, вызывать этот URL-адрес и использовать результат?
Как авторизоваться в этом сервисе?
Я собираюсь создать зашифрованную кнопку paynow для другой бизнес-учетной записи PayPal.

Может ли кто-нибудь показать мне какой-нибудь код VB.Net или C#, который на самом деле вызывает этот BMCreateButton NVP API?
Чтобы я мог видеть:

  • как сделать вызов
  • как пройти аутентификацию в сервисе
  • как отформатировать/использовать параметры вызова API
  • как получить результаты

Разная ссылка к полезному ресурсу
- благодаря этому ответуя смог найти полезный пример кода здесьи тамо том, как вызывать Paypal API.
- Здесьболее полезная информация о том, как работает paypal NVP API.
- Здесьинтересный веб-сайт, который генерирует URL-адрес вызова API для API BMCreateButton
- Здесьвы можете найти инструкции по получению учетных данных "Стороннего" API. (благодаря этому ответу )
- Еще немного полезной информации здесьоб интеграции Paypal API
- Здесьвы можете найти номер текущей и последней версии Paypal API

Обновление 1
Теперь я создал код, который действительно что-то делает, но он выдает ошибку. Этот код фактически создает зашифрованную кнопку paynow с помощью BMCreateButton API. Вроде работает, но когда я нажимаю кнопку paynow, он показывает все параметры платежа, но также показывает ошибку «Возникла проблема с расшифровкой вашего безопасного заказа. Пожалуйста, свяжитесь с вашим продавцом».

Вот код:

Public Shared Sub PaypalTest3web()

    Dim NVP As New Dictionary(Of String, String)

    Dim strUsername As String = "aso_1273063882_biz_api3.megatesto.it"
    Dim strPassword As String = "1273063582"
    Dim strSignature As String = "A22sd7623RGUsduDHDSFU57N7dfhfS23DUYVhdf85du8S6FJ6D5bfoh5"

    Dim strNVPSandboxServer As String = "https://api-3t.sandbox.paypal.com/nvp"


    NVP.Add("USER", strUsername)
    NVP.Add("PWD", strPassword)
    NVP.Add("SIGNATURE", strSignature)


    Dim bvCount As Integer
    bvCount = 0

    NVP.Add("METHOD", "BMCreateButton")
    NVP.Add("VERSION", "85.0")

    NVP.Add("BUTTONCODE", "ENCRYPTED")    ''CLEARTEXT / ENCRYPTED
    NVP.Add("BUTTONTYPE", "BUYNOW")
    NVP.Add("BUTTONSUBTYPE", "PRODUCTS")  ''Optional: PRODUCTS / SERVICES

    bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "business=D64TG758HIWj2") ''Merchant ID

    'bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "cmd=_s-xclick")  ''DONT SPECIFY the cmd parameter, if specifien it will generate an error on the decription of the "secure order", I don't know why...
    bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "lc=IT")
    bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "button_subtype=PRODUCTS")
    bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "item_name=Test_product")
    bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "item_number=123456")
    bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "amount=12.00")
    bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "currency_code=EUR")
    bvCount = bvCount + 1 : NVP.Add("L_BUTTONVAR" & bvCount, "quantity=1")

    ''build the parameter string
    Dim paramBuilder As New StringBuilder
    For Each kv As KeyValuePair(Of String, String) In NVP
        Dim st As String
        st = kv.Key & "=" & HttpUtility.UrlEncode(kv.Value) & "&"
        paramBuilder.Append(st)
    Next

    Dim param As String
    param = paramBuilder.ToString
    param = param.Substring(0, param.Length - 1) 'remove the last '&'

    'Create web request and web response objects, make sure you using the correct server (sandbox/live)
    Dim wrWebRequest As HttpWebRequest = DirectCast(WebRequest.Create(strNVPSandboxServer), HttpWebRequest)
    wrWebRequest.Method = "POST"

    Dim requestWriter As New StreamWriter(wrWebRequest.GetRequestStream())
    requestWriter.Write(param)
    requestWriter.Close()

    '' Get the response.
    Dim responseReader As StreamReader
    responseReader = New StreamReader(wrWebRequest.GetResponse().GetResponseStream())

    ''and read the response
    Dim responseData As String
    responseData = responseReader.ReadToEnd()
    responseReader.Close()

    ''url-decode the results
    Dim result As String
    result = HttpUtility.UrlDecode(responseData)

    Dim formattedResult As String

    formattedResult = "Request on " & strNVPSandboxServer & vbCrLf &
                     HttpUtility.UrlDecode(param.Replace("&", vbCrLf & "  ")) & vbCrLf & vbCrLf &
                     "Result:" & vbCrLf & result & vbCrLf & vbCrLf &
                     "--------------------------------------" & vbCrLf



    ''show the results
    Trace.WriteLine(result)
    MessageBox.Show(result)
End Sub

Вот HTML-ответ.

А вот ошибка, которую я получаю после нажатия этой зашифрованной кнопки «Оплатить сейчас».

enter image description here

Как видите, все параметры (название товара, цена, item_id...) правильный. Но я не могу понять, почему я получаю эту ошибку.

Если вы хотите попробовать этот код, вы должны заменить своего пользователя API/пароль/подпись. Сгенерированная кнопка PayNow работает только тогда, когда вы вошли в свою учетную запись PayPal Sandbox.

У вас есть идеи, как решить эту ошибку?

Примечание:после решения этой проблемы мне нужно понять, как создать зашифрованную кнопку для третьей бизнес-учетной записи PayPal (нам нужно будет создать зашифрованную кнопку для учетных записей PayPal наших клиентов).Недостаточно использовать наши учетные данные API, код продавца клиента и настроить наши учетные данные API в учетной записи PayPal нашего клиента ... Он говорит, что код продавца недействителен. Наверное, я что-то упускаю...

Обновление 2
Кажется, я нашел, как решить вышеупомянутую ошибку: просто удалить параметры "cmd=_s-xclick / _xclick". Если «cmd» не указан, кнопка paynow не выдает никаких ошибок. Требуется дополнительное тестирование... во всяком случае, я прокомментировал строку кода в примере кода.

Теперь вернемся к делу. Давайте проведем небольшое тестирование, а затем найдем правильный способ создания кнопки paynow для сторонних учетных записей PayPal.

8
задан Community 23 May 2017 в 12:24
поделиться