PSPG eHDM API

Ուղեցույց

Ինչպես է աշխատում

  • 1. Ստացեք WooCommerce պատվերը
  • 2. Սինքրոնացրեք WooCommerce պատվերի ապրանքները eHDM-ի հետ
  • 3. Ստացեք պատրաստված ապրանքները eHDM պահոցից
  • 4. Կանչեք $eHDM->print()-ը՝ փոխանցելով պարտադիր currency պարամետրը և գումարները տվյալ արժույթով
  • 5. Ստացեք ֆիսկալ կտրոնի պատասխանը՝ գումարները ՀՀ դրամով

Արժույթ և փոխարկում ՀՀ դրամի

currency պարամետրը պարտադիր է յուրաքանչյուր print() կանչի համար, այդ թվում՝ AMD կտրոնների դեպքում։ Աջակցվում են AMD, USD, EUR և RUB արժույթները։ Թվային կոդերը նույնպես ընդունվում են, սակայն պետք է փոխանցվեն որպես տեքստային տողեր՝ համապատասխանաբար '051', '840', '978' և '643'։

Արտարժույթով պատվերների ՀԴՄ կտրոնների տպումը կանխադրված անջատված է, այդ թվում՝ գործող կայքում հավելումը թարմացնելուց հետո։ Այն միացնելու համար բացեք Փոխարժեքներ բաժինը, նշեք Արտարժույթով պատվերների կտրոնները տպել ՀՀ դրամով-ը և սեղմեք այդ նշատուփի կողքի Պահպանել կոճակը։ Անջատված վիճակում նոր AMD կտրոնները շարունակում են տպվել, իսկ նոր USD, EUR և RUB կտրոնները չեն տպվում։ Գոյություն ունեցող կտրոնների դիտումը, նամակով ուղարկումը, կրկնօրինակումը և վերադարձը մնում են հասանելի։ Փոխարժեքների ստացումը կամ դրանց ինքնաշխատ թարմացումը միացնելը չի միացնում արտարժութային կտրոնների տպումը։

  • WooCommerce պատվերի համար օգտագործեք $currency = (string) $order->get_currency();։ Գոյություն ունեցող պատվերի համար մի օգտագործեք խանութի ընթացիկ արժույթը։
  • Վճարման բոլոր գումարները, ապրանքների գները և գումարային զեղչերը փոխանցեք currency-ում նշված նույն սկզբնական արժույթով։ Դրանք մի փոխարկեք ՀՀ դրամի մինչև print()-ը կանչելը։
  • AMD-ի դեպքում դրամական արժեքները չեն փոխվում։ USD, EUR և RUB արժույթների փոխարկումը կատարվում է մեկ անգամ՝ print()-ի ներսում, անմիջապես ֆիսկալ տպման հարցումն ուղարկելուց առաջ։
  • Փոխարկման համար օգտագործվում է տպման պահին ընտրված պահպանված փոխարժեքը, ոչ թե պատվերի ստեղծման կամ վճարման պահի փոխարժեքը։ Տպման ընթացքում բանկից նոր փոխարժեք չի հարցվում։
  • Ապրանքների քանակները և տոկոսային զեղչերը չեն փոխարկվում։ Փոխարկվում են գումարային զեղչերը՝ discountType = 2 կամ 4, ինչպես նաև additionalDiscountType = 16։ 1 և 8 տոկոսային տեսակների արժեքները մնում են անփոփոխ։
  • Արտարժույթով ապրանքային կտրոնի դեպքում (mode = 2) դրամային ընդհանուր գումարը հաշվարկվում է փոխարկված գներից, քանակներից և զեղչերից։ Դրամական արժեքները փոխարկելիս կլորացվում են մինչև երկու տասնորդական նիշ, ուստի արդյունքը կարող է փոքր-ինչ տարբերվել պատվերի ընդհանուր գումարի ուղիղ փոխարկումից։ Խառը վճարման գումարները բաշխվում են այս դրամային ընդհանուր գումարին համամասնորեն։
  • Արտարժույթով և առանց ապրանքների կտրոնի դեպքում (mode = 3) վճարման գումարը փոխարկվում է անմիջապես ՀՀ դրամի։ Սկզբնական վճարումը կամ WooCommerce պատվերը չեն փոփոխվում։

