Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Prodvigaeff\Atol;
- class Atol4_1 extends Driver
- {
- public $arSettings = array();
- public $host = "https://online.atol.ru/possystem/v4/";
- public function __construct()
- {
- $this->getSettings();
- $this->auth();
- }
- public function get($url) {
- $c = file_get_contents($url);
- $arJson = json_decode($c, true);
- return $arJson;
- }
- public function post($url, $arData) {
- $ch = curl_init($url);
- curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-type: application/json; charset=utf-8"));
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($arData) );
- $response = curl_exec($ch);
- curl_close($ch);
- $arJson = json_decode($response, true);
- return $arJson;
- }
- public function getSettings()
- {
- $fn = $_SERVER["DOCUMENT_ROOT"].ATOL_XML;
- $xml = simplexml_load_file( $fn );
- $json = json_encode($xml);
- $array = json_decode($json,TRUE);
- $this->arSettings = array(
- "LOGIN" => $array["shop"]["access"]["@attributes"]["login"],
- "PASSWORD" => $array["shop"]["access"]["@attributes"]["password"],
- "GROUP_CODE" => $array["shop"]["access"]["@attributes"]["group_code"],
- "INN" => $array["@attributes"]["INN"],
- "KPP" => $array["@attributes"]["KPP"],
- "hostname" => $array["shop"]["@attributes"]["hostname"],
- );
- }
- public function auth()
- {
- $url = $this->host."getToken?login=".$this->arSettings["LOGIN"]."&pass=".$this->arSettings["PASSWORD"];
- $arRes = $this->get($url);
- /*
- $url = $this->host."getToken";
- $arData = array(
- "login" => $this->arSettings["LOGIN"],
- "pass" => $this->arSettings["PASSWORD"],
- );
- $arRes = $this->post($url, $arData);
- */
- //var_dump($arRes);
- if ($arRes["token"]) {
- $this->arSettings["TOKEN"] = $arRes["token"];
- }
- }
- public function showSettings()
- {
- echo "<pre>";
- print_r( $this->arSettings );
- echo "</pre>";
- }
- function make10($number) {
- return str_pad($number, 10, '0', STR_PAD_LEFT);
- }
- public function getItemInfo($itemID) {
- $iblockID=false;
- $arItem = false;
- $resID = \CIBlockElement::GetByID($itemID);
- if($ar_res = $resID->GetNext()) {
- $iblockID=$ar_res["IBLOCK_ID"];
- }
- if ($iblockID==\CHelpers::getIBlockID('unconfirmed_payments')) {
- $arFilter = Array(
- "ID"=>IntVal($itemID),
- "IBLOCK_ID"=>$iblockID,
- "ACTIVE"=>"",
- );
- $arSelect = array(
- "ID",
- "DATE_ACTIVE_FROM",
- "PROPERTY_ls",
- "PROPERTY_uuid",
- "PROPERTY_NOTIFICATION",
- "PROPERTY_EMAIL",
- "PROPERTY_PHONE",
- "PROPERTY_pay_value",
- "property_source",
- "property_SIMPLE_ID",
- );
- $res = \CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
- if ($ar_fields = $res->GetNext()) {
- $arItem=array(
- "LS" => $ar_fields["PROPERTY_LS_VALUE"],
- "DATE_ACTIVE_FROM" => $ar_fields["DATE_ACTIVE_FROM"],
- "uuid" => $ar_fields["PROPERTY_UUID_VALUE"],
- "NOTIFICATION" => $ar_fields["PROPERTY_NOTIFICATION_VALUE"],
- "EMAIL" => $ar_fields["PROPERTY_EMAIL_VALUE"],
- "PHONE" => $ar_fields["PROPERTY_PHONE_VALUE"],
- "PAY_VALUE" => floatval($ar_fields["PROPERTY_PAY_VALUE_VALUE"]),
- "SOURCE" => $ar_fields["PROPERTY_SOURCE_VALUE"],
- "SIMPLE_ID"=> $ar_fields["PROPERTY_SIMPLE_ID_VALUE"],
- );
- }
- }
- if ($iblockID==\CHelpers::getIBlockID('unconfirmed_payments_ul')) {
- $arFilter = Array(
- "ID"=>IntVal($itemID),
- "IBLOCK_ID"=>$iblockID,
- "ACTIVE"=>"",
- );
- $arSelect = array(
- "ID",
- "DATE_ACTIVE_FROM",
- "PROPERTY_contract_id",
- "PROPERTY_amount",
- "PROPERTY_uuid",
- "PROPERTY_NOTIFICATION",
- "PROPERTY_EMAIL",
- "PROPERTY_PHONE",
- );
- $res = \CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
- if ($ar_fields = $res->GetNext()) {
- $arItem=array(
- "LS" => $ar_fields["PROPERTY_CONTRACT_ID_VALUE"],
- "DATE_ACTIVE_FROM" => $ar_fields["DATE_ACTIVE_FROM"],
- "uuid" => $ar_fields["PROPERTY_UUID_VALUE"],
- "NOTIFICATION" => $ar_fields["PROPERTY_NOTIFICATION_VALUE"],
- "EMAIL" => $ar_fields["PROPERTY_EMAIL_VALUE"],
- "PHONE" => $ar_fields["PROPERTY_PHONE_VALUE"],
- "PAY_VALUE" => floatval($ar_fields["PROPERTY_AMOUNT_VALUE"]),
- "SOURCE" => "lk",
- "SIMPLE_ID"=> false,
- );
- }
- }
- return $arItem;
- }
- public function getInfo($uuid) {
- $url = $this->host.$this->arSettings["GROUP_CODE"]."/report/".$uuid."/?token=".$this->arSettings["TOKEN"];
- $arRes = $this->get($url);
- //var_dump($url);
- $arRes["payload"]["fiscal_document_attribute"] = self::make10( $arRes["payload"]["fiscal_document_attribute"] );
- return $arRes;
- //pre($arRes);
- }
- // https://online.atol.ru/files/API_FFD_1-0-5.pdf
- public function sendCheck($itemID)
- {
- $arData = array();
- $arItem = self::getItemInfo($itemID);
- if (!$arItem["LS"]) {
- return false;
- }
- $UF_CHECK_DELIVERY = "email";
- $arUser=array(
- "EMAIL" => "simplepay@bashesk.ru",
- "PERSONAL_PHONE" => "",
- );
- if ($arItem["SOURCE"]=="simple") {
- if ($arItem["SIMPLE_ID"]) {
- $rsElement = \CIBlockElement::GetList(
- false,
- array('IBLOCK_ID' => \CHelpers::getIBlockID('simple_payments'), 'ID' => $arItem["SIMPLE_ID"]),
- false,
- false,
- array("ID", "NAME", "PROPERTY_NOTIFICATION", "PROPERTY_EMAIL", "PROPERTY_PHONE")
- );
- if ($arElement = $rsElement->getNext()) {
- if ($arElement["PROPERTY_NOTIFICATION_VALUE"]) {
- $UF_CHECK_DELIVERY = $arElement["PROPERTY_NOTIFICATION_VALUE"];
- }
- if ($arElement["PROPERTY_EMAIL_VALUE"]) {
- $arUser["EMAIL"] = $arElement["PROPERTY_EMAIL_VALUE"];
- }
- if ($arElement["PROPERTY_PHONE_VALUE"]) {
- $arUser["PERSONAL_PHONE"] = $arElement["PROPERTY_PHONE_VALUE"];
- }
- }
- }
- } else {
- $res = \Bitrix\Main\UserTable::getList(
- Array(
- "select"=>Array("ID","NAME", "UF_CHECK_DELIVERY", "EMAIL", "PERSONAL_PHONE"),
- "filter"=>Array("UF_CONTRACTS_LIST"=>$arItem["LS"]),
- )
- );
- if ($arRes = $res->fetch()) {
- //pre($arRes);
- if ($arRes["EMAIL"]) {
- $arUser["EMAIL"] = $arRes["EMAIL"];
- }
- if ($arRes["PERSONAL_PHONE"]) {
- $arUser["PERSONAL_PHONE"] = $arRes["PERSONAL_PHONE"];
- }
- if ($arRes["UF_CHECK_DELIVERY"]) {
- $UF_CHECK_DELIVERY = $arRes["UF_CHECK_DELIVERY"];
- }
- }
- //$rsUser = \CUser::GetByLogin($arItem["LS"]);
- //$arUser = $rsUser->Fetch();
- }
- if ($arUser["UF_CHECK_DELIVERY"]=="phone" && $arUser["PERSONAL_PHONE"]) {
- $UF_CHECK_DELIVERY = "phone";
- }
- //pre( $arItem ); pre( $arUser ); pre($UF_CHECK_DELIVERY);
- $arData["external_id"] = "ID-".$itemID; //уникальный среди всех документов
- $arData["receipt"]["client"] = array(
- "email" => $arUser["EMAIL"],
- "phone" => $arUser["PERSONAL_PHONE"],
- );
- $arData["receipt"]["company"] = array(
- "email" => 'simplepay@bashesk.ru',
- "inn" => '0275038496',
- "payment_address" => 'https://bashesk.ru/', //Место расчетов.
- );
- $arData["receipt"]["items"][] = array(
- "name" => "За электроэнергию по договору №".$arItem["LS"],
- "price" => $arItem["PAY_VALUE"],
- "quantity" => 1,
- "sum" => $arItem["PAY_VALUE"],
- //"vat" => array( "type" => "vat118" ), //НДС чека по расчетной ставке 18/118
- "vat" => array( "type" => "vat120" ), //НДС чека по расчетной ставке 20/120
- //"tax_sum" => 0,
- );
- $arData["receipt"]["payments"][]= array(
- "sum" => $arItem["PAY_VALUE"],
- "type" => 1, //«1» – электронный;
- );
- $arData["receipt"]["total"] = $arItem["PAY_VALUE"];
- $arData["service"]= array(
- "callback_url" => "https://bashesk.ru/user/pay/sms.php",
- "inn" => $this->arSettings["INN"],
- "payment_address" => $this->arSettings["hostname"],
- );
- //$arData["timestamp"] = date("d.m.Y H:i:s");
- $arData["timestamp"] = $arItem["DATE_ACTIVE_FROM"];
- //pre( $arData );// exit;
- \CHelpers::writeLog( "arData" );
- \CHelpers::writeLog( $arData );
- $url = $this->host.$this->arSettings["GROUP_CODE"]."/sell?token=".$this->arSettings["TOKEN"];
- $arRes = $this->post($url, $arData);
- //pre($arRes);
- \CHelpers::writeLog( "arRes" );
- \CHelpers::writeLog( $arRes );
- $uuid = $arRes["uuid"];
- \CIBlockElement::SetPropertyValuesEx($itemID, false, array("uuid" => $uuid));
- \CIBlockElement::SetPropertyValuesEx($itemID, false, array("NOTIFICATION" => $UF_CHECK_DELIVERY));
- \CIBlockElement::SetPropertyValuesEx($itemID, false, array("EMAIL" => $arUser["EMAIL"] ));
- \CIBlockElement::SetPropertyValuesEx($itemID, false, array("PHONE" => $arUser["PERSONAL_PHONE"] ));
- /*
- if ($UF_CHECK_DELIVERY=="phone") {
- sleep(5);
- $arInfo = $this->getInfo($uuid);
- if ($arInfo["status"]=="done") {
- //$message = "ESKB. Успешная оплата ".$arItem["PAY_VALUE"]."руб. по договору ".$arItem["LS"];
- //$arData["timestamp"] = '';
- $message = 'В ООО "ЭСКБ" '.$arData["timestamp"].' '.
- 'поступила оплата за электроэнергию на '.$arItem["PAY_VALUE"].' руб. '.
- 'Проверить можно ОФД https://ofd-ya.ru/check '.
- 'ФН: ' .$arInfo["payload"]["ecr_registration_number"].'; '.
- 'ФД: ' .$arInfo["payload"]["fiscal_document_number"].'; '.
- 'ФПД: '.$arInfo["payload"]["fiscal_document_attribute"].'.';
- //echo $message;
- \CHelpers::writeLog( "message" );
- \CHelpers::writeLog( $message );
- $basheskUser = new \CBasheskUser();
- $basheskUser->sendSMS($arUser["PERSONAL_PHONE"], $message);
- }
- }
- */
- }
- public function setStatus() {
- $arItems = array();
- // FL
- $arFilter = Array(
- "IBLOCK_ID"=>\CHelpers::getIBlockID('unconfirmed_payments'),
- "ACTIVE"=>"",
- ">DATE_ACTIVE_FROM"=>"01.04.2018",
- "!PROPERTY_uuid"=>false,
- "!PROPERTY_CHECK_STATUS"=>'done',
- );
- $arSelect = array("ID");
- $res = \CIBlockElement::GetList(array("ID"=>"asc"), $arFilter, false, array("nTopCount"=>20), $arSelect);
- while($arItem = $res->GetNext()) {
- $arItems[$arItem["ID"]]=array(
- "ID" => $arItem["ID"],
- "USER_TYPE" => "FL",
- );
- }
- //UL
- $arFilter = Array(
- "IBLOCK_ID"=>\CHelpers::getIBlockID('unconfirmed_payments_ul'),
- "ACTIVE"=>"",
- ">DATE_ACTIVE_FROM"=>"01.04.2018",
- "!PROPERTY_uuid"=>false,
- "!PROPERTY_CHECK_STATUS"=>'done',
- );
- $arSelect = array("ID", "PROPERTY_ls", "PROPERTY_uuid");
- $res = \CIBlockElement::GetList(false, $arFilter, false, array("nTopCount"=>20), $arSelect);
- while($arItem = $res->GetNext()) {
- $arItems[$arItem["ID"]]=array(
- "ID" => $arItem["ID"],
- "USER_TYPE" => "FL",
- );
- }
- foreach ($arItems as $itemID=>$arItem) {
- //$arItems
- //$arItems
- $arItem["IBLOCK_INFO"] = $this->getItemInfo($itemID);
- $uuid = $arItem["IBLOCK_INFO"]["uuid"];
- if ($uuid) {
- $arItem["CHECK_INFO"] = $this->getInfo($uuid);
- if (!$arItem["CHECK_INFO"]["status"]) {
- $arItem["CHECK_INFO"]["status"] = 'none';
- }
- \CIBlockElement::SetPropertyValuesEx($arItem["ID"], false, array("CHECK_STATUS" => $arItem["CHECK_INFO"]["status"]));
- if ($arItem["IBLOCK_INFO"]["NOTIFICATION"]=="phone" &&
- $arItem["CHECK_INFO"]["status"]=="done" &&
- $arItem["IBLOCK_INFO"]["PHONE"]!='' ){
- $message = 'В ООО "ЭСКБ" '.$arItem["IBLOCK_INFO"]["DATE_ACTIVE_FROM"].' '.
- 'поступила оплата за электроэнергию на '.$arItem["IBLOCK_INFO"]["PAY_VALUE"].' руб. '.
- 'Проверить можно ОФД https://ofd-ya.ru/check '.
- 'ФН: ' .$arItem["CHECK_INFO"]["payload"]["ecr_registration_number"].'; '.
- 'ФД: ' .$arItem["CHECK_INFO"]["payload"]["fiscal_document_number"].'; '.
- 'ФПД: '.$arItem["CHECK_INFO"]["payload"]["fiscal_document_attribute"].'.';
- $arItem["MESSAGE"] = $message;
- $basheskUser = new \CBasheskUser();
- $basheskUser->sendSMS($arItem["IBLOCK_INFO"]["PHONE"], $message);
- \CHelpers::writeLog( "message" );
- \CHelpers::writeLog( $arItem["IBLOCK_INFO"]["PHONE"] );
- \CHelpers::writeLog( $message );
- }
- }
- $arItems[$itemID] = $arItem;
- }
- //pre($arItems);
- }
- public static function setStatusAgent() {
- //return "\Prodvigaeff\Atol\Atol4_1::setStatusAgent();";
- \CModule::IncludeModule("iblock");
- set_time_limit(0);
- $atol = new \Prodvigaeff\Atol\Atol4_1();
- $atol->setStatus();
- return "\Prodvigaeff\Atol\Atol4_1::setStatusAgent();";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement