2013-05-24 5 views
0

J'essaie de faire un travail de paiement par bande à partir d'un site Web VB. Je sais, je sais, "je devrais utiliser C#". Je ne peux pas parce que le site est déjà en VB. Rien que je puisse faire à ce sujet.Stripe Paiement avec VB - 400 Bad Request

Quoi qu'il en soit, j'ai la plus grande partie compris:

  1. utilisateur clique sur le bouton Soumettre avec des informations valides
  2. formulaire soumet à bande
  3. Stripe envoie un jeton retour
  4. A des postes de la fonction ajax jQuery les données à donner/pay-by-stripe
  5. J'ai cette ligne de code dans mon Global.asax.vb

    routes.MapRoute ("pay-par-bande", "faire un don/paiement par bande", Nouveau Avec {.Commande = "dynamique", .action = "PayByStripe"})

  6. Donc, mon PayByStripe fonction dans le contrôleur dynamique ressemble à ceci:

    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 
    

Je reçois 400 mauvaise erreur de demande sur la ligne de STR_Response:

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

Je suis un noob VB et Stripe, et Je ne suis pas sûr de ce que cela signifie. Ma théorie principale maintenant est que c'est parce que je n'ai pas de/donate/pay-by-stripe/page, mais je ne sais pas ce que je mettrais même si je l'ai créé.

Toute aide serait géniale!

Répondre

0

je devais mettre mon mot de passe dans System.Net.NetworkCredentials, et l'adresse pays n'est pas un champ utilisable . Les seuls champs utilisables lors de la soumission d'une charge sont montant, devise, description et carte (qui est en fait le jeton). Ceci est la version finale de mon travail dans mon PayByStripe Fonction contrôleur dynamique:

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

C'est un service web que vous appelez, n'est-ce pas?

Une requête 400 incorrecte avec un service Web signifie que votre requête XML est mal formée. Exemple, à ma demande, une partie est un UTC dans un format de date donné. Exemple: <pp:utc>2013-05-24 2025</pp:utc>

Donc, si je devais malform ma demande à ce <pp:utc>2013-05-24 2025</pp:utc2> il se traduirait par:

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

Donc, vérifiez votre demande et assurez-vous que tout est correctement formaté.

EDIT: je viens de remarquer que j'ai mal placé les balises utc "incorrectes". S'il vous plaît notez la balise d'ouverture <pp:utc> est fermée avec un </pp:utc2>, ce qui est la raison pour laquelle vous voyez 400 mauvaise demande

+0

Cette ligne était à l'origine de l'erreur: OBJ_Transaction.Add ("adresse-pays", "US") –

0

Je ne l'ai jamais dû passer mon mot de passe lors de la connexion à l'API de rayure. Transmettez simplement votre clé API privée via un en-tête d'autorisation sans mot de passe. Cela peut également aider à transmettre un en-tête de version, ce que Stripe recommande.Les lignes de cartes suivantes sont en C#, je sais que votre question était en VB, mais je suis sûr que vous pouvez facilement adaptatives ceci:

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

En outre, il peut être utile de savoir que Stripe envoie 400 Bad Request quand un jeton de carte expiré ou invalide est envoyé.