Փոխարժեքները կարգավորեք eHDM վահանակի Փոխարժեքներ բաժնում։ Յուրաքանչյուր արտարժույթի համար ընտրեք cba.am աղբյուրը կամ մուտքագրեք ձեռքով փոխարժեք։ Փոխարժեքը ցույց է տալիս սկզբնական արժույթի 1 միավորի արժեքը ՀՀ դրամով։ Օրինակ՝ պայմանական 360.93 փոխարժեքով 10 USD վճարումը կդառնա 3,609.30 ՀՀ դրամ։

ՀՀ Կենտրոնական բանկից ինքնաշխատ թարմացումը կանխադրված անջատված է։ Այն միացնելու համար նշեք Ինքնաշխատ թարմացում-ը և պահպանեք ժամանակացույցը։ Կանխադրված ժամը 16:15-ն է՝ Asia/Yerevan ժամային գոտով՝ անկախ WordPress կայքի ժամային գոտուց։ Ձեռքով թարմացման կոճակը հասանելի է նաև ինքնաշխատ թարմացումն անջատած վիճակում։ Այդ դեպքում տպման համար օգտագործվում է ընտրված պահպանված փոխարժեքը։ Եթե վավեր փոխարժեք չկա, ֆիսկալ տպման հարցումը չի ուղարկվում։ WP-Cron-ի փաստացի աշխատանքը կախված է կայքի այցելություններից կամ սերվերի cron կարգավորումից։

Հաջող տպումից հետո կտրոնի հետ պահպանվում են սկզբնական արժույթը, սկզբնական գումարը և կիրառված փոխարժեքը։ Փոխարժեքի հետագա փոփոխությունը չի վերահաշվարկում այդ կտրոնը։ Հարկային ծառայության պատասխանի և QR-ի վճարային գումարները ՀՀ դրամով են։ Փոխարկման տվյալները պահվում են eHDM պատմության մեջ և չեն ավելացվում Հարկային ծառայության պատասխանին որպես նոր դաշտեր։

Տեղային վավերացման սխալների դեպքում վերադարձվում է code = -3՝ error_code և errorMessage դաշտերով։ Օրինակներ՝ currency_required, foreign_currency_print_disabled, unsupported_currency և rate_unavailable։ Նախքան կտրոնը տպված համարելը ստուգեք պատասխանը։

Աջակցվող սցենարներ

  • Անկանխիկ վճարում — ամբողջ վճարումը կատարվում է անկանխիկ
  • Կանխիկ վճարում — ամբողջ վճարումը կատարվում է կանխիկ
  • Խառը վճարում — մասամբ անկանխիկ, մասամբ կանխիկ
  • Մասնակի վճարում — վճարումը փոխանցվում է partialAmount դաշտով
  • Կանխավճարի օգտագործում — վճարումը փոխանցվում է prePaymentAmount դաշտով

WooCommerce օրինակներում օգտագործվող հիմնական կարգավորումը։ Գումարները և պատրաստված ապրանքները պետք է լինեն պատվերի արժույթով։

$eHDM = apply_filters( 'planetstudio-payment-gateway-ehdm', null );

$wc_order_id = 2708;
$order       = wc_get_order( $wc_order_id );
$amount      = (float) $order->get_total();
$currency    = (string) $order->get_currency();
$order_id    = '3b2a2c1b-a850-4edd-abf9-bb2a36e1078a';

$eHDM->getWoocommersOrderItems( $wc_order_id );
$items = $eHDM->getWoocommersOrderItemsFromDB( $wc_order_id );

1-5 սցենարների պատասխանները պայմանական AMD կտրոնների օրինակներ են՝ 1 ՀՀ դրամ ընդհանուր գումարով։ Դրանք 2708 պատվերի համար հաստատուն արդյունքներ չեն։ Իրական համարներն ու գումարները վերադարձնում է Հարկային ծառայությունը։ Արտարժույթով պատվերների դեպքում կտրոնի գումարները փոխարկումից հետո ՀՀ դրամով են։

Սցենար 1․ Անկանխիկ վճարում

