src/Controller/Api/BitrixController.php line 401

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\Service\BitrixFunctions;
  4. use App\Service\Entity\BitrixService;
  5. use App\Service\Entity\MessageSenderService;
  6. use App\Service\Entity\RequestWorkerService;
  7. use App\Service\System\EncryptionData;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  14. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  15. use App\Entity\Bitrix;
  16. use App\Service\Entity\LogService;
  17. use App\Service\Entity\WhileListService;
  18. /**
  19.  * @Route("/api/bitrix")
  20.  */
  21. class BitrixController extends AbstractController
  22. {
  23.     public $entityManager;
  24.     public $logService;
  25.     public $whileListService;
  26.     public $messageService;
  27.     public $requestWorkerService;
  28.     public $bitrixFunctions;
  29.     public $bitrixService;
  30.     public $encryptionData;
  31.     public function __construct(
  32.         EntityManagerInterface $entityManager,
  33.         LogService             $logService,
  34.         WhileListService       $whileListService,
  35.         MessageSenderService   $messageService,
  36.         RequestWorkerService   $requestWorkerService,
  37.         BitrixFunctions        $bitrixFunctions,
  38.         BitrixService          $bitrixService,
  39.         EncryptionData         $encryptionData
  40.     )
  41.     {
  42.         $this->entityManager $entityManager;
  43.         $this->logService $logService;
  44.         $this->whileListService $whileListService;
  45.         $this->messageService $messageService;
  46.         $this->requestWorkerService $requestWorkerService;
  47.         $this->bitrixFunctions $bitrixFunctions;
  48.         $this->bitrixService $bitrixService;
  49.         $this->encryptionData $encryptionData;
  50.     }
  51.     /**
  52.      * @Route(
  53.      *     "/crm/lead-deal/check"
  54.      * )
  55.      * @return Response
  56.      */
  57.     public function crmLeadDealCheck(Request $request): Response
  58.     {
  59.         if(!$this->whileListService->checkAccessApi())
  60.             return new Response(json_encode([
  61.                 'status' => false,
  62.                 'result' => null,
  63.                 'error' => 'no valid ip'
  64.             ]));
  65.         $em $this->entityManager;
  66.         $lead_id $request->request->get('lead_id');
  67.         $deal_id $request->request->get('deal_id');
  68.         $api_token $request->request->get('token');
  69.         $crm_id $request->request->get('crm_id');
  70.         $admin_id $request->request->get('admin_id');
  71.         $merchant_account_identifier $request->request->get('merchant_account_identifier');
  72.         $merchant_account_email_hash $request->request->get('merchant_account_email_hash');
  73.         $data = [
  74.             'lead_id' => $lead_id,
  75.             'deal_id' => $deal_id,
  76.             'api_token' => $api_token,
  77.             'crm_id' => $crm_id,
  78.             'admin_id' => $admin_id,
  79.             'merchant_account_identifier' => $merchant_account_identifier,
  80.             'merchant_account_email_hash' => $merchant_account_email_hash,
  81.         ];
  82.         $this->logService->setSystemLog('/crm/lead-deal/check',json_encode($data));
  83.         if(
  84.             (!$lead_id and !$deal_id) or
  85.             !$api_token or
  86.             !$crm_id or
  87.             !$admin_id or
  88.             !$merchant_account_identifier or
  89.             !$merchant_account_email_hash
  90.         ){
  91.             return new Response(json_encode([
  92.                 'status' => false,
  93.                 'result' => null,
  94.                 'error' => 'invalid data'
  95.             ]));
  96.         }
  97.         if($api_token !== 'ZsB782nU6Rp4X77v3ZAkZspGmga9M6')
  98.             return new Response(json_encode([
  99.                 'status' => false,
  100.                 'result' => null,
  101.                 'error' => 'invalid token'
  102.             ]));
  103.         $bitrix $em->getRepository(Bitrix::class)->findOneBy([
  104.             'number_for_api'=>$crm_id
  105.         ]);
  106.         if(!$bitrix)
  107.             return new Response(json_encode([
  108.                 'status' => false,
  109.                 'result' => null,
  110.                 'error' => 'crm id no valid'
  111.             ]));
  112.         $merchant_account_email_hash trim($merchant_account_email_hash);
  113.         $params_message = [
  114.             'admin_id' => $admin_id,
  115.             'merchant_account_identifier' => $merchant_account_identifier
  116.         ];
  117.         $result $this->bitrixService->checkLeadDealEmail($bitrix,$merchant_account_email_hash,$lead_id,$deal_id,$params_message);
  118.         return new Response(json_encode($result));
  119.     }
  120.     /**
  121.      * @Route(
  122.      *     "/crm/lead/info"
  123.      * )
  124.      * @return Response
  125.      */
  126.     public function crmLeadInfo(Request $request): Response
  127.     {
  128.         if(!$this->whileListService->checkAccessApi())
  129.             return new Response(json_encode([
  130.                 'status' => false,
  131.                 'message' => 'no valid ip'
  132.             ]));
  133.         $em $this->entityManager;
  134.         $api_token $request->request->get('token');
  135.         $bitrix_id $request->request->get('bitrix_id');
  136.         $crm_lead_id $request->request->get('crm_lead_id');
  137.         $data = [
  138.             'api_token' => $api_token,
  139.             'bitrix_id' => $bitrix_id,
  140.             'crm_lead_id' => $crm_lead_id,
  141.         ];
  142.         $this->logService->setSystemLog('/crm/lead/info',json_encode($data));
  143.         if(
  144.             !$api_token or
  145.             !$bitrix_id or
  146.             !$crm_lead_id
  147.         ){
  148.             return new Response(json_encode([
  149.                 'status' => false,
  150.                 'message' => 'invalid data'
  151.             ]));
  152.         }
  153.         if($api_token !== 'ZsB782nU6Rp4X77v3ZAkZspGmga9M6')
  154.             return new Response(json_encode([
  155.                 'status' => false,
  156.                 'message' => 'invalid token'
  157.             ]));
  158.         $bitrix $em->getRepository(Bitrix::class)->findOneBy([
  159.             'number_for_api'=>$bitrix_id
  160.         ]);
  161.         if(!$bitrix)
  162.             return new Response(json_encode([
  163.                 'status' => false,
  164.                 'message' => 'no bitrix in db'
  165.             ]));
  166.         $web_hook_url $bitrix->getUserInputWebhookUrl();
  167.         $lead_deal_data $this->bitrixFunctions->getDealDataFromLead($web_hook_url,$crm_lead_id);
  168.         $deal_ids = [];
  169.         if($lead_deal_data['status']){
  170.             $deal_ids $lead_deal_data['deal_ids'];
  171.         }
  172.         return new Response(json_encode([
  173.             'status' => true,
  174.             'message' => $deal_ids
  175.         ]));
  176.     }
  177.     /**
  178.      * @Route(
  179.      *     "/crm/item"
  180.      * )
  181.      * @return Response
  182.      */
  183.     public function item(Request $request): Response
  184.     {
  185.         $em $this->entityManager;
  186.         $request_log json_decode(file_get_contents('php://input'), true);
  187.         $this->logService->setSystemLog('/crm/item',json_encode($request_log));
  188.         if(!$this->whileListService->checkAccessApi())
  189.             return new Response(json_encode([
  190.                 'status' => false,
  191.                 'message' => 'no valid ip'
  192.             ]));
  193.         $token $request->request->get('token');
  194.         $type $request->request->get('type');
  195.         $bitrix_id $request->request->get('bitrixId');
  196.         if($token !== 'ZsB782nU6Rp4X77v3ZAkZspGmga9M6')
  197.             return new Response(json_encode([
  198.                 'status' => false,
  199.                 'message' => 'invalid token'
  200.             ]));
  201.         if(!$type or !$bitrix_id){
  202.             return new Response(json_encode([
  203.                 'status' => false,
  204.                 'message' => 'invalid data, type or bitrix_id is empty'
  205.             ]));
  206.         }
  207.         if(!in_array($type,['Zelle','PayPal']))
  208.             return new Response(json_encode([
  209.                 'status' => false,
  210.                 'message' => "type in zelle,paypal,wire"
  211.             ]));
  212.         $bitrix $em->getRepository(Bitrix::class)->findOneBy([
  213.             'number_for_api'=>$bitrix_id
  214.         ]);
  215.         if(!$bitrix)
  216.             return new Response(json_encode([
  217.                 'status' => false,
  218.                 'message' => 'no bitrix in db'
  219.             ]));
  220.         $email $request->request->get('email');
  221.         $value $request->request->get('value');
  222.         $currency $request->request->get('currency');
  223.         if($bitrix_id == 1) {
  224.             if($type == 'Zelle')
  225.                 $categoryId '13';
  226.             if($type == 'PayPal')
  227.                 $categoryId '4';
  228.             $params = [
  229.                 'entityTypeId' => "143",
  230.                 'fields' => [
  231.                     'ufCrm4_1661202133' => $email,
  232.                     'opportunity' => $value,
  233.                     'currencyId' => $currency,
  234.                     'categoryId' => $categoryId,
  235.                 ]
  236.             ];
  237.         }
  238.         if($bitrix_id == 2) {
  239.             if ($type == 'Zelle')
  240.                 $categoryId '14';
  241.             if($type == 'PayPal')
  242.                 $categoryId '5';
  243.             $params = [
  244.                 'entityTypeId' => "143",
  245.                 'fields' => [
  246.                     'ufCrm4_1661202133' => $email,
  247.                     'opportunity' => $value,
  248.                     'currencyId' => $currency,
  249.                     'categoryId' => $categoryId,
  250.                 ]
  251.             ];
  252.         }
  253.         if(!isset($params))
  254.             return new Response(json_encode([
  255.                 'status' => false,
  256.                 'message' => 'no params'
  257.             ]));
  258.         $this->requestWorkerService->create($bitrix,'crm.item.add',$params);
  259.         return new Response(json_encode([
  260.             'status' => true
  261.         ]));
  262.     }
  263.     /**
  264.      * @Route(
  265.      *     "/crm/send/message"
  266.      * )
  267.      * @return Response
  268.      */
  269.     public function sendMessage(Request $request): Response
  270.     {
  271.         if(!$this->whileListService->checkAccessApi())
  272.             return new Response(json_encode([
  273.                 'status' => false,
  274.                 'message' => 'no valid ip'
  275.             ]));
  276.         $em $this->entityManager;
  277.         $api_token $request->request->get('token');
  278.         $message $request->request->get('message');
  279.         $entity_type $request->request->get('entity_type');
  280.         $entity_id $request->request->get('entity_id');
  281.         $bitrix_id $request->request->get('bitrixId');
  282.         $data = [
  283.             'api_token' => $api_token,
  284.             'message' => $message,
  285.             'entity_type' => $entity_type,
  286.             'entity_id' => $entity_id,
  287.             'bitrix_id' => $bitrix_id,
  288.         ];
  289.         $this->logService->setSystemLog('/crm/send/message',json_encode($data));
  290.         if(
  291.             !$api_token or
  292.             !$message or
  293.             !$entity_type or
  294.             !$entity_id or
  295.             !$bitrix_id
  296.         ){
  297.             return new Response(json_encode([
  298.                 'status' => false,
  299.                 'message' => 'invalid data'
  300.             ]));
  301.         }
  302.         if($api_token !== 'ZsB782nU6Rp4X77v3ZAkZspGmga9M6')
  303.             return new Response(json_encode([
  304.                 'status' => false,
  305.                 'message' => 'invalid token'
  306.             ]));
  307.         if(!in_array($entity_type,[1,2,3]))
  308.             return new Response(json_encode([
  309.                 'status' => false,
  310.                 'message' => "where in 1,2,3"
  311.             ]));
  312.         $bitrix $em->getRepository(Bitrix::class)->findOneBy([
  313.             'number_for_api'=>$bitrix_id
  314.         ]);
  315.         if(!$bitrix)
  316.             return new Response(json_encode([
  317.                 'status' => false,
  318.                 'message' => 'no bitrix in db'
  319.             ]));
  320.         // користувачу та його керівнику
  321.         if(== $entity_type){
  322.             $this->requestWorkerService->create(
  323.                 $bitrix,
  324.                 'sendMessageInBitrixUserAndHead',
  325.                 [
  326.                     'user_id' => $entity_id,
  327.                     'message' => $message
  328.                 ]
  329.             );
  330.         }
  331.         // в лід
  332.         if(== $entity_type){
  333.             // $this->bitrixFunctions->addTimeline(true,$bitrix,$entity_id,'lead',$message);
  334.             $this->bitrixFunctions->addTimelineLogMessage(true,$bitrix,$entity_id,'lead',$message);
  335.         }
  336.         // в справу
  337.         if(== $entity_type){
  338.             // $this->bitrixFunctions->addTimeline(true,$bitrix,$entity_id,'deal',$message);
  339.             $this->bitrixFunctions->addTimelineLogMessage(true,$bitrix,$entity_id,'deal',$message);
  340.         }
  341.         return new Response(json_encode([
  342.             'status' => true
  343.         ]));
  344.     }
  345.     /**
  346.      *
  347.      * @Route(
  348.      *     "/crm/send/message/notification"
  349.      * )
  350.      * @return Response
  351.      */
  352.     public function sendMessagedNotification(Request $request): Response
  353.     {
  354.         if(!$this->whileListService->checkAccessApi())
  355.             return new Response(json_encode([
  356.                 'status' => false,
  357.                 'message' => 'no valid ip'
  358.             ]));
  359.         $em $this->entityManager;
  360.         $api_token $request->request->get('token');
  361.         $text $request->request->get('text');
  362.         $bitrix_id $request->request->get('bitrixId');
  363.         $leadId $request->request->get('leadId');
  364.         $depositor $request->request->get('depositor');
  365.         // щоб взяти справу прямо з crm
  366.         $ignore_lead_connection_deal $request->request->get('ignoreLeadConnectionDeal');
  367.         $crm_deal_id $request->request->get('crmDealId');
  368.         // лід полюбому приходить ліду але не приходить юзерам відповідальним
  369.         $always_send_notification_to_lead $request->request->get('alwaysSendNotificationToLead');
  370.         $log_data = [
  371.             'api_token' => $api_token,
  372.             'text' => $text,
  373.             'bitrix_id' => $bitrix_id,
  374.             'crm_deal_id' => $crm_deal_id,
  375.             'leadId' => $leadId,
  376.             'depositor' => $depositor,
  377.             'ignore_lead_connection_deal' => $ignore_lead_connection_deal,
  378.             'always_send_notification_to_lead' => $always_send_notification_to_lead,
  379.         ];
  380.         $this->logService->setSystemLog('/crm/send/message/notification',json_encode($log_data));
  381.         if($api_token !== 'ZsB782nU6Rp4X77v3ZAkZspGmga9M6')
  382.             return new Response(json_encode([
  383.                 'status' => false,
  384.                 'message' => 'invalid token'
  385.             ]));
  386.         if(!$bitrix_id){
  387.             return new Response(json_encode([
  388.                 'status' => false,
  389.                 'message' => 'not filled crm id'
  390.             ]));
  391.         }
  392.         if(
  393.             gettype($depositor) !== 'boolean' or
  394.             !$text
  395.         ){
  396.             return new Response(json_encode([
  397.                 'status' => false,
  398.                 'message' => 'invalid data'
  399.             ]));
  400.         }
  401.         if(!$ignore_lead_connection_deal)
  402.             $ignore_lead_connection_deal false;
  403.         if(!$always_send_notification_to_lead)
  404.             $always_send_notification_to_lead false;
  405.         $bitrix $em->getRepository(Bitrix::class)->findOneBy(['number_for_api'=>$bitrix_id]);
  406.         if(!$bitrix)
  407.             return new Response(json_encode([
  408.                 'status' => false,
  409.                 'message' => 'crm id: no valid'
  410.             ]));
  411.         $web_hook_url $bitrix->getUserInputWebhookUrl();
  412.         // беремо справу з ліда
  413.         $user_input_webhook_url $bitrix->getUserInputWebhookUrl();
  414.         $lead_deal_data $this->bitrixFunctions->getDealDataFromLead($user_input_webhook_url,$leadId);
  415.         // end
  416.         if($depositor){
  417.             if($ignore_lead_connection_deal){
  418.                 if(!$crm_deal_id)
  419.                     return new Response(json_encode([
  420.                         'status' => false,
  421.                         'message' => 'no crm deal id',
  422.                         'lead_deal_data' => $lead_deal_data,
  423.                     ]));
  424.                 $filter = [
  425.                     'ID' => $crm_deal_id,
  426.                 ];
  427.             }
  428.             else {
  429.                 if(!$leadId){
  430.                     return new Response(json_encode([
  431.                         'status' => false,
  432.                         'message' => 'not filled crm lead id',
  433.                         'lead_deal_data' => $lead_deal_data,
  434.                     ]));
  435.                 }
  436.                 $filter = [
  437.                     'LEAD_ID' => $leadId,
  438.                 ];
  439.             }
  440.             $select = ['ID''LEAD_ID','ASSIGNED_BY_ID'];
  441.             $result_deals $this->bitrixFunctions->getDealList($web_hook_url,$filter,$select);
  442.             if(!$result_deals['status']) {
  443.                 return new Response(json_encode([
  444.                     'status' => false,
  445.                     'message' => "bitrix get deal error",
  446.                     'lead_deal_data' => $lead_deal_data,
  447.                 ]));
  448.             }
  449.             $result_deals $result_deals['result'];
  450.             foreach ($result_deals as $deal) {
  451.                 $deal_id $deal['ID'];
  452.                 $this->requestWorkerService->create(
  453.                     $bitrix,
  454.                     'sendMessageInBitrixUserAndHead',
  455.                     [
  456.                         'user_id' => $deal['ASSIGNED_BY_ID'],
  457.                         'message' => $text
  458.                     ]
  459.                 );
  460.                 // $this->bitrixFunctions->addTimeline(true,$bitrix,$deal_id,'deal',$text);
  461.                 $this->bitrixFunctions->addTimelineLogMessage(true,$bitrix,$deal_id,'deal',$text);
  462.             }
  463.         }
  464.         //  депозит false   або обовязково відправити в лід true
  465.         if(!$depositor or $always_send_notification_to_lead){
  466.             if(!$leadId){
  467.                 return new Response(json_encode([
  468.                     'status' => false,
  469.                     'message' => 'not filled crm lead id',
  470.                     'lead_deal_data' => $lead_deal_data,
  471.                 ]));
  472.             }
  473.             $result_lead $this->bitrixFunctions->getLead($web_hook_url,$leadId);
  474.             if(!$result_lead['status']) {
  475.                 return new Response(json_encode([
  476.                     'status' => false,
  477.                     'message' => "bitrix get lead error",
  478.                     'lead_deal_data' => $lead_deal_data,
  479.                 ]));
  480.             }
  481.             $lead $result_lead['result'];
  482.             // працьовує тільки при депозит false
  483.             if(!$depositor) {
  484.                 $this->requestWorkerService->create(
  485.                     $bitrix,
  486.                     'sendMessageInBitrixUserAndHead',
  487.                     [
  488.                         'user_id' => $lead['ASSIGNED_BY_ID'],
  489.                         'message' => $text
  490.                     ]
  491.                 );
  492.             }
  493.             // $this->bitrixFunctions->addTimeline(true,$bitrix,$leadId,'lead',$text);
  494.             $this->bitrixFunctions->addTimelineLogMessage(true,$bitrix,$leadId,'lead',$text);
  495.         }
  496.         return new Response(json_encode([
  497.             'status' => true,
  498.             'lead_deal_data' => $lead_deal_data,
  499.         ]));
  500.     }
  501. }