stripe-payments
Stripe.Net Introduction
Recherche…
Syntaxe
var stripeSubscriptionOptions = new StripeSubscriptionCreateOptions ();
// crée une variable pour contenir l'objet options
stripeSubscriptionOptions.Quantity = model.update;// exemple d'option de quantité de places pour un abonnement
var subscriptionService = new StripeSubscriptionService();// crée un service pour appeler l'API
var stripeSubscription = subscriptionService.Create(user.CustomerIdentifier, planId,stripeSubscriptionOptions);
// service.create (string CustID, string PlanID, Object SubscriptionOptions)
// L'identifiant client doit être enregistré dans votre base de données, vous pouvez récupérer planID à partir d'une bande en utilisant un PlanService et créer l'objet d'options comme ci-dessus. Si vous NuGet the Stripe.Net intellisense fonctionne pour ceux-ci aussi.
Remarques
Quelque part au début de votre contrôleur, vous devriez appeler
StripeConfiguration.SetApiKey(YOUR SECRET KEY VAR);
et pour la sécurité des données, il devrait être une valeur cachée en tant que secret dans les applis
Si vous ne définissez pas la clé API, vous ne pourrez pas modifier les abonnements ni créer de clients
À partir de Stripe.Net dans ASP.Net Core 1.0
https://github.com/jaymedavis/stripe.net est un excellent point de départ.
En supposant que vous utilisez MVC avec Razor, vous devez avoir quelques éléments dans votre page View.
<script type="text/javascript" src="https://js.stripe.com/v2/"></script>
Ce script appelle le stripe.js pour gérer la création d'un jeton.
<script type="text/javascript">
Stripe.setPublishableKey('YOUR STRIPE PUBLIC KEY');
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" asp-for="stripeToken" />').val(token));
// and re-submit
$form.get(0).submit();
}
};
jQuery(function ($) {
$('#payment-form').submit(function (e) {
var $form = $(this);
// Disable the submit button to prevent repeated clicks
$form.find('button').prop('disabled', true);
Stripe.card.createToken($form, stripeResponseHandler);
// Prevent the form from submitting with the default action
return false;
});
});
</script>
Pour ajouter le jeton à un modèle, assurez-vous de changer
$form.append($('<input type="hidden" asp-for="stripeToken" />').val(token));
pour refléter votre modèle. Le formulaire devrait ressembler à celui-ci.
<form asp-action="confirm" method="POST" id="payment-form">
<span class="payment-errors"></span>
<div class="row">
<label>
<span>Card Number</span>
<input type="text" data-stripe="number" value="4242424242424242">
</label>
</div>
<div class="row">
<label>
<span>CVC</span>
<input type="text" data-stripe="cvc" value="123">
</label>
</div>
<div class="row">
<label>
<span>Expiration (MM/YYYY)</span>
<input type="text" data-stripe="exp-month" value="12">
</label>
<input type="text" data-stripe="exp-year" value="2020">
</div>
<button type="submit">Buy Now</button>
</form>
Le contrôleur prend l'un des utilisateurs et recherche un identifiant CustomerIdentifier qui est l'identifiant du client donné par stripe. Si ce n'est pas enregistré dans la base de données, il fonctionne pour créer un client pour eux
public async Task<IActionResult> Index(OrderViewModel model) //HOME PAGE beginning of managing subs
{
//get the user and their ID
var user = await GetCurrentUserAsync();
var userId = user?.Id;
// If they have a customer Identifier use it
if (!string.IsNullOrEmpty(user.CustomerIdentifier)) //eventually if user has a saved card as well
{
//Create the API call to subscription and put its response in a list
var subscriptionService = new StripeSubscriptionService();
IEnumerable<StripeSubscription> response = subscriptionService.List(user.CustomerIdentifier);
ViewBag.Subscription = response;
ViewBag.Customer = user.CustomerIdentifier;
}
ModelState.Clear();
return View(model);
}
public async Task<IActionResult> Confirm(OrderViewModel model, string stripeToken) // CREATE CHARGE NO CARD/ NO CUSTOMER
{
model.stripeToken = stripeToken;
//get the user and their ID
var user = await GetCurrentUserAsync();
var userId = user?.Id;
var planId = "YOUR PLAN ID HERE"; //plan ID only 1 atm but will need to be a dynamic plan ID list later
// If they have a customer Identifier use it
if (!string.IsNullOrEmpty(user.CustomerIdentifier))
{
//Create the API call to subscription and put its response in a list
//Use the subscription options to apply a quantity to the initial subscription for seats
var stripeSubscriptionOptions = new StripeSubscriptionCreateOptions();
stripeSubscriptionOptions.Quantity = model.update;
var subscriptionService = new StripeSubscriptionService();
var stripeSubscription = subscriptionService.Create(user.CustomerIdentifier, planId, stripeSubscriptionOptions);
//save Subscriptions data here
ModelState.Clear();
//await SaveSubscription(stripeSubscription, user);
await _userManager.UpdateAsync(user);
}
else // Customer is new and doesn't have an ID
{
//Create API options
var customer = new StripeCustomerCreateOptions();
// Add option values
customer.Email = $"{user.Email}";
customer.Description = $"{user.Email} [{userId}]";
customer.PlanId = planId;
customer.SourceToken = model.stripeToken;
//Make the call to create the customer with the creation options
var customerService = new StripeCustomerService();
StripeCustomer stripeCustomer = customerService.Create(customer);
//save the customer ID
user.CustomerIdentifier = stripeCustomer.Id;
//create card update options and add billing info
var cardOptions = new StripeCardUpdateOptions();
cardOptions.AddressLine1 = model.BillingInfo.AddressL1;
cardOptions.AddressLine2 = model.BillingInfo.AddressL2;
cardOptions.AddressCountry = model.BillingInfo.Country;
cardOptions.AddressCity = model.BillingInfo.City;
cardOptions.AddressState = model.BillingInfo.State;
cardOptions.AddressZip = model.BillingInfo.Zip;
cardOptions.Name = model.BillingInfo.Name;
var cardUpdate = new StripeCardService();
// get the customer card ID and then update the card info
StripeCustomer customerCardGet = customerService.Get(user.CustomerIdentifier);
var cardId = customerCardGet.DefaultSourceId;
StripeCard Card = cardUpdate.Update(user.CustomerIdentifier, cardId, cardOptions);
//save Subscriptions data here
//user.ConcurrentUsers = Stripe Quantity
ModelState.Clear();
await _userManager.UpdateAsync(user);
}
ViewBag.Success = "confirm";
return View("Success");
}
Cet exemple particulier inclut certains des extras comme la prise d'informations de facturation dans le contrôleur. Si vous le souhaitez, ajoutez-le simplement au formulaire dans la vue et créez un modèle pour le contenir.