$result = $eHDM->print(
	array(
		'orderId'          => $order_id,
		'wc_orderId'       => $wc_order_id,
		'currency'         => $currency,
		'cardAmount'       => $amount,
		'cashAmount'       => 0,
		'partialAmount'    => 0,
		'prePaymentAmount' => 0,
		'cashierId'        => (int) get_option( 'ehdm_default_cashierId', 1 ),
		'mode'             => 2,
		'partnerTin'       => null,
		'items'            => $items,
	)
);

Սպասվող արդյունքը՝

{
	"code": 0,
	"message": "OK",
	"errorMessage": null,
	"result": {
		"receiptId": "824",
		"crn": "52014201",
		"sn": "2FECD1F8",
		"tin": "00493113",
		"taxpayer": "...",
		"address": "...",
		"time": 1774363086000,
		"fiscal": "30247466",
		"total": 1,
		"change": 0,
		"qr": "TIN: ..., TOTAL_CASH: 0, TOTAL_NONCASH: 1, PREP_USAGE: 0, PARTIAL: 0, TOTAL: 1"
	}
}

Սցենար 2․ Կանխիկ վճարում

$result = $eHDM->print(
	array(
		'orderId'          => '',
		'wc_orderId'       => $wc_order_id,
		'currency'         => $currency,
		'cardAmount'       => 0,
		'cashAmount'       => $amount,
		'partialAmount'    => 0,
		'prePaymentAmount' => 0,
		'cashierId'        => (int) get_option( 'ehdm_default_cashierId', 1 ),
		'mode'             => 2,
		'partnerTin'       => null,
		'items'            => $items,
	)
);

Սպասվող արդյունքը՝

{
	"code": 0,
	"message": "OK",
	"errorMessage": null,
	"result": {
		"receiptId": "825",
		"crn": "52014201",
		"sn": "2FECD1F8",
		"tin": "00493113",
		"taxpayer": "...",
		"address": "...",
		"time": 1774363177000,
		"fiscal": "46682581",
		"total": 1,
		"change": 0,
		"qr": "TIN: ..., TOTAL_CASH: 1, TOTAL_NONCASH: 0, PREP_USAGE: 0, PARTIAL: 0, TOTAL: 1"
	}
}

Սցենար 3․ Խառը վճարում

$card_amount = round( $amount * 0.6, 2 );
$cash_amount = round( $amount - $card_amount, 2 );

$result = $eHDM->print(
	array(
		'orderId'          => $order_id,
		'wc_orderId'       => $wc_order_id,
		'currency'         => $currency,
		'cardAmount'       => $card_amount,
		'cashAmount'       => $cash_amount,
		'partialAmount'    => 0,
		'prePaymentAmount' => 0,
		'cashierId'        => (int) get_option( 'ehdm_default_cashierId', 1 ),
		'mode'             => 2,
		'partnerTin'       => null,
		'items'            => $items,
	)
);

Սպասվող արդյունքը՝

{
	"code": 0,
	"message": "OK",
	"errorMessage": null,
	"result": {
		"receiptId": "826",
		"crn": "52014201",
		"sn": "2FECD1F8",
		"tin": "00493113",
		"taxpayer": "...",
		"address": "...",
		"time": 1774363289000,
		"fiscal": "25105467",
		"total": 1,
		"change": 0,
		"qr": "TIN: ..., TOTAL_CASH: 0.4, TOTAL_NONCASH: 0.6, PREP_USAGE: 0, PARTIAL: 0, TOTAL: 1"
	}
}

Սցենար 4․ Մասնակի վճարում

$result = $eHDM->print(
	array(
		'orderId'          => $order_id,
		'wc_orderId'       => $wc_order_id,
		'currency'         => $currency,
		'cardAmount'       => 0,
		'cashAmount'       => 0,
		'partialAmount'    => $amount,
		'prePaymentAmount' => 0,
		'cashierId'        => (int) get_option( 'ehdm_default_cashierId', 1 ),
		'mode'             => 2,
		'partnerTin'       => null,
		'items'            => $items,
	)
);

Սպասվող արդյունքը՝

