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])); }
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]]; } }