A type safe PayU client for Typescript.
Originally authored by kasvith, updated by me to extend API coverage.
npm install --save @tax1driver/ts-payu
import { PayU, Order, Buyer, Product, Currency, ... } from "@tax1driver/ts-payu";
const payU = new PayU(clientId, clientSecret, merchantPosId, secondKey, {
sandbox: false,
});
const result = await payU.createOrder({
notifyUrl: "https://my.shop.notify.com/notify",
customerIp: "127.0.0.1",
continueUrl: "https://myshop.com/order?id=abc",
description: "My order",
currencyCode: Currency.PLN,
totalAmount: 2000,
buyer: {
email: "buyer@email.com",
},
products: [
{ name: "mobile phone #1", quantity: 1, unitPrice: 1000 },
{ name: "mobile phone #2", quantity: 1, unitPrice: 1000 },
],
});
If your shop does not approve payments automatically, you need to capture them and confirm.
const result = await payU.captureOrder("payU order Id");
Or using the legacy endpoint (status update method):
const result = await payU.legacyCaptureOrder("payU order Id from notification");
To cancel an order before completed call this method.
const result = await payU.cancelOrder("payU order Id from notification");
To refund an order after completed call this method.
const result = await payU.refundOrder("payU order Id from notification", "reason");
Retrieve the OAuth access token. This is usually handled internally, but you can get it explicitly if needed.
const token = await payU.getAccessToken();
Retrieve detailed information about an existing order.
const orderDetails = await payU.getOrder("payU order Id");
Retrieve details of a specific refund.
const refund = await payU.getRefund("payU order Id", "refund Id");
Retrieve all refunds for a specific order.
const refunds = await payU.getAllRefunds("payU order Id");
Retrieve all transactions for a specific order.
const transactions = await payU.getTransactions("payU order Id");
Retrieve all available payment methods. Optionally specify a language code.
const paymentMethods = await payU.getPaymentMethods("pl"); // or "en"
Retrieve shop data including balance information.
const shopData = await payU.getShopData("shop Id");
Create a new payout request.
const payout = await payU.createPayout({
payout: {
payoutId: "unique-payout-id",
shopId: "shop Id",
currencyCode: Currency.PLN,
amount: 1000,
description: "Payout description",
bankAccount: {
number: "PL61109010140000071219812874"
}
}
});
Retrieve details of a specific payout.
const payoutDetails = await payU.getPayout("payout Id");
Delete a saved payment token.
await payU.deleteToken("token value");
To verify notification are valid cryptogrpically this method can be used.
const headers = req.headers;
const isValid = payU.verifyNotification(
headers["OpenPayu-Signature"],
JSON.stringify(req.body)
);
console.log(isValid);
To validate IPs are correct, use following method. It will automatically adjust to match your environment(production or sandbox)
const isIpValid = payU.isIpValid("127.0.0.1");