{
	"code": 0,
	"message": "OK",
	"errorMessage": null,
	"result": {
		"receiptId": "827",
		"crn": "52014201",
		"sn": "2FECD1F8",
		"tin": "00493113",
		"taxpayer": "...",
		"address": "...",
		"time": 1774363388000,
		"fiscal": "35778064",
		"total": 1,
		"change": 0,
		"qr": "TIN: ..., TOTAL_CASH: 0, TOTAL_NONCASH: 0, PREP_USAGE: 0, PARTIAL: 1, TOTAL: 1"
	}
}

Սցենար 5․ Կանխավճարի օգտագործում

$result = $eHDM->print(
	array(
		'orderId'          => $order_id,
		'wc_orderId'       => $wc_order_id,
		'currency'         => $currency,
		'cardAmount'       => 0,
		'cashAmount'       => 0,
		'partialAmount'    => 0,
		'prePaymentAmount' => $amount,
		'cashierId'        => (int) get_option( 'ehdm_default_cashierId', 1 ),
		'mode'             => 2,
		'partnerTin'       => null,
		'items'            => $items,
	)
);

Սպասվող արդյունքը՝

{
	"code": 0,
	"message": "OK",
	"errorMessage": null,
	"result": {
		"receiptId": "828",
		"crn": "52014201",
		"sn": "2FECD1F8",
		"tin": "00493113",
		"taxpayer": "...",
		"address": "...",
		"time": 1774363457000,
		"fiscal": "10900220",
		"total": 1,
		"change": 0,
		"qr": "TIN: ..., TOTAL_CASH: 0, TOTAL_NONCASH: 0, PREP_USAGE: 1, PARTIAL: 0, TOTAL: 1"
	}
}

Նշում կանխավճարի մասին

Կանխավճարի ստացումը և նախկինում ստացված կանխավճարի օգտագործումը տարբեր սցենարներ են։ Վերևի օրինակում կանխավճարի օգտագործման համար տպվում է ապրանքային կտրոն՝ mode = 2, ապրանքների ցանկով և prePaymentAmount-ում նշված օգտագործվող գումարով։

  • Ապրանքային կտրոնների դեպքում (mode = 2) փոխանցվում է ապրանքների ցանկը, այդ թվում՝ կանխավճարի օգտագործման վերևի օրինակում։
  • Առանց ապրանքների նոր կանխավճար ստանալու համար (mode = 3) ստացված վճարումը փոխանցեք cardAmount կամ cashAmount դաշտով։
  • Նոր ստացված քարտային կամ կանխիկ վճարումը մի փոխանցեք prePaymentAmount դաշտով։ Ֆիսկալ սցենարը պետք է համապատասխանի փաստացի գործարքին։

Կանխավճար առանց ապրանքների

Ստորև բերված օրինակը ցույց է տալիս առանց ապրանքների 1 ՀՀ դրամ նոր անկանխիկ կանխավճարի ստացումը։ PayLink, PayForm և WPForms վճարումների համար կիրառվում է այս՝ առանց ապրանքների կանխավճարային տարբերակը։ Օրինակի բանկային պատվերի համարը փոխարինեք վճարման իրական նույնացուցիչով։

$result = $eHDM->print([
	'orderId'          => 'BANK-ORDER-ID',
	'wc_orderId'       => 0,
	'currency'         => 'AMD',
	'cardAmount'       => 1,
	'cashAmount'       => 0,
	'partialAmount'    => 0,
	'prePaymentAmount' => 0,
	'cashierId'        => 1,
	'mode'             => 3,
	'partnerTin'       => null,
	'items'            => [],
]);

Ապրանքացանկի ստացում

print() մեթոդի համար կարող եք փոխանցել items տարբեր ձևերով՝ կախված ձեր հոսքից։

  • 1. WooCommerce պատվերից (ուղիղ)

    Օգտագործեք այս մեթոդը, երբ ցանկանում եք ստանալ ապրանքները անմիջապես WooCommerce պատվերից։
$items = $eHDM->getWoocommersOrderItems( $wc_order_id );

Այս մեթոդը ձևավորում է ապրանքների ցանկը ընթացիկ պատվերի տվյալներից

  • 2. eHDM-ում պահպանված պատրաստված ապրանքներից

    Օգտագործեք այս մեթոդը, երբ տվյալ պատվերի ապրանքներն արդեն պատրաստվել և պահպանվել են։
