Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/frandiox/vue-use-stripe

Thin Vue 3 wrapper for Stripe.js
https://github.com/frandiox/vue-use-stripe

elements stripe typescript vue vue3

Last synced: 16 days ago
JSON representation

Thin Vue 3 wrapper for Stripe.js

Awesome Lists containing this project

README

        

# Vue Use Stripe

This is a thin Vue 3 wrapper (0.7 KB gzipped) for Stripe.js written in TypeScript. It simply provides a function (Vue hook) to create Stripe elements and a component that conveniently emits events.

Support for Vue 2 was added in `0.1.0` via `vue-demi`.

## Installation

Add Stripe.js to `index.html` as recommended by Stripe:

```html

```

Alternatively, [install `@stripe/stripe-js`](https://github.com/stripe/stripe-js) and import it in your project to automatically add the previous script tag as a side effect:

```js
// main.js
import '@stripe/stripe-js'
```

Install this wrapper:

```bash
yarn add vue-use-stripe
```

If you are using TypeScript, make sure you also install the mentioned `@stripe/stripe-js` library as well to get proper types for Stripe. Note that, if you are adding the script tag direclty to `index.html`, then `@stripe/stripe-js` can be installed as a **dev dependency** (it will only be used for types, not bundled in your app).

## Usage

### Vue 3 in ESM environment

```ts
import { defineComponent, ref } from 'vue'
import { useStripe, StripeElement } from 'vue-use-stripe'

export default defineComponent({
components: { StripeElement },
setup() {
const event = ref(null)

const {
stripe,
elements: [cardElement],
} = useStripe({
key: process.env.VUE_APP_STRIPE_PUBLIC_KEY || '',
elements: [{ type: 'card', options: {} }],
})

const registerCard = () => {
if (event.value?.complete) {
// Refer to the official docs to see all the Stripe instance properties.
// E.g. https://stripe.com/docs/js/setup_intents/confirm_card_setup
return stripe.value?.confirmCardSetup('', {
payment_method: {
card: cardElement.value,
},
})
}
}

return {
event,
cardElement,
registerCard,
}
},
})
```

```html


Add

{{ event.error.message }}

```

### Vue 2

Install `@vue/composition-api` as a dependency. Everything else should be similar to the example above for Vue 3.

### Downloading directly from CDN

Make sure `vue-demi` is included before `vue-use-stripe`:

```html

const { useStripe, StripeElement } = window.VueUseStripe
// Same as Vue 3 example above

```

### API

```ts
useStripe(options: StripeOptions): {
// Reactive reference to the Stripe instance (created using `window.Stripe`) with proper typings
stripe: Ref;

// Reactive reference to the internal elements instance (Stripe.elements(...)).
// This allows creating Stripe elements manually (optional):
// stripeElements.create('card', { })
stripeElements: Ref;

// Array of elements created out of `StripeOptions.elements` array
elements: Ref[];
}

type StripeOptions = {
// Stripe API key
key: string;

// Array of elements to be created
// See the following link for possible types and options:
// https://stripe.com/docs/js/elements_object/create_element?type=card
// E.g. `[{ type: 'card', options: { hidePostalCode: true } }, { type: 'fpxBank' }, ...]
elements?: { type: string; options: object }[];

// Stripe constructor options: https://stripe.com/docs/js/initializing
constructorOptions?: object;

// Elements constructor options: https://stripe.com/docs/js/elements_object/create
elementsOptions?: object;
}
```

Note: `StripeOptions.elements` array is optional. Alternatively, create elements manually using the returned `stripeElements`.

The `` component will emit any event created by the internal element: `change`, `ready`, `click`, `focus`, `blur`.