export function getConfig() {
return {
title: 'Ammer Pay',
paymentMethods: [{
hostedPage: {
title: 'Ammer Pay',
billingAddressMandatoryFields: ['CITY'],
logos: {
white: {
svg: 'https://media.ammer.io/icons/ammer_pay_logo.svg',
png: 'https://media.ammer.io/icons/ammer_pay_logo.png'
},
colored: {
svg: 'https://media.ammer.io/icons/ammer_pay_logo.svg',
png: 'https://media.ammer.io/icons/ammer_pay_logo.png'
}
}
}
}],
credentialsFields: [{
simpleField: {
name: 'merchantId',
label: 'Merchant id'
},
},
{
simpleField: {
name: 'cashRegisterId',
label: 'Cash register id'
}
},
{
simpleField: {
name: 'deviceId',
label: 'Device id'
}
},
{
simpleField: {
name: 'invoiceCurrency',
label: 'Invoice currency'
}
},
{
simpleField: {
name: 'locationId',
label: 'Location id'
}
}
]
};
}
import { ammerPayRequest } from 'backend/ammerPayAPI.js';
export const connectAccount = async (options, context) => {
return {
'accountId': 'Ammer Pay',
'credentials': {
'merchantId': options.credentials.merchantId,
'cashRegisterId': options.credentials.cashRegisterId,
'deviceId': options.credentials.deviceId,
'invoiceCurrency': options.credentials.invoiceCurrency,
'locationId': options.credentials.locationId
}
}
};
export const createTransaction = async (options, context) => {
try {
let checkoutSession = await createCheckoutSession(options);
return checkoutSession;
} catch (error) {
return error;
}
};
// Creates a new checkout session using the Ammer API.
export async function createCheckoutSession(transactionRequest) {
try {
const hostName = "exampleHost";
const siteName = "exampleName";
// Set the callback URL to this site's 'updateCheckoutSession' HTTP endpoint.
const callbackUrl = `https://${hostName}.wixsite.com/${siteName}/_functions/updateTransaction?wixTransactionId=${transactionRequest.wixTransactionId}`;
const returnUrl = transactionRequest.order.returnUrls.successUrl;
const body = {
merchantId: transactionRequest.merchantCredentials.merchantId,
cashRegisterId: transactionRequest.merchantCredentials.cashRegisterId,
deviceId: transactionRequest.merchantCredentials.deviceId,
invoiceCurrency: transactionRequest.merchantCredentials.invoiceCurrency,
locationId: transactionRequest.merchantCredentials.locationId,
netTotal: transactionRequest.order.description.totalAmount,
redirectUrl: returnUrl,
callbackUrl: callbackUrl,
};
const response = await ammerPayRequest(body);
const paymentUrlArray = response.paymentUrl.split('/');
const txId = paymentUrlArray[paymentUrlArray.length - 1];
if (response.paymentUrl) {
return {
pluginTransactionId: txId,
redirectUrl: response.paymentUrl,
};
} else {
const errorObject = {
reasonCode: 6000,
errorCode: 'GENERAL_ERROR',
errorMessage: 'Something went wrong with the transaction request',
};
return errorObject;
}
} catch (error) {
console.error('Error completing checkout request: ', error);
return error;
}
}
export const refundTransaction = async (options, context) => {};
import { fetch } from 'wix-fetch'
export async function ammerPayRequest(body) {
const options = {
method: 'POST',
headers: {
'X-DEVICE-KEY': body.deviceId,
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams(body).toString()
}
try {
const response = await fetch('https://apimerchant.ammer.io/merchants/api/service/invoice/createAndRedirect?application=WIX', options);
const formattedResponse = await response.json();
return formattedResponse;
} catch (err) {
console.log('The request to the AmmerPay API failed.', err);
return err;
}
}
import wixPaymentProviderBackend from 'wix-payment-provider-backend';
import { ok, badRequest } from 'wix-http-functions';
// This endpoint is used to update the status of a checkout session transaction.
export async function post_updateTransaction(request) {
const transactionRequestBody = await request.body.json()
const response = {
'headers': {
'Content-Type': 'application/json'
}
};
// If the payment was received by Ammer update the transaction status on the site.
if (transactionRequestBody.state === 'Payment_Received') {
const queryParamId = request.query['wixTransactionId'];
try {
await submitTransactionUpdate(queryParamId, transactionRequestBody.txId);
response.body = {};
return ok(response);
} catch (err) {
response.body = {
'error': err
};
return badRequest(response);
}
} else {
return badRequest(response);
}
}
// Use the submit event function to update a transaction's status.
export async function submitTransactionUpdate(wixTransactionId, pluginTransactionId) {
try {
const response = await wixPaymentProviderBackend.submitEvent({
'event': {
'transaction': {
'wixTransactionId': wixTransactionId,
'pluginTransactionId': pluginTransactionId
}
}
});
return response;
} catch (error) {
console.log('Error updating the transaction status: ', error)
return error;
}
}