Début du Stripe dans l'API (clés pas là)

This commit is contained in:
MarcEricMartel 2022-12-04 08:28:12 -08:00
parent 6cc93bade0
commit 21cb3f0aa3
8 changed files with 92 additions and 1 deletions

View File

@ -12,6 +12,8 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
using Microsoft.Extensions.Options;
using Stripe;
#endregion #endregion
@ -24,6 +26,7 @@ public class InvoiceController : Controller {
private readonly DatabaseCacheService _cache; private readonly DatabaseCacheService _cache;
private readonly SignInManager<InventoryUser> _signInMan; private readonly SignInManager<InventoryUser> _signInMan;
private readonly Microsoft.AspNetCore.Identity.UserManager<InventoryUser> _userMan; private readonly Microsoft.AspNetCore.Identity.UserManager<InventoryUser> _userMan;
private readonly IOptions<StripeOptions> _stripeOptions;
#endregion #endregion
@ -32,17 +35,63 @@ public class InvoiceController : Controller {
InventoryContext context, InventoryContext context,
DatabaseCacheService cache, DatabaseCacheService cache,
SignInManager<InventoryUser> signInMan, SignInManager<InventoryUser> signInMan,
Microsoft.AspNetCore.Identity.UserManager<InventoryUser> userMan) { Microsoft.AspNetCore.Identity.UserManager<InventoryUser> userMan,
IOptions<StripeOptions> stripeOptions) {
_logger = logger; _logger = logger;
_context = context; _context = context;
_cache = cache; _cache = cache;
_userMan = userMan; _userMan = userMan;
_signInMan = signInMan; _signInMan = signInMan;
_stripeOptions = stripeOptions;
} }
#endregion #endregion
#region API Methods #region API Methods
[HttpPost("Payment")]
public IActionResult Charges([FromBody] ChargeReturnModel model) {
StripeConfiguration.ApiKey = _stripeOptions.Value.SecretKey;
InvoiceModel inv;
ChargesModel chr;
try {
inv = _context.Invoices.First(x => x.Id == model.Invoice);
} catch {
return BadRequest("Numéro de commande invalide.");
}
chr = new() {
Token = model.Token,
AmountInCents = model.AmountInCents,
Name = model.Name,
Phone = model.Phone,
Email = model.Email,
Description = model.Description,
CurrencyCode = model.CurrencyCode
};
inv.Payment = chr;
var options = new ChargeCreateOptions {
Amount = model.AmountInCents,
Description = model.Description,
Source = model.Token,
Currency = model.CurrencyCode,
};
var service = new ChargeService();
Charge charge = service.Create(options);
try {
_context.Invoices.Update(inv);
_context.SaveChanges();
} catch (Exception ex) {
_logger.LogError(20, ex.Message);
return BadRequest(ex.Message);
}
return Json(charge.ToJson());
}
[HttpGet] [HttpGet]
public ActionResult<List<InvoiceModel>> Get(bool? all = false) { public ActionResult<List<InvoiceModel>> Get(bool? all = false) {
IList<string> roles; IList<string> roles;
@ -64,12 +113,14 @@ public class InvoiceController : Controller {
return Ok(_context.Invoices return Ok(_context.Invoices
.Include(x => x.ShippingAddress) .Include(x => x.ShippingAddress)
.Include(x => x.LinkedAccount) .Include(x => x.LinkedAccount)
.Include(x => x.Payment)
.Include(x => x.Products) .Include(x => x.Products)
.ThenInclude(y => y.Product) .ThenInclude(y => y.Product)
.ToList()); .ToList());
else return Ok(_context.Invoices else return Ok(_context.Invoices
.Include(x => x.ShippingAddress) .Include(x => x.ShippingAddress)
.Include(x => x.LinkedAccount) .Include(x => x.LinkedAccount)
.Include(x => x.Payment)
.Include(x => x.Products) .Include(x => x.Products)
.ThenInclude(y => y.Product) .ThenInclude(y => y.Product)
.Where(x => x.LinkedAccount != null && x.LinkedAccount.Id == id).ToList()); .Where(x => x.LinkedAccount != null && x.LinkedAccount.Id == id).ToList());

View File

@ -22,6 +22,7 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Stripe.net" Version="41.1.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
<PackageReference Include="System.Drawing.Common" Version="6.0.0" /> <PackageReference Include="System.Drawing.Common" Version="6.0.0" />
</ItemGroup> </ItemGroup>

View File

@ -0,0 +1,11 @@
namespace GrossesMitainesAPI.Models;
public class ChargeReturnModel {
public string Token { get; set; }
public string Description { get; set; }
public long AmountInCents { get; set; }
public string CurrencyCode { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public int Invoice { get; set; }
}

View File

@ -0,0 +1,10 @@
namespace GrossesMitainesAPI.Models;
public class ChargesModel {
public string Token { get; set; }
public string Description { get; set; }
public long AmountInCents { get; set; }
public string CurrencyCode { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}

View File

@ -38,6 +38,7 @@ public class InvoiceModel {
[Required] [Required]
public AddressModel ShippingAddress { get; set; } public AddressModel ShippingAddress { get; set; }
public InStates Status { get; set; } = InStates.Confirmed; public InStates Status { get; set; } = InStates.Confirmed;
public ChargesModel Payment { get; set; } // Pour enregistrer le paiement.
public InvoiceModel() { } public InvoiceModel() { }
public InvoiceModel(SendInvoiceModel sinv) { public InvoiceModel(SendInvoiceModel sinv) {

View File

@ -0,0 +1,6 @@
namespace GrossesMitainesAPI.Models;
public class StripeOptions {
public string SecretKey { get; set; }
public string PublicKey { get; set; }
}

View File

@ -1,11 +1,14 @@
using GrossesMitainesAPI.Data; using GrossesMitainesAPI.Data;
using GrossesMitainesAPI.Models;
using GrossesMitainesAPI.Services; using GrossesMitainesAPI.Services;
using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity;
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Stripe;
using System.Net; using System.Net;
var MyAllowSpecificOrigins = "_myAllowSpecificOrigins"; var MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
@ -24,6 +27,10 @@ builder.Services.AddCors(options => {
builder.Services.AddControllers(); builder.Services.AddControllers();
builder.Services.Configure<StripeOptions>(options =>
builder.Configuration.GetSection("StripeTest").Bind(options)
);
builder.Services.AddIdentityCore<InventoryUser>() builder.Services.AddIdentityCore<InventoryUser>()
.AddRoles<IdentityRole>() .AddRoles<IdentityRole>()
.AddEntityFrameworkStores<InventoryContext>() .AddEntityFrameworkStores<InventoryContext>()

View File

@ -8,5 +8,9 @@
"AllowedHosts": "*", "AllowedHosts": "*",
"ConnectionStrings": { "ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb; Database=GrossesMitainesDB; Trusted_Connection=True; MultipleActiveResultSets=true" "DefaultConnection": "Server=(localdb)\\mssqllocaldb; Database=GrossesMitainesDB; Trusted_Connection=True; MultipleActiveResultSets=true"
},
"StripeTest": {
"PublicKey": "pk_test_",
"SecretKey": "sk_test_"
} }
} }