$items = $eHDM->getWoocommersOrderItemsFromDB( $wc_order_id );

Այս մեթոդը կարդում է նախկինում պատրաստված WooCommerce ապրանքները, ոչ թե Հարկային ծառայության վերադարձրած ֆիսկալ կտրոնը։ Պատրաստված ապրանքների գները մնում են պատվերի սկզբնական արժույթով։ Նույն արժույթը փոխանցեք print()-ին։ Պահպանված գները մի փոխարկեք նախապես և մի ներկայացրեք որպես AMD։

Ապրանքների սեփական ցանկ

Եթե չեք օգտագործում WooCommerce պատվերի ապրանքները, կարող եք items զանգվածը փոխարինել սեփականով։

$items = array(
	array(
		'adgCode'                => '9205',
		'dep'                    => 1,
		'goodCode'               => '9205-13',
		'goodName'               => 'երգեհոն',
		'quantity'               => 2,
		'unit'                   => 'հատ',
		'price'                  => 25000,
		'additionalDiscount'     => null,
		'additionalDiscountType' => null,
		'discount'               => null,
		'discountType'           => null,
	),
);

$result = $eHDM->print(
	array(
		'orderId'          => 'CUSTOM-ORDER-1',
		'wc_orderId'       => 0,
		'currency'         => 'AMD',
		'cardAmount'       => 50000,
		'cashAmount'       => 0,
		'partialAmount'    => 0,
		'prePaymentAmount' => 0,
		'cashierId'        => 1,
		'mode'             => 2,
		'partnerTin'       => null,
		'items'            => $items,
	)
);

Կտրոնի վերադարձ

Օգտագործեք վերադարձի ընթացքը նախկինում տպված կտրոնի համար ՀԴՄ վերադարձի կտրոն ստեղծելու նպատակով։ Նախ ստացեք սկզբնական կտրոնի տվյալները, ապա տպեք վերադարձի կտրոնը՝ օգտագործելով ստացված ապրանքային տողերի նույնացուցիչներն ու քանակները։

1. Ստանալ վերադարձի կտրոնի տվյալները

$receipt_id = 824;

$return_info = $eHDM->getReturnedReceiptInfo( $receipt_id );

if ( ! is_array( $return_info ) || 0 !== (int) ( $return_info['code'] ?? -1 ) ) {
	// Հարկային ծառայությունը տվյալ կտրոնի վերաբերյալ տեղեկություն չի վերադարձրել։
	return;
}

$receipt = $return_info['result'];
$items   = $receipt['items'] ?? array();

Արդյունքը պարունակում է սկզբնական կտրոնի տվյալները։ Ապրանքների կտրոնի դեպքում result.items-ը պարունակում է վերադարձման ենթակա ապրանքները։ Վերադարձի կտրոն տպելիս օգտագործեք յուրաքանչյուր տողի receiptProductId-ն ու վերադարձվող քանակը։

2. Տպել վերադարձի կտրոն

// Սկզբնական կտրոնի առաջին ապրանքից վերադարձնել մեկ միավոր։
$return_item_list = array(
	array(
		'receiptProductId' => (int) $items[0]['receiptProductId'],
		'quantity'         => 1,
	),
);

$result = $eHDM->printReturnReceipt(
	array(
		'receiptId'           => $receipt_id,
		'cardAmountForReturn' => 0,
		'cashAmountForReturn' => 5000,
		'returnItemList'      => $return_item_list,
	)
);

Անկանխիկ վերադարձի համար նշեք cardAmountForReturn-ը, իսկ cashAmountForReturn-ը թողեք 0։ Կանխիկ վերադարձի համար՝ հակառակը։ Վերադարձի գումարը պետք է համապատասխանի ընտրված ապրանքներին և չգերազանցի սկզբնական կտրոնի գումարը։

Վերադարձի գումարները ՀՀ դրամով են։ Օգտագործեք getReturnedReceiptInfo()-ից ստացված սկզբնական ֆիսկալ կտրոնի գումարներն ու ապրանքների տվյալները։ Դրանք մի փոխարկեք կրկին ընթացիկ փոխարժեքով։ currency պարամետրը պարտադիր է print()-ի համար, ոչ թե printReturnReceipt()-ի։

