Paylike Meteor
A full-fledged Meteor wrapper for Paylike's API enabling synchronous consumption of their payments API.
Installation
meteor add jorgenvatle:paylike
Usage
Import package
The following examples will use the paylike constant defined below.
1import Paylike from 'meteor/jorgenvatle:paylike'; 2 3// API Key optional if you've already got yours defined in your Meteor settings. 4const paylike = new Paylike('your-api-key');
To not have to pass your API key in with every new instance of Paylike, use the following settings format for your Meteor settings:
1{ 2 "paylike": { 3 "private": "paylike-api-key" 4 } 5}
Apps
An app belongs to a merchant and is used to perform actions on the attached merchant. Your API key is regarded as an app.
Current app
1console.log(paylike.me);
Example output:
1{ 2 "id": "5bbce49ed0dde36a097c3574", 3 "name": "Paylike Meteor Test App", 4 "created": "2018-10-09T17:26:10.187Z" 5}
Create app
This adds an app to the merchant your current API key (app) belongs to.
1const newApp = paylike.apps.create({ 2 name: 'my-new-app' // Optional 3});
Merchants
The Merchant object is responsible for a funding bank account as well as all of it's associated transactions. This is essentially a shop. It is important to note that all users and apps have complete access to their merchant. This includes inviting and removing users.
Current merchant
1const merchant = paylike.merchant; 2 3console.log(merchant.name) // "My Online Shop"
Create a merchant
1const myMerchant = paylike.merchants.create({ 2 name: 'Acme Commerce', 3 test: true, 4 currency: 'EUR', 5 email: 'john@example.com', 6 website: 'https://example.com', 7 descriptor: 'ACME', 8 company: { 9 country: 'RO' 10 } 11}); 12 13console.log(myMerchant.name) // "Acme Commerce"
Fetch a merchant
1const myMerchant = paylike.merchants.find('some-merchant-id');
Update a merchant
1myMerchant.update({ 2 name: 'Acme Commerce 2', 3 email: 'jane@example.com', 4 descriptor: 'ACME2', 5}); 6 7console.log(myMerchant.name) // "Acme Commerce 2"
Fetch all merchants
1const merchants = paylike.merchants.fetch({ 2 limit: 50, // optional - Defaults to 50. 3 before: 'merchant-id-goes-here', // optional - Fetches all merchants before the given id. 4 after: 'merchant-id-goes-here', // optional - Fetches all merchants after the given id. 5});
Merchant's Users
A merchant can have several users attached. These have complete access to their respective merchant and can add and remove additional apps and users.
Invite a user
1const acmeUser = myMerchant.users.invite({ email: 'steven@example.com' }); 2 3console.log(acmeUser.id); // "5bbe8430882cf804f6112d9f" 4console.log(acmeUser.isMember); // "true"/"false" - Whether or not the user was a member before creation.
Fetch a user
1const acmeUser = myMerchant.users.find('steven@example.com');
Remove a user
1// You can use: 2acmeUser.remove(); 3 4// Or: 5acmeUser.revoke(); 6 7// Or: 8acmeUser.delete();
Fetch all users
1myMerchant.users.fetch({ 2 limit: 50, // optional - Defaults to 50. 3 before: 'user-id-goes-here', // optional - Fetches all users before the given id. 4 after: 'user-id-goes-here', // optional - Fetches all users after the given id. 5});
Transactions
A transaction, or reservation, defines an amount of funds authorized for captures, refunds and voids.
Create a transaction
1const details = { 2 currency: 'EUR', // required - Currency 3 amount: 1337, // required - Amount of funds to reserve. 4 descriptor: 'test-payment', // optional - Descriptor to show up on bank statement 5}; 6 7// Use the card associated with a previous transaction: 8const transaction = myMerchant.transactions.create({ 9 transactionId: 'id-of-a-previous-transaction', // required - Needs to be a valid transaction ID. 10 ...details, 11}); 12 13// ... Or use a saved card: 14const cardTransaction = myMerchant.transactions.create({ 15 cardId: 'card-id-goes-here', 16 ...details, 17});
Fetch a transaction
1const transaction = myMerchant.transactions.find('transaction-id-goes-here');
Capture a transaction
1transaction.capture({ 2 amount: 1337, // optional - Amount to capture. (defaults to reserved amount) 3});
Void a transaction
1transaction.void({ 2 amount: 1337, // optional - Amount to void. (defaults to reserved amount) 3});
Refund a transaction
1transaction.refund({ 2 amount: 1337, // optional - Amount to refund. (defaults to captured amount) 3});
Cards
Cards saved using the Web SDK are already in your vault and doesn't need to be saved on the backend.
Save a card using a transaction
1const card = myMerchant.cards.save({ 2 transactionId: 'id-of-a-previous-transaction', // required - Needs to be a valid transaction ID. 3 notes: 'Some notes about this card', // optional 4});
Fetch a card
1const card = myMerchant.cards.find('card-id-goes-here');
Create a transaction from card
1const transaction = card.reserve({ 2 currency: 'EUR', // required - Currency 3 amount: 1337, // required - Amount of funds to reserve. 4 descriptor: 'test-payment', // optional - Descriptor to show up on bank statement 5});
Fraud alerts
Fetch all fraud alerts
1const alerts = myMerchant.fraudAlerts.fetch({ 2 limit: 50, // optional - limit the alert count. (defaults to 50) 3 before: 'alert-id-goes-here', // optional - Fetches all users before the given id. 4 after: 'alert-id-goes-here', // optional - Fetches all users after the given id. 5 filter: { 6 transactionId: 'some-id' // optional - Fetch alerts only for the given transaction. 7 } 8});
Fetch an alert
1const alert = myMerchant.fraudAlerts.find('alert-id-goes-here');
Contributing
Pull requests are more than welcome! When adding new features, going through the effort to include tests for them is greatly appreciated.
Starting the development environment
- Add your Paylike credentials to
settings.json(Seesettings.example.jsonfor an example) - Use
npm installto install dependencies. - Use
npm startto start both the TypeScript build watcher and the test watcher.
Alternatively, start watchers individually
Use npm test to start just the test watcher.
Use npm run build -- --watch to start just the TypeScript build watcher.
License
This repository is licensed under the ISC license.
Copyright (c) 2018, Jørgen Vatle.