0

VB Web サイトからストライプ支払いを機能させようとしています。「C# を使うべきだ」ということはわかっています。サイトが既に VB にあるため、できません。それについて私ができることは何もありません。

とにかく、私はそれのほとんどを理解しました:

  1. ユーザーが有効な情報を含む送信ボタンをクリックする
  2. フォームが Stripe に送信されます
  3. Stripe はトークンを送り返します
  4. jQuery ajax 関数は、データを投稿して寄付/ストライプごとに支払う
  5. Global.asax.vb にこのコード行があります

    routes.MapRoute("pay-by-stripe", "donate/pay-by-stripe", New With{.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
    

STR_Response 行で 400 bad request エラーが発生します。

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

私は VB と Stripe 初心者ですが、これが何を意味するのかわかりません。現在の私の主な理論は、/donate/pay-by-stripe/ ページを持っていないためであるということですが、作成したとしてもそこに何を入れるかさえわかりません。

どんな助けでも素晴らしいでしょう!

4

3 に答える 3

1

それはあなたが呼んでいるウェブサービスですよね?

Web サービスでの 400 Bad Request は、XML リクエストの形式が正しくないことを意味します。

たとえば、私のリクエストでは、その一部は特定の日付形式の UTC です。例:<pp:utc>2013-05-24 2025</pp:utc>

したがって、これに対するリクエストを不正にすると、次のように<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 bad request が表示される理由です

于 2013-05-24T20:19:25.330 に答える
0

Stripe の API に接続するときにパスワードを渡す必要はありませんでした。パスワードなしで認証ヘッダーを介してプライベート 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"))))));

また、期限切れまたは無効なカード トークンが送信されると、Stripe が 400 Bad Request を送信することを知っておくと役立つ場合があります。

于 2014-12-29T05:25:04.227 に答える
0

パスワードを System.Net.NetworkCredentials に入力する必要がありましたが、address-country は使用可能なフィールドではありません。請求を送信するときに使用できる唯一のフィールドは、金額、通貨、説明、およびカード(実際にはトークン) です。これは、動的コントローラーでの PayByStripe 関数の最終的な動作バージョンです。

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
于 2013-05-29T10:48:57.183 に答える