Ապրանքներ չպարունակող կտրոնների, օրինակ՝ կանխավճարի կտրոնի, դեպքում օգտագործեք getReturnedReceiptInfo()-ի վերադարձած տվյալները։ Դատարկ returnItemList փոխանցեք միայն այն դեպքում, երբ Հարկային ծառայության պատասխանում վերադարձման ենթակա ապրանքներ չկան։

Վերադարձի արդյունք

{
	"code": 0,
	"message": "OK",
	"errorMessage": null,
	"result": {
		"receiptId": "829",
		"fiscal": "...",
		"total": 5000,
		"qr": "TIN: ..., TOTAL_CASH: 5000, TOTAL_NONCASH: 0, ..."
	}
}

Հաջող պատասխանի դեպքում code = 0 է։ Նոր վերադարձի կտրոնի համարը հասանելի է result.receiptId-ում, իսկ սկզբնական QR տվյալները՝ result.qr-ում։ Պահպանված վերադարձի կտրոնի QR պատկերը ստանալու համար getReceiptQR()-ին փոխանցեք նաև ներքին receipt_row_id-ը՝ հենց այդ գրառումն ընտրելու համար, ինչպես նկարագրված է ստորև։

Վերադարձի պարամետրեր

ՊարամետրՏիպՆկարագրություն
receiptIdintՎերադարձվող սկզբնական ՀԴՄ կտրոնի համարը։
cardAmountForReturndoubleՔարտին կամ այլ անկանխիկ եղանակով վերադարձվող գումարը՝ ՀՀ դրամով։
cashAmountForReturndoubleԿանխիկ վերադարձվող գումարը՝ ՀՀ դրամով։
returnItemListarrayՎերադարձվող ապրանքները։ Յուրաքանչյուր տող պարունակում է getReturnedReceiptInfo()-ից ստացված receiptProductId-ն ու վերադարձի quantity-ը։

Կարևոր նշումներ

  • Միշտ printReturnReceipt()-ից առաջ կանչեք getReturnedReceiptInfo()-ը։
  • receiptProductId-ի արժեքները մի ստեղծեք ձեռքով․ օգտագործեք Հարկային ծառայությունից վերադարձված արժեքները։
  • Վերադարձի կտրոնը նոր ֆիսկալ կտրոն է և ունի սեփական կտրոնի համար ու QR տվյալներ։

Կտրոնի QR կոդ

Պահպանված կտրոնի QR պատկերը կարող եք ստանալ getReceiptQR() մեթոդով, իսկ սկզբնական ֆիսկալ QR տողը՝ getReceiptQRData() մեթոդով։ Երկու մեթոդներն էլ ընդունում են ոչ պարտադիր ներքին receipt_row_id արգումենտը՝ կոնկրետ պահպանված կտրոնն ընտրելու համար։

Օգտագործում

getReceiptQR( $receiptId, $url = false, $receipt_row_id = 0 )
getReceiptQRData( $receiptId, $receipt_row_id = 0 )
ԱրգումենտՏիպՆկարագրություն
receiptIdint|stringՊարտադիր ֆիսկալ կտրոնի համարը, որը Հարկային ծառայությունը վերադարձնում է result.receiptId-ում։ Այս համարը համընդհանուր եզակի չէ և կարող է կրկնվել տարբեր ՀԴՄ-ների կամ test/live ռեժիմների համար։
urlboolՈչ պարտադիր է և օգտագործվում է միայն getReceiptQR()-ում։ true-ի դեպքում վերադարձվում է պատկերի URL-ը, իսկ կանխադրված false-ի դեպքում՝ HTML պատկերի թեգը։
receipt_row_idintՈչ պարտադիր է, կանխադրված արժեքը՝ 0։ eHDM կտրոնների բազայի համապատասխան գրառման ներքին id-ն է։ Դրական ID փոխանցելով՝ ընտրում եք հենց այդ գրառումը։ Այն ֆիսկալ կտրոնի համար, WooCommerce պատվերի ID կամ PSPG պատվերի համար չէ։

