paypal/ts/paypal.classes.transaction.ts

64 lines
2.3 KiB
TypeScript
Raw Normal View History

2020-08-23 13:33:19 +00:00
import * as plugins from './paypal.plugins';
2020-08-24 01:55:50 +00:00
import { PayPalAccount } from './paypal.classes.account';
2020-08-23 13:33:19 +00:00
export interface IPayPalOriginTransactionApiObject {
paypal_account_id: string;
transaction_id: string;
transaction_event_code: string;
transaction_initiation_date: string;
transaction_updated_date: string;
transaction_amount: { currency_code: string; value: string };
transaction_status: string;
transaction_subject: string;
ending_balance: { currency_code: string; value: string };
available_balance: { currency_code: string; value: string };
invoice_id: string;
protection_eligibility: string;
}
export interface IPayPalTransactionOptions {
id: string;
originApiObject: IPayPalOriginTransactionApiObject
amount: number;
currency: 'USD' | 'EUR';
timestampIso: string;
}
export class PayPalTransaction {
public static async getTransactionFor30days(
2020-08-23 15:36:07 +00:00
paypalInstanceArg: PayPalAccount,
2020-08-23 13:33:19 +00:00
startPointMillis: number = Date.now() - plugins.smarttime.units.days(30)
) {
const startDate = startPointMillis;
const endDate = startDate + plugins.smarttime.units.days(30);
const startDateIso = plugins.smarttime.ExtendedDate.fromMillis(startDate).toISOString();
const endDateIso = plugins.smarttime.ExtendedDate.fromMillis(endDate).toISOString();
2020-08-24 01:55:50 +00:00
console.log(`getting PayPal transactions from ${startDateIso} + ${endDateIso}`);
2020-08-23 13:33:19 +00:00
const response = await paypalInstanceArg.request(
'GET',
`/v1/reporting/transactions?start_date=${startDateIso}&end_date=${endDateIso}`,
{}
);
const returnTransactions: PayPalTransaction[] = []
for (const transactionDetail of response.transaction_details) {
const apiObject: IPayPalOriginTransactionApiObject = transactionDetail.transaction_info;
const paypalTransaction = new PayPalTransaction({
originApiObject: apiObject,
id: apiObject.transaction_id,
amount: parseFloat(apiObject.transaction_amount.value),
currency: apiObject.transaction_amount.currency_code as 'EUR' | 'USD',
timestampIso: apiObject.transaction_initiation_date
});
returnTransactions.push(paypalTransaction);
}
return returnTransactions;
}
public data: IPayPalTransactionOptions;
constructor(dataArg: IPayPalTransactionOptions) {
this.data = dataArg;
}
}