Example #1
0
 private function parsePayTarget($target, $id)
 {
     $api = new Api();
     $id = (int) $id;
     if ($id <= 0) {
         return null;
     }
     // оплата заказа
     if ($target == 'order') {
         return $id;
     }
     // оплата подписки
     if ($target == 'subscription') {
         $customer_id = Customer::instance()->initByExternalId($api->id())->get()->id;
         $subscription_id = $id;
         Reporter::subscriptionPaymentRequest($customer_id, $subscription_id);
         $subscription = Subscription::whereCustomerId($customer_id)->find($subscription_id);
         if (!$subscription) {
             $list = $api->Certificate();
             // ищем эту подписку в агбисе
             foreach ($list as $item) {
                 if ($item->id == $subscription_id) {
                     Reporter::subscriptionFound($customer_id, $subscription_id, $item);
                     // создаем подписку в нашей базе
                     Subscription::unguard();
                     $subscription = Subscription::create(['id' => $item->id, 'name' => $item->name, 'description' => $item->comments, 'price' => $item->price, 'customer_id' => $customer_id, 'order_id' => 0]);
                     Reporter::subscriptionCreated($customer_id, $subscription_id);
                 }
             }
         }
         if (!$subscription) {
             Reporter::subscriptionNotFound($customer_id, $subscription_id);
             return null;
         }
         // если заказ уже был создан, отдаем его для оплаты
         if ($subscription->order_id > 0) {
             return $subscription->order_id;
         }
         // создадим заказа в агбисе
         $order_id = $api->CreatePayCertificate($subscription->id);
         if ($order_id > 0) {
             Reporter::subscriptionOrderCreated($customer_id, $subscription_id, $order_id);
             // отдадим для оплаты
             $subscription->order_id = $order_id;
             $subscription->save();
             return $subscription->order_id;
         }
     }
     return null;
 }