Եթե հայտնի է կոնկրետ պահպանված գրառումը, փոխանցեք receipt_row_id-ը։ Այն վերցրեք {WordPress table prefix}ehdm_receipts աղյուսակի համապատասխան գրառման id դաշտից։ Ֆիսկալ receiptId-ը նույնպես պետք է համապատասխանի այդ գրառմանը։ print()-ի պատասխանը չի պարունակում բազայի այս ներքին ID-ն․ դրա փոխարեն մի օգտագործեք result.receiptId-ը։

Օրինակ՝ եթե անհրաժեշտ պահպանված գրառման ներքին id = 1234 է, իսկ ֆիսկալ receiptId = 824՝

$receipt_id     = 824;
$receipt_row_id = 1234; // Կոնկրետ պահպանված կտրոնի ներքին ID-ն է․ միայն օրինակ։

$url     = $eHDM->getReceiptQR( $receipt_id, true, $receipt_row_id );
$html    = $eHDM->getReceiptQR( $receipt_id, false, $receipt_row_id );
$qr_data = $eHDM->getReceiptQRData( $receipt_id, $receipt_row_id );

$qr_data-ն պարունակում է Հարկային ծառայության պահպանված պատասխանի սկզբնական qr տողը, ոչ թե պատկերի URL-ը։ Առանց receipt_row_id-ի կանչերը նույնպես աջակցվում են, եթե ֆիսկալ համարով հնարավոր է միանշանակ որոշել կտրոնը՝

$url = $eHDM->getReceiptQR( 824, true );

Վերադարձնում է QR կոդի նկարի URL։

$html = $eHDM->getReceiptQR( 824 );

Վերադարձնում է պատրաստ HTML <img> թեգ։

$qr_data = $eHDM->getReceiptQRData( 824 );

Վերադարձնում է սկզբնական ֆիսկալ QR տողը, եթե կտրոնը հնարավոր է որոշել միանշանակ։

Օրինակ արդյունք

https://api.qrserver.com/v1/create-qr-code/?data=...&size=300x300
<img class="ehdm-qr" src="https://api.qrserver.com/..." alt="eHDM QR Code">

Ինչպես է աշխատում

  • Դրական ներքին ID փոխանցելու դեպքում բեռնում է կոնկրետ կտրոնը ըստ receiptId-ի և receipt_row_id-ի։ Առանց ներքին ID-ի ֆիսկալ համարն օգտագործվում է միայն այն դեպքում, երբ տարբեր կտրոնների միջև անորոշություն չկա։
  • Վերցնում է qr դաշտը
  • Կոդավորում է տվյալները
  • Ստեղծում է QR նկար արտաքին սերվիսի միջոցով

Նշումներ

  • receiptId-ը պետք է գոյություն ունենա
  • getReceiptQR()-ը վերադարձնում է false, եթե կտրոնը չի գտնվել, ընտրությունը միանշանակ չէ կամ QR տվյալներ չկան։ Այդ դեպքերում getReceiptQRData()-ը վերադարձնում է դատարկ տող։
  • Եթե փոխանցված receipt_row_id-ը չի համապատասխանում receiptId-ին, մեթոդները չեն ընտրում մեկ այլ գրառում։ Հին կտրոնները հնարավոր է ընտրել իրենց կոնկրետ ներքին ID-ով նաև ՀԴՄ-ի կամ test/live կարգավորման փոփոխությունից հետո։
  • QR-ի որոնման ձախողումը չի նշանակում, որ ֆիսկալ տպումը ձախողվել է։ Մի տպեք նոր կտրոն միայն այն պատճառով, որ QR-ի որոնումը արդյունք չի վերադարձրել։
  • QR-ը պարունակում է ամբողջ ֆիսկալ ինֆորմացիան
  • Կարող եք օգտագործել URL կամ պատրաստ HTML տարբերակը

Զեղչի կիրառում

