Skip to content

Commit

Permalink
Merge pull request #495 from libanlsilva/Update-Stripe-Api
Browse files Browse the repository at this point in the history
Update stripe api
  • Loading branch information
WillStrohl authored Dec 16, 2024
2 parents 5facff7 + b44e4a2 commit 1e00851
Show file tree
Hide file tree
Showing 19 changed files with 958 additions and 479 deletions.
29 changes: 27 additions & 2 deletions Libraries/Hotcakes.Payment/CardData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public class CardData
{
private string _CardNumber = string.Empty;

public string StripeCardType { get; set; }

public CardData()
{
SecurityCode = string.Empty;
Expand Down Expand Up @@ -130,7 +132,21 @@ public string CardNumberLast4Digits
[ScriptIgnore]
public CardType CardType
{
get { return CardValidator.GetCardTypeFromNumber(CardNumber); }
get {
if (!string.IsNullOrWhiteSpace(StripeCardType))
{
if (Enum.TryParse(StripeCardType, true, out CardType cardType))
{
return cardType;
}
else
{
return CardType.Unknown;
}
}

return CardValidator.GetCardTypeFromNumber(CardNumber);
}
}

/// <summary>
Expand Down Expand Up @@ -175,6 +191,11 @@ public string CardTypeName
/// <returns>Boolean - if true, the card number and date are valid.</returns>
public bool IsCardValid(DateTime localTime)
{
if (!string.IsNullOrWhiteSpace(StripeCardType))
{
return true;
}

if (!CardValidator.IsCardNumberValid(CardNumber))
{
return false;
Expand All @@ -190,7 +211,11 @@ public bool IsCardValid(DateTime localTime)

public bool IsCardNumberValid()
{
if (CardValidator.IsCardNumberValid(this.CardNumber) == false)
if (!string.IsNullOrWhiteSpace(StripeCardType))
{
return true;
}
if (CardValidator.IsCardNumberValid(this.CardNumber) == false)
{
return false;
}
Expand Down
15 changes: 15 additions & 0 deletions Libraries/Hotcakes.Payment/Gateways/StripeProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,8 @@ private void CreateRefund(Transaction t)
Amount = (int)(t.Amount * 100)
};

t.PreviousTransactionNumber = UpdatePreviousTransactionNumber(t.PreviousTransactionNumber, t.Result.ReferenceNumber);

if (IsPaymentIntent(t.PreviousTransactionNumber))
{
refundOptions.PaymentIntent = t.PreviousTransactionNumber;
Expand Down Expand Up @@ -242,6 +244,8 @@ private void CaptureCharge(Transaction t)

var chargeService = new ChargeService();

t.PreviousTransactionNumber = UpdatePreviousTransactionNumber(t.PreviousTransactionNumber, t.Result.ReferenceNumber);

var stripeCharge = chargeService.Capture(t.PreviousTransactionNumber);

if (stripeCharge.Id.Length > 0 && stripeCharge.Amount > 0)
Expand All @@ -262,6 +266,8 @@ private void CapturePaymentIntent(Transaction t)
StripeConfiguration.ApiKey = Settings.StripeApiKey;

var paymentIntentService = new PaymentIntentService();

t.PreviousTransactionNumber = UpdatePreviousTransactionNumber(t.PreviousTransactionNumber, t.Result.ReferenceNumber);

var stripeCapture = paymentIntentService.Capture(t.PreviousTransactionNumber);

Expand All @@ -278,6 +284,15 @@ private void CapturePaymentIntent(Transaction t)
}
}

private string UpdatePreviousTransactionNumber(string PreviousTransactionNumber, string ReferenceNumber)
{
if (string.IsNullOrEmpty(PreviousTransactionNumber))
{
return ReferenceNumber;
}
return PreviousTransactionNumber;
}

/// <summary>
/// Cancel the PaymentIntent
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ public ActionResult Index()
[HccHttpPost]
public ActionResult IndexPost()
{

var model = LoadCheckoutModel();
LoadValuesFromForm(model);

Expand Down Expand Up @@ -301,18 +302,14 @@ public ActionResult ApplyRewardPointsChange(FormCollection form)
[HccHttpPost]
public ActionResult AttachPaymentMethod()
{
var cardNumber = Request.Form["CardNumber"];
var Cvc = Request.Form["Cvc"];
var ExpMonth = Convert.ToInt32(Request.Form["ExpMonth"]);
var ExpYear = Convert.ToInt32(Request.Form["ExpYear"]);
var stripeProcessor = new StripeProcessor();
var sett = HccApp.CurrentStore.Settings;
var mSett = sett.PaymentSettingsGet(sett.PaymentCreditCardGateway);
stripeProcessor.BaseSettings.Merge(mSett);

var pm = stripeProcessor.CreatePaymentMethod(cardNumber, Cvc, ExpMonth, ExpYear);
string paymentIntentId = Request.Form["PaymentIntentId"];
var result = stripeProcessor.AttachPaymentMethod(pm.Id, paymentIntentId);
string paymentMethodId = Request.Form["PaymentMethodId"];
var result = stripeProcessor.AttachPaymentMethod(paymentMethodId, paymentIntentId);
return new PreJsonResult(Web.Json.ObjectToJson(new {id = result.Id}));
}

Expand Down Expand Up @@ -954,6 +951,13 @@ private void LoadValuesFromForm(CheckoutViewModel model)
model.CurrentOrder.ThirdPartyOrderId = paymentIntentId;
model.PaymentIntentId = paymentIntentId;
}

var paymentMethodId = Request.Form["PaymentMethodId"];
if (!string.IsNullOrEmpty(paymentMethodId))
{
model.PaymentMethodId = paymentMethodId;
}

var clientSecret = Request.Form["PaymentIntentClientSecret"];
if (!string.IsNullOrEmpty(clientSecret))
{
Expand Down Expand Up @@ -1044,13 +1048,17 @@ private void LoadPaymentFromForm(CheckoutViewModel model)
{
var order = model.CurrentOrder;
var payModel = model.PaymentViewModel;

if (HccApp.CurrentStore.Settings.PaymentCreditCardGateway == PaymentGatewayType.Stripe)
{
payModel.DataCreditCard.StripeCardType = Request.Form["StripeCardType"] ?? string.Empty;
}
payModel.DataCreditCard.CardNumber = Request.Form["cccardnumber"] ?? string.Empty;
payModel.SelectedMethodId = Request.Form["paymethod"] ?? string.Empty;
payModel.DataPurchaseOrderNumber = Request.Form["ponumber"] ?? string.Empty;
payModel.DataCompanyAccountNumber = Request.Form["accountnumber"] ?? string.Empty;
payModel.DataCreditCard.CardHolderName = Request.Form["cccardholder"] ?? string.Empty;
payModel.DataCreditCard.CardNumber =
CardValidator.CleanCardNumber(Request.Form["cccardnumber"] ?? string.Empty);


var expMonth = 0;
int.TryParse(Request.Form["ccexpmonth"] ?? string.Empty, out expMonth);
payModel.DataCreditCard.ExpirationMonth = expMonth;
Expand Down Expand Up @@ -1360,6 +1368,16 @@ private List<RuleViolation> ValidatePayment(CheckoutViewModel model)
private List<RuleViolation> ValidateCreditCard(CheckoutViewModel model)
{
var violations = new List<RuleViolation>();

if (HccApp.CurrentStore.Settings.PaymentCreditCardGateway == PaymentGatewayType.Stripe)
{
if (string.IsNullOrEmpty(model.PaymentMethodId))
{
violations.Add(new RuleViolation("Payment Method", string.Empty, Localization.GetString("StripePaymentError"), string.Empty));
}
return violations;
}

var cardData = model.PaymentViewModel.DataCreditCard;
if (!CardValidator.IsCardNumberValid(cardData.CardNumber))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ public CheckoutViewModel()
RequirePhoneNumber = false;
PaymentIntentClientSecret = string.Empty;
PaymentIntentId = string.Empty;
PaymentMethodId = string.Empty;
StripePublicKey = string.Empty;
}

Expand Down Expand Up @@ -240,6 +241,11 @@ public CheckoutViewModel()
/// </summary>
public string PaymentIntentId { get; set; }

/// <summary>
/// The PaymentMethodId
/// </summary>
public string PaymentMethodId { get; set; }

/// <summary>
/// The Stripe Payment gateway public Key
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -877,16 +877,11 @@
async function CreatePaymentMethod(clientSecret) {
var status = await checkPaymentStatus(clientSecret)
if (status === "requires_payment_method") {
var cardNumber = $("#cccardnumber").val();
var nameOnCard = $("#cccardholder").val();
var cvc = $("#ccsecuritycode").val();
var expMonth = $("#ccexpmonth").val();
var expYear = $("#ccexpyear").val();
var paymentIntent = $("#PaymentIntentId").val();
var pm = "";
if (cardNumber && cvc && expMonth && expYear && nameOnCard) {
var paymentMethodId = $("#PaymentMethodId").val();
if (paymentMethodId) {
var reqUrl = hcc.getServiceUrl("checkout/AttachPaymentMethod");
$.post(reqUrl, { "CardNumber": cardNumber, "Cvc": cvc, "ExpMonth": expMonth, "ExpYear": expYear, "PaymentIntentId": paymentIntent }, null, "json")
$.post(reqUrl, { "PaymentIntentId": paymentIntent, "PaymentMethodId": paymentMethodId }, null, "json")
.done((data) => {
stripe
.retrievePaymentIntent(clientSecret)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,4 +273,7 @@
<data name="VatNumberValMsg.Text" xml:space="preserve">
<value>Please check the format of the VAT number</value>
</data>
<data name="StripePaymentError.Text" xml:space="preserve">
<value>There was an error processing your payment. Please verify that your credit card details are correct and try again. If the issue persists, contact support.</value>
</data>
</root>
Loading

0 comments on commit 1e00851

Please sign in to comment.