@unchainedshop/plugins
Version:
Because of a Typescript issue with upstream "postfinancecheckout", the Postfinance plugin has been disabled from transpilation, import the source ts files from src and enable node_module tsc or copy over the src/payment/postfinance-checkout to your projec
142 lines (121 loc) • 4.67 kB
text/typescript
import * as pf from 'postfinancecheckout';
const { PostFinanceCheckout } = pf;
const { PFCHECKOUT_SPACE_ID, PFCHECKOUT_USER_ID, PFCHECKOUT_SECRET } = process.env;
const SPACE_ID = parseInt(PFCHECKOUT_SPACE_ID as string, 10);
const USER_ID = parseInt(PFCHECKOUT_USER_ID as string, 10);
const getConfig = () => {
return {
space_id: SPACE_ID,
user_id: USER_ID,
api_secret: PFCHECKOUT_SECRET,
};
};
const getTransactionService = () => {
return new PostFinanceCheckout.api.TransactionService(getConfig());
};
const getTransactionCompletionService = () => {
return new PostFinanceCheckout.api.TransactionCompletionService(getConfig());
};
const getTransactionVoidService = () => {
return new PostFinanceCheckout.api.TransactionVoidService(getConfig());
};
const getRefundService = () => {
return new PostFinanceCheckout.api.RefundService(getConfig());
};
const getTransactionPaymentPageService = () => {
return new PostFinanceCheckout.api.TransactionPaymentPageService(getConfig());
};
const getTransactionIframeService = () => {
return new PostFinanceCheckout.api.TransactionIframeService(getConfig());
};
const getTransactionLightboxService = () => {
return new PostFinanceCheckout.api.TransactionLightboxService(getConfig());
};
const getTokenService = () => {
return new PostFinanceCheckout.api.TokenService(getConfig());
};
export const getTransaction = async (
transactionId: string,
): Promise<pf.PostFinanceCheckout.model.Transaction> => {
const transactionService = getTransactionService();
const transaction = await transactionService.read(SPACE_ID, parseInt(transactionId, 10));
return transaction.body;
};
export const getTransactionCompletion = async (
entityId: string,
): Promise<pf.PostFinanceCheckout.model.TransactionCompletion> => {
const transactionCompletionService = getTransactionCompletionService();
const transactionCompletion = await transactionCompletionService.read(
SPACE_ID,
parseInt(entityId, 10),
);
return transactionCompletion.body;
};
export const getToken = async (
spaceId: number,
tokenId: number,
): Promise<pf.PostFinanceCheckout.model.Token> => {
const tokenService = getTokenService();
const token = await tokenService.read(spaceId || SPACE_ID, tokenId);
return token.body;
};
export const createTransaction = async (
transaction: pf.PostFinanceCheckout.model.TransactionCreate,
): Promise<number | null> => {
const transactionService = getTransactionService();
const transactionCreateRes = await transactionService.create(SPACE_ID, transaction);
const transactionCreate = transactionCreateRes.body;
return transactionCreate.id || null;
};
export const voidTransaction = async (transactionId: string): Promise<boolean> => {
const transactionVoidService = getTransactionVoidService();
try {
await transactionVoidService.voidOnline(SPACE_ID, parseInt(transactionId, 10));
return true;
} catch {
return false;
}
};
export const refundTransaction = async (
transactionId: string,
orderId: string,
amount: number,
): Promise<boolean> => {
const refundService = getRefundService();
const refund: pf.PostFinanceCheckout.model.RefundCreate = {
transaction: parseInt(transactionId, 10),
externalId: orderId,
amount,
type: PostFinanceCheckout.model.RefundType.MERCHANT_INITIATED_ONLINE,
};
try {
await refundService.refund(SPACE_ID, refund);
return true;
} catch {
return false;
}
};
export const confirmDeferredTransaction = async (transactionId: string): Promise<boolean> => {
const transactionCompletionService = getTransactionCompletionService();
try {
await transactionCompletionService.completeOnline(SPACE_ID, parseInt(transactionId, 10));
return true;
} catch {
return false;
}
};
export const getPaymentPageUrl = async (transactionId: number): Promise<string> => {
const transactionPaymentPageService = getTransactionPaymentPageService();
const paymentPageUrl = await transactionPaymentPageService.paymentPageUrl(SPACE_ID, transactionId);
return paymentPageUrl.body;
};
export const getLightboxJavascriptUrl = async (transactionId: number): Promise<string> => {
const transactionLightboxService = getTransactionLightboxService();
const javascriptUrl = await transactionLightboxService.javascriptUrl(SPACE_ID, transactionId);
return javascriptUrl.body;
};
export const getIframeJavascriptUrl = async (transactionId: number): Promise<string> => {
const transactionIframeService = getTransactionIframeService();
const javascriptUrl = await transactionIframeService.javascriptUrl(SPACE_ID, transactionId);
return javascriptUrl.body;
};