2013-05-24 2 views
0

Я пытаюсь выполнить оплату с помощью веб-сайта VB. Я знаю, я знаю: «Я должен использовать C#». Я не могу, потому что сайт уже находится в VB. Я ничего не могу с этим поделать.Оплата полос с помощью VB-400 Плохой запрос

Во всяком случае, у меня есть большинство из них выяснили:

  1. пользователь нажимает кнопку отправки с действительной информацией
  2. Форма представляет Stripe
  3. нашивки отправляет маркер обратно
  4. A JQuery Ajax функции сообщений данные для пожертвования/оплаты по полосе
  5. У меня есть эта строка кода в моем Global.asax.vb

    routes.MapRoute ("оплата по-полоска", "пожертвовать/оплату по-полоска", новые с {.controller = "Dynamic", .action = "PayByStripe"})

  6. Так что мой PayByStripe функция динамического контроллера выглядит следующим образом:

    Function PayByStripe() 
    ''The Stripe Account API Token 
    Dim STR_Stripe_API_Token As String = "sk_test_*****" 
    
    ''The Stripe API URL 
    Dim STR_Stripe_API_URL As [String] = "https://api.stripe.com/v1/charges" 
    
    ''The Stripe Card Token 
    Dim token As String = HttpContext.Request.Form("token") 
    Dim description As String = HttpContext.Request.Form("description") 
    Dim amount As Single = HttpContext.Request.Form("amount") 
    
    ''Creates a Web Client 
    Dim OBJ_Webclient As New System.Net.WebClient() 
    
    ''Creates Credentials 
    Dim OBJ_Credentials As New System.Net.NetworkCredential(STR_Stripe_API_Token, "") 
    
    ''Sets the Credentials on the Web Client 
    OBJ_Webclient.Credentials = OBJ_Credentials 
    
    ''Creates a Transaction with Data that Will be Sent to Stripe 
    ''Dim OBJ_Transaction As New System.Collections.Specialized.NameValueCollection() 
    Dim OBJ_Transaction As NameValueCollection = New NameValueCollection() 
    OBJ_Transaction.Add("amount", amount) 
    OBJ_Transaction.Add("currency", "usd") 
    OBJ_Transaction.Add("address-country", "US") 
    OBJ_Transaction.Add("description", "") 
    OBJ_Transaction.Add("card", token) 
    
    ''The Stripe Response String 
    Dim STR_Response As String = Encoding.ASCII.GetString(OBJ_Webclient.UploadValues(STR_Stripe_API_URL, OBJ_Transaction)) 
    
    'Response.Redirect("/donate/?transaction=success"); 
    
    Return STR_Response 
    
    End Function 
    

Я получаю 400 ошибку плохой запрос на STR_Response линии:

Dim STR_Response As String = Encoding.ASCII.GetString(OBJ_Webclient.UploadValues(STR_Stripe_API_URL, OBJ_Transaction)) 

Я в VB и нашивки нуб, и не уверен, что это значит. Моя основная теория теперь заключается в том, что это потому, что у меня нет/donate/pay-by-stripe/page, но я не знаю, что бы я даже положил туда, если бы я ее создал.

Любая помощь будет замечательной!

ответ

0

мне пришлось поставить свой пароль в System.Net.NetworkCredentials и адресно-страна не годный к употреблению поле , Единственными полезными полями при отправке платежа являются сумма, валюта, описание и карта (что фактически является токеном). Это последняя, ​​рабочая версия моей PayByStripe функции в моем Dynamic Controller:

Function PayByStripe() 


    '' The Stripe Account API Token - change this for testing 
    Dim STR_Stripe_API_Token As String = "" 

    If (this_is_a_test) Then 
     ' Test Secret Key 
     STR_Stripe_API_Token = "sk_test_***" 
    Else 
     ' Prod Secret Key 
     STR_Stripe_API_Token = "sk_live_***" 
    End If 

    ''The Stripe API URL 
    Dim STR_Stripe_API_URL As [String] = "https://api.stripe.com/v1/charges" 

    ''The Stripe Card Token 
    Dim token As String = HttpContext.Request.Form("token") 
    Dim description As String = HttpContext.Request.Form("description") 
    Dim amount As Single = HttpContext.Request.Form("amount") 

    ''Creates a Web Client 
    Dim OBJ_Webclient As New System.Net.WebClient() 

    ''Creates Credentials 
    Dim OBJ_Credentials As New System.Net.NetworkCredential(STR_Stripe_API_Token, "YOUR PASSWORD FOR STRIPE") 

    ''Sets the Credentials on the Web Client 
    OBJ_Webclient.Credentials = OBJ_Credentials 

    ''Creates a Transaction with Data that Will be Sent to Stripe 
    Dim OBJ_Transaction As New System.Collections.Specialized.NameValueCollection() 

    OBJ_Transaction.Add("amount", amount) 
    OBJ_Transaction.Add("currency", "usd") 
    OBJ_Transaction.Add("description", description) 
    OBJ_Transaction.Add("card", token) 

    ''The Stripe Response String 
    Dim STR_Response As String = Encoding.ASCII.GetString(OBJ_Webclient.UploadValues(STR_Stripe_API_URL, OBJ_Transaction)) 

    Return STR_Response 

End Function 
1

Это веб-сервис, который вы вызываете, не так ли?

400 Bad Request с помощью webservice означает, что ваш запрос XML неверен.

Пример, в моей просьбе, часть его является UTC в определенном формате даты. Пример: <pp:utc>2013-05-24 2025</pp:utc>

Так что, если бы я malform мою просьбу к этому <pp:utc>2013-05-24 2025</pp:utc2> это привело бы:

HTTP/1.1 400 Bad Request 
Cache-Control: private 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 2.0.5 

Таким образом, проверьте ваш запрос и убедиться, что все правильно отформатирован.

РЕДАКТИРОВАТЬ: только что я заметил неправильные теги utc. Пожалуйста, обратите внимание открывающий тег <pp:utc> закрывается с </pp:utc2>, что является причиной, почему вы видите 400 плохой запрос

+0

Эта строка вызывала ошибку: OBJ_Transaction.Add («адрес-страна», «США») –

0

Я никогда не должен был пройти в мой пароль при подключении к API Stripe в. Просто передайте свой закрытый ключ API через заголовок авторизации без пароля. Он также может помочь передать в заголовке версии, что-то рекомендует Stripe.Следующие строки карты в C#, я знаю, ваш вопрос был в VB, но я уверен, что вы можете легко адаптивным образом:

webrequest.Headers.Add("Stripe-Version", "2014-12-22"); 
webrequest.Headers.Add("Authorization", String.Concat("Basic ", (Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("{0}:", "sk_test_XXXXXXXXXXXXXXXXXXX")))))); 

Кроме того, это может помочь узнать, что нашивки отправляет 400 Bad Request когда отправляется истек или недействительный маркер.