Ապրանքների զեղչերը փոխանցվում են discount/discountType և additionalDiscount/additionalDiscountType դաշտերով։ Գումարային զեղչերը պետք է լինեն սկզբնական currency արժույթով, իսկ տոկոսային արժեքները պետք է մնան տոկոսներով։

  • 1. Ապրանքի զեղչ / discount
    • % PERCENT, տոկոսային զեղչ՝ discountType = 1
    • PRICE, մեկ ապրանքի / միավորի գումարային զեղչ՝ սկզբնական արժույթով, discountType = 2։ Հաշվարկ՝ (initial_price – discount) * quantity
    • TOTAL, ամբողջ քանակի համար գումարային զեղչ՝ սկզբնական արժույթով, discountType = 4։ Հաշվարկ՝ (price * quantity) – discount
  • 2. Ապրանքի լրացուցիչ զեղչ / additionalDiscount
    • additionalDiscountType = 16՝ լրացուցիչ գումարային զեղչ սկզբնական արժույթով, որը հանվում է ապրանքի հիմնական զեղչից հետո հաշվարկված տողի գումարից։
    • additionalDiscountType = 8՝ լրացուցիչ տոկոսային զեղչ, որը կիրառվում է ապրանքի հիմնական զեղչից հետո հաշվարկված տողի գումարի նկատմամբ։

Ինչ է նշանակում պատասխանը

  • code = 0 — հաջողություն
  • message = OK — կտրոնը հաջողությամբ տպվել է
  • errorMessage = null — սխալ չկա
  • result.receiptId — կտրոնի ID
  • result.fiscal — ֆիսկալ համար
  • result.total — ֆիսկալ կտրոնի ընդհանուր գումարը՝ ՀՀ դրամով
  • result.change — մանրը՝ ՀՀ դրամով
  • result.qr — ֆիսկալ QR տող՝ վճարման բաժանմամբ

QR դաշտեր

  • TOTAL_CASH — կանխիկ գումար
  • TOTAL_NONCASH — անկանխիկ գումար
  • PREP_USAGE — օգտագործված կանխավճարի գումար
  • PARTIAL — մասնակի վճարման գումար
  • TOTAL — վերջնական գումար

Նշումներ

  • mode = 2 – Ապրանքներ ռեժիմ / 3 – Կանխավճար
  • orderId-ը բանկային վճարման նույնացուցիչն է անկանխիկ և խառը սցենարներում։ Այն PSPG պատվերի համարը չէ։ PSPG պատվերի համարն անհրաժեշտության դեպքում փոխանցեք pspgOrderNumber-ով։
  • WooCommerce ապրանքները նախ պետք է պատրաստվեն getWoocommersOrderItems()-ով
  • Այնուհետև դրանք պետք է բեռնվեն getWoocommersOrderItemsFromDB()-ով
  • Բոլոր կտրոնները պահվում են eHDM-ում

Պարամետրեր

ՊարամետրՏիպՆկարագրություն
currencystringՊարտադիր սկզբնական արժույթ՝ AMD, USD, EUR կամ RUB։ Թվային կոդերը նույնպես պետք է փոխանցվեն որպես տեքստային տողեր։ Վճարման գումարները, գները և գումարային զեղչերը փոխանցվում են այս արժույթով։
orderIdstringԲանկային վճարման նույնացուցիչը՝ առկայության դեպքում։ Կանխիկ WooCommerce պատվերի դեպքում կարող է դատարկ լինել։
wc_orderIdintWooCommerce պատվերի համարը՝ առկայության դեպքում։
pspgOrderNumberintPSPG պատվերի համարը՝ առկայության դեպքում։ Տարբերվում է բանկային վճարման նույնացուցիչից։
cardAmountdoubleԱնկանխիկ (քարտով) վճարված գումարը՝ սկզբնական արժույթով
cashAmountdoubleԿանխիկ վճարված գումարը՝ սկզբնական արժույթով
partialAmountdoubleՄասնակի վճարման գումարը՝ սկզբնական արժույթով
prePaymentAmountdoubleՕգտագործված կանխավճարի գումարը՝ սկզբնական արժույթով
cashierIdintԳանձապահի համարը
modeintԿտրոնի ռեժիմ՝ 2 – Ապրանքներ / 3 – Կանխավճար
partnerTinstringԳնորդի ՀՎՀՀ
itemsarrayԱպրանքների ցանկը։ Գները և գումարային զեղչերը փոխանցվում են սկզբնական արժույթով։ Պարտադիր է ապրանքային կտրոնների համար։