Ich weiß es ist eine rudimentäre Fragen, aber ich bin auf Webforms aus der Praxis. Ich verwende Stripe.js zum ersten Mal und möchte es in Verbindung mit stripe.net verwenden, um die Client-Seite zu verarbeiten. Hier ist der Client-Code:Wie bekomme ich js POST in asp.net Webform?
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
CodeBehind="StripePage.aspx.cs" Inherits="StripePage.StripePage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript" src="https://js.stripe.com/v2/"></script>
<script type="text/javascript">
// This identifies your website in the createToken call below
// You need to put your real publish key here.
Stripe.setPublishableKey('pk_test_1nDJ3hA1Mv2Sy9bUoYcBMXmm');
// ...
// I am using jquery to process the payment. It knows what form to
// process it on based on the name 'payment-form'
jQuery(function ($) {
//payment submission
$('#payment-form').submit(function (event) {
var $form = $(this);
// Disable the submit button to prevent repeated clicks
$form.find('button').prop('disabled', true);
Stripe.createToken($form, stripeResponseHandler);
// Prevent the form from submitting with the default action
return false;
});
//if there is a error, it is displayed on the page if there was
//no error this is where it gets sent to the server.
var stripeResponseHandler = function (status, response) {
var $form = $('#payment-form');
if (response.error) {
// Show the errors on the form
$form.find('.payment-errors').text(response.error.message);
$form.find('button').prop('disabled', false);
} else {
// token contains id, last4, and card type
var token = response.id;
// Insert the token into the form so it gets submitted to the server
$form.append($('<input type="hidden" name="stripeToken" />').val(token));
// and submit
$form.get(0).submit();
}
};
});
</script>
<form method="POST" id="paymentForm" runat="server">
<span class="payment-errors" runat="server"></span>
<div class="form-row">
<label>
<span>Card Number</span>
<br />
<input id="number" type="text" data-stripe="number" clientidmode="Static" />
<input type="text" size="20" data-stripe="number" runat="server" />
</label>
</div>
<div class="form-row">
<label>
<span>CVC</span>
<br />
<input type="text" size="4" data-stripe="cvc" runat="server" />
</label>
</div>
<div class="form-row">
<label>
<span>Expiration (MM/YYYY)</span>
<br />
<input type="text" size="2" data-stripe="exp-month" runat="server" />
</label>
<br />
<input type="text" size="4" data-stripe="exp-year" runat="server" />
</div>
<asp:Button ID="submit" ClientIDMode="Static" runat="server" Text="SubmitPayment" OnClick="submit_Click" />
</form>
</asp:Content>
Der letzte Aufruf in JS erstellt ein JSON-Objekt, das ich möchte wissen, wie man auf der C# Seite auf den Button klicken zu erhalten:
protected void submit_Click(object sender, EventArgs e)
{
....
}
Ich wollte mich die JavaScript-Implementierung zu machen, um die PCI-Konformität zu vermeiden. Komme ich das falsch? Sollte es alles Stripe.net sein, alles zu verarbeiten und die js komplett zu überspringen? Oder wenn das richtig ist, wie bekomme ich die Formular-Post-Daten im Button-Klick-Event?
Das ist der Ansatz, den wir empfehlen. Ihr Formular wird vom JavaScript wie ein normales Formular gesendet, so als ob Ihr Benutzer auf "Senden" ohne JS geklickt hätte. Sie können damit genauso verfahren wie eine normale Formularübergabe. – brian
Wenn Sie ASP.NET-Webformulare verwenden, möchten Sie wahrscheinlich ein ausgeblendetes Textfeld bei der anfänglichen Ladeoperation hinzufügen und die ClientID fest codieren. Verwenden Sie dann in Ihrem Stripe-Callback JQuery, um diesen conrols-Wert für Ihr Token festzulegen und Ihr POSTBACK-Ereignis auszulösen, damit ASP.NET es neu binden und auf der Serverseite finden kann. – Matt