Мне нужно на лету создать зашифрованные кнопки PayPal PayNow для веб-сайта.
Я прочитал всю документацию, которую смог найти на сайте PayPal.
Я понял, что мне нужно использовать BMCreateButton ButtonManager NVP API.
Но я не смог найти ни информации, ни достаточно простого и задокументированного примера кода о том, КАК я должен вызывать эти API.
Нужно ли мне поместить свой параметр в форму и опубликовать его на каком-то сервере?
Нужно ли указывать все параметры в URL-адресе, вызывать этот URL-адрес и использовать результат?
Как авторизоваться в этом сервисе?
Я собираюсь создать зашифрованную кнопку paynow для другой бизнес-учетной записи PayPal.
Может ли кто-нибудь показать мне какой-нибудь код VB.Net или C#, который на самом деле вызывает этот BMCreateButton NVP 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-ответ.
А вот ошибка, которую я получаю после нажатия этой зашифрованной кнопки «Оплатить сейчас».
Как видите, все параметры (название товара, цена, item_id...) правильный. Но я не могу понять, почему я получаю эту ошибку.
Если вы хотите попробовать этот код, вы должны заменить своего пользователя API/пароль/подпись. Сгенерированная кнопка PayNow работает только тогда, когда вы вошли в свою учетную запись PayPal Sandbox.
У вас есть идеи, как решить эту ошибку?
Примечание:после решения этой проблемы мне нужно понять, как создать зашифрованную кнопку для третьей бизнес-учетной записи PayPal (нам нужно будет создать зашифрованную кнопку для учетных записей PayPal наших клиентов).Недостаточно использовать наши учетные данные API, код продавца клиента и настроить наши учетные данные API в учетной записи PayPal нашего клиента ... Он говорит, что код продавца недействителен. Наверное, я что-то упускаю...
Обновление 2
Кажется, я нашел, как решить вышеупомянутую ошибку: просто удалить параметры "cmd=_s-xclick / _xclick". Если «cmd» не указан, кнопка paynow не выдает никаких ошибок. Требуется дополнительное тестирование... во всяком случае, я прокомментировал строку кода в примере кода.
Теперь вернемся к делу. Давайте проведем небольшое тестирование, а затем найдем правильный способ создания кнопки paynow для сторонних учетных записей PayPal.