shopier-api
Version:
Shopier Payment Api
1 lines • 8.73 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/enums/platformTypes.enum.ts","../src/enums/productTypes.enum.ts","../src/enums/currencyTypes.enum.ts"],"sourcesContent":["import { createHmac } from 'crypto';\nimport {\n IBuyer,\n IForm,\n IShippingAddress,\n IBillingAddress,\n ICallback\n} from './interfaces';\nimport { PlatformType, ProductType } from './enums';\nimport { deprecate } from 'util';\nimport { CurrencyType } from './enums/currencyTypes.enum';\n\nexport class Shopier {\n private paymentUrl: string =\n 'https://www.shopier.com/ShowProduct/api_pay4.php';\n private apiKey: string;\n private apiSecret: string;\n private buyer: IBuyer = {} as IBuyer;\n private orderBilling: IBillingAddress = {} as IBillingAddress;\n private orderShipping: IShippingAddress = {} as IShippingAddress;\n private currency: CurrencyType = CurrencyType.TL;\n private moduleVersion: string = '1.0.4';\n\n constructor(apiKey: string, apiSecret: string) {\n this.apiKey = apiKey;\n this.apiSecret = apiSecret;\n }\n\n setBuyer(fields: IBuyer) {\n this.buyer = fields;\n return this;\n }\n\n setOrderBilling(fields: IBillingAddress) {\n this.orderBilling = fields;\n return this;\n }\n\n setOrderShipping(fields: IShippingAddress) {\n this.orderShipping = fields;\n return this;\n }\n\n private generateIForm(amount: number): IForm {\n const args: IForm = {\n API_key: this.apiKey,\n website_index: 1,\n platform_order_id: this.buyer.platform_order_id ?? this.buyer.buyer_id_nr,\n product_name: this.buyer.product_name,\n product_type: ProductType.REAL_OBJECT || this.buyer.product_type,\n buyer_name: this.buyer.buyer_name,\n buyer_surname: this.buyer.buyer_surname,\n buyer_email: this.buyer.buyer_email,\n buyer_account_age: this.buyer.buyer_account_age ?? 0,\n buyer_id_nr: this.buyer.buyer_id_nr,\n buyer_phone: this.buyer.buyer_phone,\n billing_address: this.orderBilling.billing_address,\n billing_city: this.orderBilling.billing_city,\n billing_country: this.orderBilling.billing_country,\n billing_postcode: this.orderBilling.billing_postcode,\n shipping_address: this.orderShipping.shipping_address,\n shipping_city: this.orderShipping.shipping_city,\n shipping_country: this.orderShipping.shipping_country,\n shipping_postcode: this.orderShipping.shipping_postcode,\n total_order_value: amount,\n currency: this.currency,\n platform: PlatformType.IN_FRAME,\n is_in_frame: PlatformType.IN_FRAME,\n current_language: this.lang(),\n modul_version: this.moduleVersion,\n random_nr: Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000,\n signature: ''\n };\n\n const platformOrderId =\n this.buyer.platform_order_id ?? this.buyer.buyer_id_nr;\n const data =\n args.random_nr + platformOrderId + args.total_order_value + args.currency;\n\n const hmac = createHmac('sha256', this.apiSecret);\n hmac.update(data);\n const signatureBase64 = hmac.digest('base64');\n args.signature = signatureBase64;\n\n return args;\n }\n\n private recursiveHtmlStringGenerator(args: IForm): string {\n return Object.entries(args)\n .map(\n ([key, value]) => `<input type=\"hidden\" name=\"${key}\" value=\"${value}\">`\n )\n .join('');\n }\n\n /**\n * @deprecated Use `generatePaymentHTML(amount: number)` instead\n */\n payment(amount: number): string {\n deprecate(\n this.payment,\n 'payment(amount: number) is deprecated. Use generatePaymentHTML(amount: number) instead.'\n );\n return this.generatePaymentHTML(amount);\n }\n\n generatePaymentHTML(amount: number): string {\n const obj = this.generateIForm(amount);\n return `<!doctype html>\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\"\n content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\">\n <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n <title></title>\n </head>\n <form id=\"shopier_payment_form\" method=\"post\" action=\"${this.paymentUrl}\">\n ${this.recursiveHtmlStringGenerator(obj)}\n </form>\n <body>\n <script type=\"text/javascript\">\n document.getElementById(\"shopier_payment_form\").submit();\n </script>\n </body>\n </html>`;\n }\n\n setCurrency(currency: keyof typeof CurrencyType): this;\n setCurrency(currency: CurrencyType): this;\n setCurrency(currency: CurrencyType | keyof typeof CurrencyType) {\n this.currency =\n typeof currency === 'number' ? currency : CurrencyType[currency];\n return this;\n }\n\n private lang(): number {\n const current_language = 'tr-TR';\n let current_lan = 1;\n if (current_language == 'tr-TR') {\n current_lan = 0;\n }\n return current_lan;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n callback(body: any): ICallback | false {\n const data = `${body.random_nr}${body.platform_order_id}`;\n const hmac = createHmac('sha256', this.apiSecret);\n hmac.update(data);\n const expected = hmac.digest('base64');\n if (body.signature === expected) {\n if (body.status === 'success') {\n return {\n order_id: body.platform_order_id,\n payment_id: body.payment_id,\n installment: body.installment\n };\n } else {\n return false;\n }\n } else {\n throw new Error('Signature is not valid.');\n }\n }\n}\n\nexport * from './enums';\n","export enum PlatformType {\n IN_FRAME = 0,\n NOT_IN_FRAME = 1\n}\n","export enum ProductType {\n REAL_OBJECT = 0,\n DOWNLOADABLE_VIRTUAL = 1,\n DEFAULT = 2\n}\n","export enum CurrencyType {\n TL,\n USD,\n EUR\n}\n"],"mappings":"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","names":["PlatformType","ProductType","CurrencyType"]}