Пример #1
0
 public function actionCancelInvoice()
 {
     if (Yii::$app->user->isGuest) {
         $this->redirect(Url::toRoute(['intro/index']));
         return;
     }
     if (Yii::$app->user->identity->role == User::ROLE_DEMO) {
         $this->redirect(Url::toRoute(['user/signup-demo']));
         return;
     }
     $id = Yii::$app->request->get('id');
     if (!$id) {
         Yii::$app->getSession()->setFlash('error', Yii::t('app', 'Не верный id'));
         $this->redirect(Url::toRoute(['photobooks/index']));
         return;
     }
     $invoice = new InvoiceForm();
     if (!$invoice->loadById($id)) {
         Yii::$app->getSession()->setFlash('error', Yii::t('app', 'Счет не найден'));
         $this->redirect(Url::toRoute(['photobooks/index']));
         return;
     }
     if ($invoice->status == Invoice::STATUS_PAID || $invoice->status == Invoice::STATUS_TIMEOUT || $invoice->status == Invoice::STATUS_CANCEL) {
         if ($invoice->status == Invoice::STATUS_PAID) {
             Yii::$app->getSession()->setFlash('error', Yii::t('app', 'Счет уже оплачен. Вы не можите его отменить.'));
         } else {
             if ($invoice->status == Invoice::STATUS_CANCEL) {
                 Yii::$app->getSession()->setFlash('error', Yii::t('app', 'Счет уже отменен.'));
             } else {
                 if ($invoice->status == Invoice::STATUS_TIMEOUT) {
                     Yii::$app->getSession()->setFlash('error', Yii::t('app', 'Счет уже отменен.'));
                 }
             }
         }
         $this->redirect(Url::toRoute(['photobooks/index']));
     }
     $invoice->status = Invoice::STATUS_CANCEL;
     if (!$invoice->save()) {
         Yii::$app->getSession()->setFlash('error', Yii::t('app', 'Не удалось отменить счет'));
         $this->redirect(Url::toRoute(['photobooks/index']));
         return;
     }
     // Отвязываем фотокниги от id счета и вернуть им статус new
     $photobooks = Photobook::find()->where(['invoice_id' => $invoice->id])->all();
     if ($photobooks) {
         foreach ($photobooks as $key => $photobook) {
             $photobook->invoice_id = null;
             $photobook->status = Photobook::STATUS_NEW;
             $photobook->update();
         }
     }
     $this->redirect(Url::toRoute(['photobooks/invoice', 'id' => $invoice->id]));
 }
Пример #2
0
 public function actionServerNotify()
 {
     \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
     $invoice_id = Yii::$app->request->get('id');
     if (!$invoice_id) {
         Yii::getLogger()->log('actionServerNotify return:' . Yii::t('app', 'Не верный id'), YII_DEBUG);
         return ['error' => ['msg' => Yii::t('app', 'Не верный id')]];
     }
     $invoice = new InvoiceForm();
     if (!$invoice->loadById($invoice_id)) {
         Yii::getLogger()->log('actionServerNotify return:' . Yii::t('app', 'Счет не найден'), YII_DEBUG);
         return ['error' => ['msg' => Yii::t('app', 'Счет не найден')]];
     }
     $data = Yii::$app->request->post('data', null);
     $signature = Yii::$app->request->post('signature', null);
     if (empty($data) || empty($signature)) {
         Yii::getLogger()->log('actionServerNotify return:' . Yii::t('app', 'Не полные данные'), YII_DEBUG);
         return ['error' => ['msg' => Yii::t('app', 'Не полные данные')]];
     }
     $settings = new SettingForm();
     // $public_key=$settings->getValue('liqpay_public_key', null);
     $private_key = $settings->getValue('liqpay_private_key', null);
     if (empty($private_key)) {
         Yii::getLogger()->log('actionServerNotify return:' . Yii::t('app', 'Liqpay не настроен.'), YII_DEBUG);
         return ['error' => ['msg' => Yii::t('app', 'Liqpay не настроен.')]];
     }
     $sign = base64_encode(sha1($private_key . $data . $private_key, 1));
     Yii::getLogger()->log('actionServerNotify sign:' . $sign, YII_DEBUG);
     Yii::getLogger()->log('actionServerNotify signature:' . $signature, YII_DEBUG);
     if ($sign != $signature) {
         Yii::getLogger()->log('actionServerNotify return:' . Yii::t('app', 'Подпись не верна'), YII_DEBUG);
         return ['error' => ['msg' => Yii::t('app', 'Подпись не верна')]];
     }
     //Получаем статус платежа
     $data = json_decode(base64_decode($data), true);
     $liqpay_status = $data['status'];
     Yii::getLogger()->log('actionServerNotify data:' . print_r($data, true), YII_DEBUG);
     Yii::getLogger()->log('actionServerNotify liqpay_status:' . $liqpay_status, YII_DEBUG);
     if ($liqpay_status == 'sandbox' || $liqpay_status == 'success') {
         $invoice->status = Invoice::STATUS_PAID;
         if ($invoice->save()) {
             $photobooks = Photobook::find()->where(['invoice_id' => $invoice->id])->all();
             $error = false;
             if ($photobooks) {
                 foreach ($photobooks as $key => $photobook) {
                     $photobook->status = Photobook::STATUS_READY_FOR_PRINT_PAID;
                     $photobook->change_status_at = time();
                     if (!$photobook->update()) {
                         $error = true;
                     }
                 }
             }
             if (!$error) {
                 return ['response' => ['status' => true]];
             }
         } else {
             return ['error' => ['msg' => Yii::t('app', 'Не удалось обновить статус счета')]];
         }
     } else {
         return ['response' => ['status' => true]];
     }
 }