So che è una domanda rudimentale, ma sono fuori allenamento sui webform. Sto usando Stripe.js per la prima volta e voglio usarlo in combinazione con stripe.net per elaborare il lato client. Ecco il codice del client:come ottenere 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>
L'ultima chiamata in JS crea un oggetto JSON che voglio sapere come raggiungere sulla pagina C# sul pulsante clic:
protected void submit_Click(object sender, EventArgs e)
{
....
}
Sono voler fare l'implementazione javascript per evitare di dover fare la conformità PCI. Mi sto avvicinando in modo errato? Dovrebbe essere tutto Stripe.net per elaborare tutto e saltare il js interamente? O se questo è giusto, come posso ottenere il modulo di postare i dati nell'evento click del pulsante?
Questo è l'approccio che raccomandiamo. Il tuo modulo verrà inviato dal JavaScript come un normale modulo, come se il tuo utente abbia fatto clic su "Invia" senza alcun JS. Quindi puoi gestirlo allo stesso modo di un normale invio di moduli. – brian
Se si tratta di moduli Web ASP.NET, è probabile che si desideri aggiungere un campo di testo nascosto nel caricamento iniziale e inserire il proprio ID client nel codice. Quindi, nel callback della stripe, utilizzare JQuery per impostare il valore di controllo sul token e attivare l'evento POSTBACK in modo che ASP.NET possa rebindare e trovare il lato server. – Matt