Add Inject Stripe
Inject Stripe
This release adds a new utility function injectStripe
based on the Angular inject function. injectStripe
is only supported during instantiation of a dependency by the DI system
- If you call
injectStripe
without parameters you will get the instance of theStripeService
- if you call
injectStripe
with parameters you will get a new stripe instance, similar as if you usedStripeFactoryService
create method
Example
import { CommonModule } from '@angular/common';
import { Component, OnInit, ViewChild } from '@angular/core';
import { ReactiveFormsModule, UntypedFormBuilder, Validators } from '@angular/forms';
import { StripePaymentElementComponent, NgxStripeModule, injectStripe } from 'ngx-stripe';
import { StripeElementsOptions } from '@stripe/stripe-js';
import { YourOwnServerService } from '../core';
@Component({
selector: 'ngstr-payment-element-inject-example',
template: `
<div maxWidth="900">
<div color="secondary" section-content-header>
<span>Payment Element</span>
</div>
<div section-content [formGroup]="stripeTest">
<input matInput placeholder="name" formControlName="name" />
<input matInput placeholder="amount" type="number" formControlName="amount" />
<ng-container *ngIf="elementsOptions?.clientSecret as clientSecret">
<ngx-stripe-payment [stripe]="stripe" [clientSecret]="clientSecret"></ngx-stripe-payment>
</ng-container>
<button (click)="pay()">PAY</button>
</div>
</div>
`,
styles: [],
standalone: true,
imports: [
CommonModule,
ReactiveFormsModule,
NgxStripeModule
]
})
export class PaymentElementInjectExampleComponent implements OnInit {
@ViewChild(StripePaymentElementComponent)
paymentElement: StripePaymentElementComponent;
stripeTest = this.fb.group({
name: ['Angular v12', [Validators.required]],
amount: [1109, [Validators.required, Validators.pattern(/\d+/)]]
});
stripe = injectStripe(this.plutoService.KEYS.main);
elementsOptions: StripeElementsOptions = {
locale: 'en'
};
paying = false;
constructor(
private fb: UntypedFormBuilder,
private yourServer: YourOwnServerService
) {}
ngOnInit() {
// replace this with your own implementation
this.yourServer
.createPaymentIntent({
amount: this.stripeTest.get('amount').value,
currency: 'eur'
})
.subscribe((pi) => {
this.elementsOptions.clientSecret = pi.client_secret;
});
}
pay() {
if (this.stripeTest.valid) {
this.paying = true;
this.stripe
.confirmPayment({
elements: this.paymentElement.elements,
confirmParams: {
payment_method_data: {
billing_details: {
name: this.stripeTest.get('name').value
}
}
},
redirect: 'if_required'
})
.subscribe((result) => {
this.paying = false;
console.log('Result', result);
if (result.error) {
// Show error to your customer (e.g., insufficient funds)
alert({ success: false, error: result.error.message });
} else {
// The payment has been processed!
if (result.paymentIntent.status === 'succeeded') {
// Show a success message to your customer
alert({ success: true });
}
}
});
} else {
console.log(this.stripeTest);
}
}
}