overshom-wayforpay
v1.1.0
Published
High Quality TypeScript package for WayForPay payment provider
Downloads
645
Maintainers
Readme
Install
yarn add overshom-wayforpay
Overview
This is TypeScript library to work with WayForPay. Completely typed and ready to use.
More features implementation are welcome to be merged from type-safe high-quality PRs.
Usage
Below are steps to demonstrate basic flow for creating invoice and monitoring webhook on server when invoiced paid.
Initialize WFP with your credentials.
import { WFP, WFP_CONFIG } from 'overshom-wayforpay';
WFP_CONFIG.DEFAULT_PAYMENT_CURRENCY = 'UAH';
export const wfp = new WFP({
MERCHANT_ACCOUNT: 'test_merch_n1',
MERCHANT_SECRET_KEY: 'flk3409refn54t54t*FNJRET',
MERCHANT_DOMAIN_NAME: 'https://product.com',
// service URL needed to receive webhooks
SERVICE_URL: 'https://api.product.com/wayforpay-webhook',
});
Create invoice
const response = await wfp.createInvoiceUrl({
orderReference: (Math.random() * 1e17).toString(),
productName: ['Product title'],
productCount: [1],
productPrice: [1],
});
if (response.error) {
// return nicely handled error
}
const invoice = response.value;
// invoice structure sample
{
invoiceUrl: 'https://secure.wayforpay.com/invoice/ib35935c03535',
reason: 'Ok',
reasonCode: 1100,
qrCode: 'https://wayforpay.com/qr/img/ib35935c03535?type=i&size=200'
}
Redirect users to invoiceUrl
or show them QR code so they can pay for the invoice on secure WayForPay page in browser.
Monitor invoice status changes via webhook
Using simple express server might look next:
import express from 'express';
const app = express();
app.use(express.json());
app.post(WAYFORPAY_WEBHOOK_ROUTE, (req, res) => {
// if webhook payload corrupted / signature invalid next line will throw an error
const data = wfp.parseAndVerifyIncomingWebhook(req.body);
if (data.transactionStatus === 'Approved') {
// TODO process transaction
}
// create special-format response for WFP server so it stops sending this webhook.
const answer = wfp.prepareSignedWebhookResponse(data);
res.send(answer);
});
Get currency rates
const response = await wfp.getCurrencyRates();
// see response.value for details