diff --git a/app/Config/Constants.php b/app/Config/Constants.php
index 20d1f39..d837890 100644
--- a/app/Config/Constants.php
+++ b/app/Config/Constants.php
@@ -152,6 +152,10 @@ define('URLS', [
'LOGIN' => '/front/user/login',
'SIGNUP' => '/front/user/signup',
'LOGOUT' => '/front/user/logout',
+ 'addCart' => '/ecommerce/addCart',
+ 'cancelCart' => '/ecommerce/cancelCart',
+ 'paymentCard' => '/ecommerce/paymentCard',
+ 'depositPayment' => '/ecommerce/depositPayment',
]);
//SESSION 관련
define('SESSION_NAMES', [
@@ -231,6 +235,7 @@ define('CLASS_ICONS', [
'PRODUCT' => '',
'ORDER' => '',
'PAYMENT' => '',
+ 'ECOMMERCE' => '',
]);
define('AUDIOS', [
'Alram_GetEmail' => '',
diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index 4de56d3..5d3cfd0 100644
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -38,8 +38,12 @@ $routes->get('/', 'Home::index');
$routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) {
});
$routes->group('ecommerce', ['namespace' => 'App\Controllers'], function ($routes) {
- $routes->post('addCart', 'EcommerceController::addCart');
- $routes->get('cancelCart', 'EcommerceController::cancelCart');
+ $routes->post('addCart', 'CartController::insert');
+ $routes->get('cancelCart', 'CartController::delete');
+ $routes->get('paymentCard/(:uuid)', 'EcommerceController::cardPayment_form/$1', ['filter' => 'authFilter:user']);
+ $routes->post('paymentCard/(:uuid)', 'EcommerceController::cardPayment/$1', ['filter' => 'authFilter:user']);
+ $routes->get('depositPayment/(:uuid)', 'EcommerceController::depositPayment_form/$1', ['filter' => 'authFilter:user']);
+ $routes->post('depositPayment/(:uuid)', 'EcommerceController::depositPayment/$1', ['filter' => 'authFilter:user']);
});
// authGuard는 App\Config\Filters.php의 $aliases에 선언한 이름이어야 함
$routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], static function ($routes) {
@@ -167,9 +171,6 @@ $routes->group('front', ['namespace' => 'App\Controllers\Front'], function ($rou
});
$routes->group('payment', ['namespace' => 'App\Controllers\Front', 'filter' => 'authFilter:user'], static function ($routes) {
$routes->get('', 'PaymentController::index');
- $routes->get('card/(:uuid)', 'PaymentController::card_form/$1');
- $routes->post('card/(:uuid)', 'PaymentController::card/$1');
- $routes->get('deposit/(:uuid)', 'PaymentController::deposit_form/$1');
});
});
/*
diff --git a/app/Config/Routes_Shoppinmall.php b/app/Config/Routes_Shoppinmall.php
index 1c89602..6446f9a 100644
--- a/app/Config/Routes_Shoppinmall.php
+++ b/app/Config/Routes_Shoppinmall.php
@@ -40,6 +40,10 @@ $routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes)
$routes->group('ecommerce', ['namespace' => 'App\Controllers'], function ($routes) {
$routes->post('addCart', 'EcommerceController::addCart');
$routes->get('cancelCart', 'EcommerceController::cancelCart');
+ $routes->get('paymentCard/(:uuid)', 'EcommerceController::cardPayment_form/$1', ['filter' => 'authFilter:user']);
+ $routes->post('paymentCard/(:uuid)', 'EcommerceController::cardPayment/$1', ['filter' => 'authFilter:user']);
+ $routes->get('depositPayment/(:uuid)', 'EcommerceController::depositPayment_form/$1', ['filter' => 'authFilter:user']);
+ $routes->post('depositPayment/(:uuid)', 'EcommerceController::depositPayment/$1', ['filter' => 'authFilter:user']);
});
// authGuard는 App\Config\Filters.php의 $aliases에 선언한 이름이어야 함
$routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], static function ($routes) {
@@ -165,6 +169,9 @@ $routes->group('front', ['namespace' => 'App\Controllers\Front'], function ($rou
$routes->get('', 'OrderController::index');
$routes->get('view/(:uuid)', 'OrderController::view/$1');
});
+ $routes->group('payment', ['namespace' => 'App\Controllers\Front', 'filter' => 'authFilter:user'], static function ($routes) {
+ $routes->get('', 'PaymentController::index');
+ });
});
/*
* --------------------------------------------------------------------
diff --git a/app/Controllers/Admin/BoardController.php b/app/Controllers/Admin/BoardController.php
index aa6eaa2..6375764 100644
--- a/app/Controllers/Admin/BoardController.php
+++ b/app/Controllers/Admin/BoardController.php
@@ -2,11 +2,11 @@
namespace App\Controllers\Admin;
+use App\Controllers\Trait\UpDownloadTrait;
use App\Models\BoardModel;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
-use App\Controllers\Trait\UpDownloadTrait;
class BoardController extends AdminController
{
@@ -14,8 +14,9 @@ class BoardController extends AdminController
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
$this->_model = new BoardModel();
+ $this->_viewDatas['className'] = 'Board';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
}
public function getFields(string $action = ""): array
diff --git a/app/Controllers/Admin/CategoryController.php b/app/Controllers/Admin/CategoryController.php
index 0fd36c5..1b359ae 100644
--- a/app/Controllers/Admin/CategoryController.php
+++ b/app/Controllers/Admin/CategoryController.php
@@ -15,8 +15,9 @@ class CategoryController extends AdminController
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
$this->_model = new CategoryModel();
+ $this->_viewDatas['className'] = 'Category';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
}
public function getFields(string $action = ""): array
@@ -72,7 +73,7 @@ class CategoryController extends AdminController
// $categorys = array_reverse($categorys); //중분류의 경우 나중에 넣은것이 먼저되므로 reverse해서 처리
foreach ($categorys as $category) {
$viewDatas = [
- 'className' => $this->_model->getClassName(),
+ 'className' => $this->_viewDatas['className'],
'category' => $category,
'parent_category' => $old_category,
'sibling_categorys' => $categorys
diff --git a/app/Controllers/Admin/OrderController.php b/app/Controllers/Admin/OrderController.php
index 4142fd0..1a8ff39 100644
--- a/app/Controllers/Admin/OrderController.php
+++ b/app/Controllers/Admin/OrderController.php
@@ -12,8 +12,9 @@ class OrderController extends AdminController
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
$this->_model = new OrderModel();
+ $this->_viewDatas['className'] = 'Order';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
}
final public function getFields(string $action = ""): array
diff --git a/app/Controllers/Admin/ProductController.php b/app/Controllers/Admin/ProductController.php
index e9020a0..1af4b93 100644
--- a/app/Controllers/Admin/ProductController.php
+++ b/app/Controllers/Admin/ProductController.php
@@ -14,8 +14,9 @@ class ProductController extends AdminController
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
$this->_model = new ProductModel();
+ $this->_viewDatas['className'] = 'Product';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
}
public function getFields(string $action = ""): array
@@ -64,9 +65,9 @@ class ProductController extends AdminController
if ($this->_viewDatas['fieldDatas']['cost'] < $this->_viewDatas['fieldDatas']['sale']) {
throw new \Exception(sprintf(
"%s가[%s] %s[%s]보다 작습니다.",
- lang($this->_model->getClassName() . '.label.cost'),
+ lang($this->_viewDatas['className'] . '.label.cost'),
number_format($this->_viewDatas['fieldDatas']['cost']),
- lang($this->_model->getClassName() . '.label.sale'),
+ lang($this->_viewDatas['className'] . '.label.sale'),
number_format($this->_viewDatas['fieldDatas']['sale']),
));
}
diff --git a/app/Controllers/Admin/SitepageController.php b/app/Controllers/Admin/SitepageController.php
index af1d591..f3a9875 100644
--- a/app/Controllers/Admin/SitepageController.php
+++ b/app/Controllers/Admin/SitepageController.php
@@ -12,8 +12,9 @@ class SitepageController extends AdminController
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
$this->_model = new SitepageModel();
+ $this->_viewDatas['className'] = 'Sitepage';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
}
public function getFields(string $action = ""): array
diff --git a/app/Controllers/Admin/UserController.php b/app/Controllers/Admin/UserController.php
index ea4f01d..dd08961 100644
--- a/app/Controllers/Admin/UserController.php
+++ b/app/Controllers/Admin/UserController.php
@@ -12,8 +12,9 @@ class UserController extends AdminController
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
$this->_model = new UserModel();
+ $this->_viewDatas['className'] = 'User';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
}
public function getFields(string $action = ""): array
{
diff --git a/app/Controllers/Admin/UserSNSController.php b/app/Controllers/Admin/UserSNSController.php
index 9753f41..f17f90e 100644
--- a/app/Controllers/Admin/UserSNSController.php
+++ b/app/Controllers/Admin/UserSNSController.php
@@ -12,8 +12,9 @@ class UserSNSController extends AdminController
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
$this->_model = new UserSNSModel();
+ $this->_viewDatas['className'] = 'UserSNS';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
}
public function getFields(string $action = ""): array
{
diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php
index 1697d7e..c454101 100644
--- a/app/Controllers/BaseController.php
+++ b/app/Controllers/BaseController.php
@@ -60,10 +60,9 @@ abstract class BaseController extends Controller
$this->_session = \Config\Services::session();
$this->_viewDatas['layout'] = LAYOUTS['empty'];
$this->_viewDatas['session'] = $this->_session;
- $this->_viewDatas['title'] = lang($this->_model->getClassName() . '.title');
- $this->_viewDatas['className'] = $this->_model->getClassName();
- $this->_viewDatas['class_icon'] = CLASS_ICONS[strtoupper($this->_model->getClassName())];
- helper($this->_model->getClassName());
+ $this->_viewDatas['title'] = lang($this->_viewDatas['className'] . '.title');
+ $this->_viewDatas['class_icon'] = CLASS_ICONS[strtoupper($this->_viewDatas['className'])];
+ helper($this->_viewDatas['className']);
//사용자 기본 Role 지정
$this->_viewDatas[SESSION_NAMES['ISLOGIN']] = false;
@@ -78,10 +77,52 @@ abstract class BaseController extends Controller
abstract public function getFields(string $action): array;
abstract public function getFieldFilters(): array;
+ //Field별 Rule용
+ protected function getFieldRule(string $field, array $rules, string $action = ""): array
+ {
+ switch ($field) {
+ default:
+ $rules[$field] = $this->_model->getFieldRule($field, $rules, $action);
+ break;
+ }
+ return $rules;
+ }
+ final public function getFieldRules(array $fields, string $action = ""): array
+ {
+ $rules = array();
+ foreach ($fields as $field) {
+ $rules = $this->getFieldRule($field, $rules, $action);
+ }
+ return $rules;
+ }
public function getFieldBatchFilters(): array
{
return $this->getFieldFilters();
}
+ //Field별 Form Option용
+ public function getFieldFormOption(string $field): array
+ {
+ switch ($field) {
+ default:
+ $options = $this->_model->getFieldFOrmOption($field);
+ break;
+ }
+ if (!is_array($options)) {
+ throw new \Exception(__FUNCTION__ . "에서 {$this->_viewDatas['className']}의 Field:{$field}의 FormOptionData가 array가 아닙니다.\n" . var_export($options, true));
+ }
+ return $options;
+ }
+ final public function getFieldFormOptions(array $fields): array
+ {
+ $fieldFormOptions = array();
+ foreach ($fields as $field) {
+ if (!is_string($field)) {
+ throw new \Exception(__FUNCTION__ . "에서 {$this->_viewDatas['className']}의 Field:{$field}가 string 아닙니다.\n" . var_export($fields, true));
+ }
+ $fieldFormOptions[$field] = $this->getFieldFormOption($field);
+ }
+ return $fieldFormOptions;
+ }
//Field별 Form Datas 처리용
protected function getFieldFormData(string $field, $entity = null): array
{
@@ -108,10 +149,10 @@ abstract class BaseController extends Controller
break;
}
$this->_viewDatas['fields'] = $fields ?: $this->getFields($action);
- $this->_viewDatas['fieldRules'] = $this->_model->getFieldRules($this->_viewDatas['fields'], $action);
+ $this->_viewDatas['fieldRules'] = $this->getFieldRules($this->_viewDatas['fields'], $action);
$this->_viewDatas['fieldFilters'] = $this->getFieldFilters();
$this->_viewDatas['batchjobFilters'] = $this->getFieldBatchFilters();
- $this->_viewDatas['fieldFormOptions'] = $this->_model->getFieldFormOptions($this->_viewDatas['fieldFilters']);
+ $this->_viewDatas['fieldFormOptions'] = $this->getFieldFormOptions($this->_viewDatas['fieldFilters']);
return $this->_viewDatas;
}
@@ -547,7 +588,7 @@ abstract class BaseController extends Controller
//Header용
$column = 'A';
foreach ($viewDatas['fields'] as $field) {
- $sheet->setCellValue($column++ . '1', lang($this->_model->getClassName() . '.label.' . $field));
+ $sheet->setCellValue($column++ . '1', lang($this->_viewDatas['className'] . '.label.' . $field));
}
//본문용
$line = 2;
diff --git a/app/Controllers/EcommerceController.php b/app/Controllers/Ecommerce/CartController.php
similarity index 71%
rename from app/Controllers/EcommerceController.php
rename to app/Controllers/Ecommerce/CartController.php
index e52b4af..d26bbe4 100644
--- a/app/Controllers/EcommerceController.php
+++ b/app/Controllers/Ecommerce/CartController.php
@@ -1,91 +1,61 @@
_viewDatas['className'] = 'Cart';
parent::initController($request, $response, $logger);
- $this->_session = \Config\Services::session();
- $this->_viewDatas['title'] = '장바구니';
- $this->_viewDatas['session'] = $this->_session;
- }
- private function getOrderModel()
- {
- return $this->_orderModel = $this->_orderModel ?: new OrderModel();
- }
- private function getProductModel()
- {
- return $this->_productModel = $this->_productModel ?: new ProductModel();
}
-
- //주문정보 확인
- private function addCart_validate()
+ public function getFields(string $action = ""): array
{
- //fieldData Rule 검사
- if (!$this->validate($this->_viewDatas['fieldRules'])) {
- throw new \Exception("{$this->_viewDatas['title']}의 검증 오류발생\n" . implode("\n", $this->validator->getErrors()));
+ $fields = ["product_uid", "quantity", "price"];
+ switch ($action) {
+ default:
+ return $fields;
+ break;
}
- //fieldData 적용
- $this->_viewDatas['fieldDatas'] = array();
- foreach ($this->_viewDatas['fields'] as $field) {
- $this->_viewDatas['fieldDatas'][$field] = $this->request->getVar($field);
+ }
+ protected function getFieldRule(string $field, array $rules, string $action = ""): array
+ {
+ switch ($field) {
+ case "product_uid":
+ case "quantity":
+ case "price":
+ $rules = $this->getOrderModel()->getFieldRules($field, $rules, $action);
+ break;
+ default:
+ $rules = parent::getFieldRule($field, $rules, $action);
+ break;
}
+ return $rules;
+ }
+ public function getFieldFilters(): array
+ {
+ return [];
+ }
+ public function getFieldBatchFilters(): array
+ {
+ return parent::getFieldBatchFilters();
}
//주문(장바구니담기)
- public function addCart()
+ public function insert()
{
$msg = "";
try {
- $this->_viewDatas['fields'] = ["product_uid", "quantity", "price"];
- $this->_viewDatas['fieldRules'] = $this->getOrderModel()->getFieldRules($this->_viewDatas['fields']);
+ $this->_viewDatas = $this->init(__FUNCTION__);
//Transaction 시작
$this->getOrderModel()->transStart();
//장바구니정보 검증
- $this->addCart_validate();
+ $this->insert_validate();
//상품정보 가져오기
$product = $this->getProductModel()->getEntity([$this->getProductModel()->getPrimaryKey() => $this->_viewDatas['fieldDatas']['product_uid']]);
//재고수 비교
@@ -134,7 +104,7 @@ class EcommerceController extends Controller
}
//주문취소(uid -> order_uid)
- public function cancelCart($uid)
+ public function delete($uid)
{
$msg = "";
try {
diff --git a/app/Controllers/Ecommerce/EcommerceController.php b/app/Controllers/Ecommerce/EcommerceController.php
new file mode 100644
index 0000000..57fd95f
--- /dev/null
+++ b/app/Controllers/Ecommerce/EcommerceController.php
@@ -0,0 +1,41 @@
+_session = \Config\Services::session();
+ $this->_viewPath .= 'ecommerce/';
+ $this->_viewDatas['control'] = 'front';
+ $this->_viewDatas['layout'] = LAYOUTS['front'];
+ }
+ final protected function getUserModel()
+ {
+ return $this->_userModel = $this->_userModel ?: new UserModel();
+ }
+ final protected function getOrderModel()
+ {
+ return $this->_orderModel = $this->_orderModel ?: new OrderModel();
+ }
+ final protected function getProductModel()
+ {
+ return $this->_productModel = $this->_productModel ?: new ProductModel();
+ }
+}
diff --git a/app/Controllers/Ecommerce/Payment/CardController.php b/app/Controllers/Ecommerce/Payment/CardController.php
new file mode 100644
index 0000000..271661d
--- /dev/null
+++ b/app/Controllers/Ecommerce/Payment/CardController.php
@@ -0,0 +1,137 @@
+_viewPath .= strtolower($this->_viewDatas['className']);
+ }
+
+ public function getFields(string $action = ""): array
+ {
+ switch ($action) {
+ case 'insert':
+ return ["order_uid", "card_quota", "card_number", "card_expiration", "email", "mobile"];
+ break;
+ default:
+ return [];
+ break;
+ }
+ }
+ protected function getFieldRule(string $field, array $rules, string $action = ""): array
+ {
+ switch ($field) {
+ case "order_uid":
+ $rules[$field] = 'required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]';
+ break;
+ case "card_quota":
+ $rules[$field] = 'required|in_list[00,01]';
+ break;
+ case "card_number":
+ $rules[$field] = 'required|regex_match[/^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}/]';
+ break;
+ case "card_expiration":
+ $rules[$field] = 'required|regex_match[/^[1-12]{2}-[0-9]{4}/]';
+ break;
+ case "email":
+ $rules[$field] = 'required|valid_email';
+ break;
+ case "mobile":
+ $rules[$field] = 'required|regex_match[/^[0-9]{3}-[0-9]{4}-[0-9]{4}/]';
+ break;
+ default:
+ $rules = parent::getFieldRule($field, $rules, $action);
+ break;
+ }
+ return $rules;
+ }
+ public function getFieldFilters(): array
+ {
+ return ['card_quota'];
+ }
+ public function getFieldBatchFilters(): array
+ {
+ return parent::getFieldBatchFilters();
+ }
+ //Field별 Form Option용
+ public function getFieldFormOption(string $field): array
+ {
+ switch ($field) {
+ case 'card_quota':
+ $options = lang($this->_viewDatas['className'] . '.CARD_QUOTA');
+ break;
+ default:
+ $options = parent::getFieldFormOption($field);
+ break;
+ }
+ if (!is_array($options)) {
+ throw new \Exception(__FUNCTION__ . "에서 {$this->_viewDatas['className']}의 Field:{$field}의 FormOptionData가 array가 아닙니다.\n" . var_export($options, true));
+ }
+ return $options;
+ }
+
+ //카드결제 Form
+ //Insert관련
+ protected function insert_form_process()
+ {
+ $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => ['order_uid' => $this->_viewDatas['order']->getPrimaryKey()]];
+ }
+ public function insert_form()
+ {
+ try {
+ $uid = $this->request->getVar('order_uid') ?: throw new \Exception("주문번호가 지정되지 않았습니다.");
+ $this->_viewDatas = $this->init(__FUNCTION__);
+ $this->_viewDatas['order'] = $this->getOrderModel()->getEntity([$this->getOrderModel()->getPrimaryKey() => $uid]);
+ $this->_viewDatas['user'] = $this->getUserModel()->getEntity([$this->getUserModel()->getPrimaryKey() => $this->_viewDatas['auth'][AUTH_FIELDS['ID']]]);
+ $this->insert_form_process();
+ helper(['form']);
+ $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']);
+ return view($this->_viewPath . '/insert', ['viewDatas' => $this->_viewDatas]);
+ } catch (\Exception $e) {
+ log_message("error", $e->getMessage());
+ return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/")->with('return_message', $e->getMessage());
+ }
+ }
+
+ //PG사 카드결제처리
+ protected function insert_process()
+ {
+ //결제후 정보저장
+ $adapter = new PaymentAdapter();
+ $adapter->setDatas($this->_viewDatas['fieldDatas']);
+ $response = $adapter->execute();
+ echo var_export($response, true);
+ $entity = $this->getPaymentModel()->create($response);
+ //아래는 Order Complete처리용
+ parent::insert_process();
+ return $entity;
+ }
+ //카드결제
+ public function insert()
+ {
+ $msg = "";
+ try {
+ $this->_viewDatas = $this->init(__FUNCTION__);
+ $this->insert_validate();
+ $entity = $this->insert_process();
+ $msg = "{$this->_viewDatas['title']}에서 {$entity->getTitle()}의 " . __FUNCTION__ . " 완료하였습니다.";
+ return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/");
+ } catch (\Exception $e) {
+ $msg = "{$this->_viewDatas['title']}에서 " . __FUNCTION__ . " 실패하였습니다.\n" . $e->getMessage();
+ log_message("error", $e->getMessage());
+ $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']);
+ return redirect()->back()->withInput();
+ } finally {
+ $this->_session->setFlashdata("return_message", $msg);
+ }
+ }
+}
diff --git a/app/Controllers/Ecommerce/Payment/DepositController.php b/app/Controllers/Ecommerce/Payment/DepositController.php
new file mode 100644
index 0000000..cfeff1c
--- /dev/null
+++ b/app/Controllers/Ecommerce/Payment/DepositController.php
@@ -0,0 +1,107 @@
+_viewDatas['className'] = 'Deposit';
+ parent::initController($request, $response, $logger);
+ }
+
+ public function getFields(string $action = ""): array
+ {
+ switch ($action) {
+ case 'insert':
+ return ["order_uid", "email", "mobile"];
+ break;
+ default:
+ return [];
+ break;
+ }
+ }
+ protected function getFieldRule(string $field, array $rules, string $action = ""): array
+ {
+ switch ($field) {
+ case "order_uid":
+ $rules[$field] = 'required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]';
+ break;
+ case "email":
+ $rules[$field] = 'required|valid_email';
+ break;
+ case "mobile":
+ $rules[$field] = 'required|regex_match[/^[0-9]{3}-[0-9]{4}-[0-9]{4}/]';
+ break;
+ default:
+ $rules = parent::getFieldRule($field, $rules, $action);
+ break;
+ }
+ return $rules;
+ }
+ public function getFieldFilters(): array
+ {
+ return [];
+ }
+ public function getFieldBatchFilters(): array
+ {
+ return parent::getFieldBatchFilters();
+ }
+
+ //무통장입금결제Form
+ //Insert관련
+ protected function insert_form_process()
+ {
+ $this->_viewDatas['bank'] = [
+ "name" => getenv("payment.deposit.bank.name") ?: "은행명",
+ "account" => getenv("payment.deposit.bank.account") ?: "계좌번호",
+ "holder" => getenv("payment.deposit.bank.holder") ?: "예금주"
+ ];
+ $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => ['order_uid' => $this->_viewDatas['order']->getPrimaryKey()]];
+ }
+ public function insert_form()
+ {
+ try {
+ $uid = $this->request->getVar('order_uid') ?: throw new \Exception("주문번호가 지정되지 않았습니다.");
+ $this->_viewDatas = $this->init(__FUNCTION__);
+ $this->_viewDatas['order'] = $this->getOrderModel()->getEntity([$this->getOrderModel()->getPrimaryKey() => $uid]);
+ $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']);
+ return view($this->_viewPath . '/deposit', ['viewDatas' => $this->_viewDatas]);
+ } catch (\Exception $e) {
+ log_message("error", $e->getMessage());
+ return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/")->with('return_message', $e->getMessage());
+ }
+ }
+
+ protected function insert_process()
+ {
+ //결제후 정보저장
+ $entity = $this->getPaymentModel()->create($this->_viewDatas['fieldDatas']);
+ //아래는 Order Complete처리용
+ parent::insert_process();
+ return $entity;
+ }
+ //카드결제
+ public function insert()
+ {
+ $msg = "";
+ try {
+ $this->_viewDatas = $this->init(__FUNCTION__);
+ $this->insert_validate();
+ $entity = $this->insert_process();
+ $msg = "{$this->_viewDatas['title']}에서 {$entity->getTitle()}의 " . __FUNCTION__ . " 완료하였습니다.";
+ return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/");
+ } catch (\Exception $e) {
+ $msg = "{$this->_viewDatas['title']}에서 " . __FUNCTION__ . " 실패하였습니다.\n" . $e->getMessage();
+ log_message("error", $e->getMessage());
+ $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']);
+ return redirect()->back()->withInput();
+ } finally {
+ $this->_session->setFlashdata("return_message", $msg);
+ }
+ }
+}
diff --git a/app/Controllers/Ecommerce/Payment/PaymentController.php b/app/Controllers/Ecommerce/Payment/PaymentController.php
new file mode 100644
index 0000000..df59392
--- /dev/null
+++ b/app/Controllers/Ecommerce/Payment/PaymentController.php
@@ -0,0 +1,44 @@
+_viewPath .= 'payment/';
+
+ //Default 회원정보 Category
+ $this->_category = DEFAULTS['PAYMENT_CATEGORY'];
+ $this->_category ?: throw new \Exception("분류를 지정하지 않으셨습니다.");
+ $this->_viewDatas['category'] = $this->getCategoryModel()->getEntity([$this->getCategoryModel()->getPrimaryKey() => $this->_category]);
+ $this->_viewDatas['parent_category'] = $this->getCategoryModel()->getEntity([$this->getCategoryModel()->getPrimaryKey() => $this->_viewDatas['category']->getHierarchy_ParentUID()]);
+ }
+
+ final protected function getPaymentModel()
+ {
+ return $this->_paymentModel = $this->_paymentModel ?: new PaymentModel();
+ }
+ final protected function getCategoryModel()
+ {
+ return $this->_categoryModel = $this->_categoryModel ?: new CategoryModel();
+ }
+
+ protected function insert_process()
+ {
+ //Order 테이블에 결제완료 처리
+ $this->getOrderModel()->paymentCompleted();
+ }
+}
diff --git a/app/Controllers/Front/BoardController.php b/app/Controllers/Front/BoardController.php
index 5245e81..fa282c6 100644
--- a/app/Controllers/Front/BoardController.php
+++ b/app/Controllers/Front/BoardController.php
@@ -11,9 +11,10 @@ class BoardController extends FrontController
{
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
- $this->_model = new BoardModel($this->getFields());
+ $this->_model = new BoardModel();
+ $this->_viewDatas['className'] = 'Board';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
}
public function getFields(string $action = ""): array
{
diff --git a/app/Controllers/Front/OrderController.php b/app/Controllers/Front/OrderController.php
index 62339b1..24b2a64 100644
--- a/app/Controllers/Front/OrderController.php
+++ b/app/Controllers/Front/OrderController.php
@@ -11,9 +11,10 @@ class OrderController extends FrontController
{
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
- $this->_model = new OrderModel($this->getFields());
+ $this->_model = new OrderModel();
+ $this->_viewDatas['className'] = 'Order';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
//Default 회원정보 Category
$this->_category = DEFAULTS['ORDER_CATEGORY'];
$this->isRole('index');
diff --git a/app/Controllers/Front/PaymentController.php b/app/Controllers/Front/PaymentController.php
index ba142b9..7aa634f 100644
--- a/app/Controllers/Front/PaymentController.php
+++ b/app/Controllers/Front/PaymentController.php
@@ -2,38 +2,24 @@
namespace App\Controllers\Front;
-use App\Entities\PaymentEntity;
-use App\Libraries\Adapter\Payment\CookiePayment as PaymentAdapter;
-use App\Models\OrderModel;
use App\Models\PaymentModel;
-use App\Models\UserModel;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
class PaymentController extends FrontController
{
- private $_userModel = null;
- private $_orderModel = null;
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
- $this->_model = new PaymentModel($this->getFields());
+ $this->_model = new PaymentModel();
+ $this->_viewDatas['className'] = 'Payment';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
//Default 회원정보 Category
$this->_category = DEFAULTS['PAYMENT_CATEGORY'];
$this->isRole('index');
}
- private function getUserModel()
- {
- return $this->_userModel = $this->_userModel ?: new UserModel();
- }
- private function getOrderModel()
- {
- return $this->_orderModel = $this->_orderModel ?: new OrderModel();
- }
-
final public function getFields(string $action = ""): array
{
switch ($action) {
@@ -60,93 +46,4 @@ class PaymentController extends FrontController
}
//추가기능
- //결제(uid -> order_uid)
- private function card_init()
- {
- $this->_viewDatas['fields'] = [
- "card_quota", "card_number", "card_expiration", "card_email", "card_mobile"
- ];
- $this->_viewDatas['fieldRules'] = [
- 'card_quota' => 'required|in_list[00,01]',
- 'card_number' => 'required|regex_match[/^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}/]',
- 'card_expiration' => 'required|regex_match[/^[1-12]{2}-[0-9]{4}/]',
- 'card_email' => 'required|valid_email',
- 'card_mobile' => 'required|regex_match[/^^[0-9]{3}-[0-9]{4}-[0-9]{4}/]',
- ];
- $this->_viewDatas['fieldFilters'] = ['card_quota'];
- $this->_viewDatas['fieldFormOptions']['card_quota'] = lang($this->_model->getClassName() . '.CARD_QUOTA');
- }
- public function card_form($uid)
- {
- try {
- $this->card_init();
- $this->_viewDatas['user'] = $this->getUserModel()->getEntity([$this->getUserModel()->getPrimaryKey() => $this->_viewDatas['auth'][AUTH_FIELDS['ID']]]);
- $this->_viewDatas['order'] = $this->getOrderModel()->getEntity([$this->getOrderModel()->getPrimaryKey() => $uid]);
- helper(['form']);
- $this->_viewDatas['forms'] = ['attributes' => ['method' => "post",], 'hiddens' => []];
- $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']);
- return view($this->_viewPath . '/card', ['viewDatas' => $this->_viewDatas]);
- } catch (\Exception $e) {
- log_message("error", $e->getMessage());
- return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/")->with('return_message', $e->getMessage());
- }
- }
- protected function card_validate()
- {
- //fieldData Rule 검사
- if (!$this->validate($this->_viewDatas['fieldRules'])) {
- throw new \Exception("결제정보의 검증 오류발생\n" . implode("\n", $this->validator->getErrors()));
- }
- //fieldData 적용
- $this->_viewDatas['fieldDatas'] = array();
- foreach ($this->_viewDatas['fields'] as $field) {
- $this->_viewDatas['fieldDatas'] = $this->getFieldFormData($field);
- }
- }
-
- //처리
- private function card_process(): PaymentEntity
- {
- //결제후 정보저장
- $adapter = new PaymentAdapter();
- $response = $adapter->execute();
- echo var_export($response, true);
- return $this->_model->create($response);
- }
-
- public function card($uid)
- {
- $msg = "";
- try {
- $this->card_init();
- $this->card_validate();
- $entity = $this->card_process();
- $msg = "{$this->_viewDatas['title']}에서 {$entity->getTitle()}의 " . __FUNCTION__ . " 완료하였습니다.";
- return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/");
- } catch (\Exception $e) {
- $msg = "{$this->_viewDatas['title']}에서 " . __FUNCTION__ . " 실패하였습니다.\n" . $e->getMessage();
- log_message("error", $e->getMessage());
- $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']);
- return redirect()->back()->withInput();
- } finally {
- $this->_session->setFlashdata("return_message", $msg);
- }
- }
-
- public function deposit_form($uid)
- {
- try {
- $this->_viewDatas['bank'] = [
- "name" => getenv("payment.deposit.bank.name") ?: "은행명",
- "account" => getenv("payment.deposit.bank.account") ?: "계좌번호",
- "holder" => getenv("payment.deposit.bank.holder") ?: "예금주"
- ];
- $this->_viewDatas['order'] = $this->getOrderModel()->getEntity([$this->getOrderModel()->getPrimaryKey() => $uid]);
- $this->_session->keepFlashdata(SESSION_NAMES['RETURN_URL']);
- return view($this->_viewPath . '/deposit', ['viewDatas' => $this->_viewDatas]);
- } catch (\Exception $e) {
- log_message("error", $e->getMessage());
- return redirect()->to($this->_session->getFlashdata(SESSION_NAMES['RETURN_URL']) ?: "/")->with('return_message', $e->getMessage());
- }
- }
}
diff --git a/app/Controllers/Front/ProductController.php b/app/Controllers/Front/ProductController.php
index c8f3e8c..7c8ab9c 100644
--- a/app/Controllers/Front/ProductController.php
+++ b/app/Controllers/Front/ProductController.php
@@ -11,9 +11,10 @@ class ProductController extends FrontController
{
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
- $this->_model = new ProductModel($this->getFields());
+ $this->_model = new ProductModel();
+ $this->_viewDatas['className'] = 'Product';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
}
public function getFields(string $action = ""): array
{
diff --git a/app/Controllers/Front/SitepageController.php b/app/Controllers/Front/SitepageController.php
index a2213ab..5e3bdee 100644
--- a/app/Controllers/Front/SitepageController.php
+++ b/app/Controllers/Front/SitepageController.php
@@ -11,9 +11,10 @@ class SitepageController extends FrontController
{
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
- $this->_model = new SitepageModel($this->getFields());
+ $this->_model = new SitepageModel();
+ $this->_viewDatas['className'] = 'Sitepage';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
}
public function getFields(string $action = ""): array
{
diff --git a/app/Controllers/Front/UserController.php b/app/Controllers/Front/UserController.php
index a1ad25c..76647f4 100644
--- a/app/Controllers/Front/UserController.php
+++ b/app/Controllers/Front/UserController.php
@@ -14,8 +14,9 @@ class UserController extends FrontController
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
$this->_model = new UserModel();
+ $this->_viewDatas['className'] = 'User';
parent::initController($request, $response, $logger);
- $this->_viewPath .= strtolower($this->_model->getClassName());
+ $this->_viewPath .= strtolower($this->_viewDatas['className']);
$this->initAdapters();
//Default 회원정보 Category
diff --git a/app/Helpers/Ecommerce_helper.php b/app/Helpers/Ecommerce_helper.php
new file mode 100644
index 0000000..13f0856
--- /dev/null
+++ b/app/Helpers/Ecommerce_helper.php
@@ -0,0 +1,103 @@
+%s", implode(" ", $attributes), lang("{$viewDatas['className']}.label.{$field}"));
+ break;
+ }
+}
+//header.php에서 getFieldForm_Helper사용
+function getFieldForm_EcommerceHelper($field, $value, array $viewDatas, array $attributes = array())
+{
+ $value = $value ?: DEFAULTS['EMPTY'];
+ switch ($field) {
+ case 'card_quota':
+ $viewDatas['fieldFormOptions'][$field] = [DEFAULTS['EMPTY'] => lang("{$viewDatas['className']}.label.{$field}") . " 선택", ...$viewDatas['fieldFormOptions'][$field]];
+ return form_dropdown($field, $viewDatas['fieldFormOptions'][$field], $value, $attributes);
+ break;
+ case 'card_number':
+ return sprintf(
+ "%s-%s-%s-%s",
+ form_input("{$field}[]", DEFAULTS['EMPTY'], ['type' => "number", 'maxlength' => 4, 'size' => 4]),
+ form_input("{$field}[]", DEFAULTS['EMPTY'], ['type' => "number", 'maxlength' => 4, 'size' => 4]),
+ form_input("{$field}[]", DEFAULTS['EMPTY'], ['type' => "number", 'maxlength' => 4, 'size' => 4]),
+ form_input("{$field}[]", DEFAULTS['EMPTY'], ['type' => "number", 'maxlength' => 4, 'size' => 4])
+ );
+ break;
+ case 'card_expiration':
+ $months = [];
+ for ($i = 1; $i <= 12; $i++) {
+ $months[$i] = "{$i}월";
+ }
+ $start = date('Y');
+ $end = date('Y', strtotime(date("Y") . ' + 10 year'));
+ $years = [];
+ for ($i = $start; $i <= $end; $i++) {
+ $years[$i] = "{$i}년";
+ }
+ return sprintf(
+ "%s월 %s년",
+ form_dropdown("{$field}[]", $months, DEFAULTS['EMPTY']),
+ form_dropdown("{$field}[]", $years, DEFAULTS['EMPTY']),
+ );
+ break;
+ case 'email':
+ return form_input($field, $viewDatas['user']->email);
+ break;
+ case 'mobile':
+ return form_input($field, $viewDatas['user']->mobile);
+ break;
+ default:
+ return form_input($field, $value);
+ break;
+ }
+} //
+
+function getFieldView_EcommerceHelper($field, $entity, array $viewDatas)
+{
+ $value = $entity->$field ?: DEFAULTS['EMPTY'];
+ switch ($field) {
+ default:
+ return in_array($field, $viewDatas['fieldFilters']) && $value ? $viewDatas['fieldFormOptions'][$field][$value] : $value;
+ break;
+ }
+} //
+
+function getFieldFilter_EcommerceHelper($field, $value, array $viewDatas)
+{
+ $viewDatas['fieldFormOptions'][$field] = [DEFAULTS['EMPTY'] => lang("{$viewDatas['className']}.label.{$field}") . " 선택", ...$viewDatas['fieldFormOptions'][$field]];
+ return form_dropdown($field, $viewDatas['fieldFormOptions'][$field], $value, ['class' => "select-field"]);
+} //
+
+function getFieldIndex_Column_EcommerceHelper($field, array $viewDatas)
+{
+ $label = lang("{$viewDatas['className']}.label.{$field}");
+ if ($field == $viewDatas['order_field']) {
+ $label .= $viewDatas['order_value'] == 'ASC' ? ICONS['UP'] : ICONS['DOWN'];
+ }
+ $value = $viewDatas['order_value'] == 'DESC' ? "ASC" : "DESC";
+ $viewDatas['uri']->addQuery('order_field', $field);
+ $viewDatas['uri']->addQuery('order_value', $value);
+ $columnData = anchor($viewDatas['uri'], $label);
+ switch ($field) {
+ default:
+ return sprintf("
%s | ", $columnData);
+ break;
+ }
+} //
+
+//Front용
+function getFieldIndex_Row_EcommerceHelper($field, $entity, array $viewDatas): string
+{
+ $value = $entity->$field ?: DEFAULTS['EMPTY'];
+ switch ($field) {
+ default:
+ return sprintf("%s | ", getFieldView_EcommerceHelper($field, $entity, $viewDatas));
+ break;
+ }
+} //
\ No newline at end of file
diff --git a/app/Helpers/Order_helper.php b/app/Helpers/Order_helper.php
index 0f13960..ab7fab5 100644
--- a/app/Helpers/Order_helper.php
+++ b/app/Helpers/Order_helper.php
@@ -137,15 +137,24 @@ function getFieldIndex_Row_OrderHelper($field, $entity, array $viewDatas): strin
break;
case 'status':
if ($value == DEFAULTS['STATUS']) {
- return sprintf("%s %s | ", anchor(
- '/front/payment/card/' . $entity->getPrimaryKey(),
- "카드결제",
- ["class" => "btn btn-sm btn-primary btn-circle", "style" => "color:white", "target" => "_self"]
- ), anchor(
- '/front/payment/deposit/' . $entity->getPrimaryKey(),
- "무통장입금",
- ["class" => "btn btn-sm btn-info btn-circle", "style" => "color:white", "target" => "_self"]
- ));
+ return sprintf(
+ "%s %s %s | ",
+ anchor(
+ URLS['paymentCard'] . '/' . $entity->getPrimaryKey(),
+ "카드결제",
+ ["class" => "btn btn-sm btn-primary btn-circle", "style" => "color:white", "target" => "_self"]
+ ),
+ anchor(
+ URLS['depositPayment'] . '/' . $entity->getPrimaryKey(),
+ "무통장입금",
+ ["class" => "btn btn-sm btn-info btn-circle", "style" => "color:white", "target" => "_self"]
+ ),
+ anchor(
+ current_url() . '/delete/' . $entity->getPrimaryKey(),
+ ICONS['DELETE'] . '주문취소',
+ ["class" => "btn btn-sm btn-danger btn-circle", "target" => "_self"]
+ )
+ );
} else {
return sprintf("%s | ", getFieldView_OrderHelper($field, $entity, $viewDatas));
}
diff --git a/app/Language/ko/Ecommerce.php b/app/Language/ko/Ecommerce.php
new file mode 100644
index 0000000..be73d58
--- /dev/null
+++ b/app/Language/ko/Ecommerce.php
@@ -0,0 +1,15 @@
+ "결제 정보",
+ 'label' => [
+ 'card_quota' => '카드할부',
+ 'card_number' => '카드번호',
+ 'card_expiration' => '유효기간',
+ 'email' => '이메일',
+ 'mobile' => '휴대폰(인증용)',
+ ],
+ "CARD_QUOTA" => [
+ "00" => "일시불",
+ "01" => "1개월",
+ ]
+];
diff --git a/app/Language/ko/Payment.php b/app/Language/ko/Payment.php
index 8a67a91..f2939de 100644
--- a/app/Language/ko/Payment.php
+++ b/app/Language/ko/Payment.php
@@ -1,6 +1,6 @@
"결제 정보",
+ 'title' => "쇼핑몰정보",
'label' => [
'uid' => "결제ID",
'TID' => "PG거래번호",
@@ -18,14 +18,5 @@ return [
'ETC5' => "결제입력값",
'updated_at' => "수정일",
'created_at' => "작성일",
- 'card_quota' => '카드할부',
- 'card_number' => '카드번호',
- 'card_expiration' => '유효기간',
- 'card_email' => '이메일',
- 'card_mobile' => '휴대폰(인증용)',
],
- "CARD_QUOTA" => [
- "00" => "일시불",
- "01" => "1개월",
- ]
];
diff --git a/app/Libraries/Adapter/Payment/CookiePayment.php b/app/Libraries/Adapter/Payment/CookiePayment.php
index a417144..603637f 100644
--- a/app/Libraries/Adapter/Payment/CookiePayment.php
+++ b/app/Libraries/Adapter/Payment/CookiePayment.php
@@ -38,26 +38,29 @@ class CookiePayment extends Payment
$adapter->setHeader("ApiKey", getenv("payment.card.pay2.apikey") ?: "COOKIEPAY에서 발급받은 연동키");
$adapter->setHeader("TOKEN", $this->getToken());
$adapter->setURL(getenv("payment.card.pay2.url") ?: "{요청도메인}/keyin/payment");
- $adapter->setDatas(array(
- 'API_ID' => 'COOKIEPAY에서 발급받은 가맹점연동 ID',
- 'ORDERNO' => '주문번호',
- 'PRODUCTNAME' => '상품명',
- 'AMOUNT' => '결제금액',
- 'BUYERNAME' => '고객명',
- 'BUYEREMAIL' => '고객 E-MAIL',
- 'CARDNO' => '카드번호',
- 'EXPIREDT' => '카드유효기간',
- 'PRODUCTCODE' => '상품코드',
- 'BUYERID' => '고객 ID',
- 'BUYERADDRESS' => '고객 주소',
- 'BUYERPHONE' => '고객 휴대폰번호',
- 'QUOTA' => '할부개월',
- 'ETC1' => '추가필드 1',
- 'ETC2' => '추가필드 2',
- 'ETC3' => '추가필드 3',
- 'ETC4' => '추가필드 4',
- 'ETC5' => '추가필드 5',
- ));
+
+ $datas = $this->getDatas();
+ // array(
+ // 'API_ID' => 'COOKIEPAY에서 발급받은 가맹점연동 ID',
+ // 'ORDERNO' => '주문번호',
+ // 'PRODUCTNAME' => '상품명',
+ // 'AMOUNT' => '결제금액',
+ // 'BUYERNAME' => '고객명',
+ // 'BUYEREMAIL' => '고객 E-MAIL',
+ // 'CARDNO' => '카드번호',
+ // 'EXPIREDT' => '카드유효기간',
+ // 'PRODUCTCODE' => '상품코드',
+ // 'BUYERID' => '고객 ID',
+ // 'BUYERADDRESS' => '고객 주소',
+ // 'BUYERPHONE' => '고객 휴대폰번호',
+ // 'QUOTA' => '할부개월',
+ // 'ETC1' => '추가필드 1',
+ // 'ETC2' => '추가필드 2',
+ // 'ETC3' => '추가필드 3',
+ // 'ETC4' => '추가필드 4',
+ // 'ETC5' => '추가필드 5',
+ // )
+ $adapter->setDatas($datas);
return $adapter->execute();
}
}
diff --git a/app/Libraries/Adapter/Payment/Payment.php b/app/Libraries/Adapter/Payment/Payment.php
index e0062b7..eba99b4 100644
--- a/app/Libraries/Adapter/Payment/Payment.php
+++ b/app/Libraries/Adapter/Payment/Payment.php
@@ -6,11 +6,22 @@ use App\Libraries\Adapter\Adapter;
abstract class Payment extends Adapter
{
+ private $_datas = array();
protected function __construct($debug = false)
{
parent::__construct($debug);
}
abstract protected function execute_process(): object;
+
+ //결제용 데이터
+ final public function setDatas(array $datas)
+ {
+ $this->_datas = $datas;
+ }
+ final public function getDatas(): array
+ {
+ return $this->_datas;
+ }
final public function execute(): object
{
return $this->execute_process();
diff --git a/app/Models/BaseModel.php b/app/Models/BaseModel.php
index e2fac7f..a81f3fc 100644
--- a/app/Models/BaseModel.php
+++ b/app/Models/BaseModel.php
@@ -56,7 +56,7 @@ abstract class BaseModel extends Model
$this->_session = \Config\Services::session();
$this->_validation = \Config\Services::validation();
}
- final public function getClassName()
+ final protected function getClassName()
{
return $this->_className;
}
@@ -155,17 +155,17 @@ abstract class BaseModel extends Model
return $options;
}
//Field별 Form Option용
- final public function getFieldFormOptions(array $fields): array
- {
- $fieldFormOptions = array();
- foreach ($fields as $field) {
- if (!is_string($field)) {
- throw new \Exception(__FUNCTION__ . "에서 {$this->getClassName()}의 Field:{$field}가 string 아닙니다.\n" . var_export($fields, true));
- }
- $fieldFormOptions[$field] = $this->getFieldFormOption($field);
- }
- return $fieldFormOptions;
- }
+ // final public function getFieldFormOptions(array $fields): array
+ // {
+ // $fieldFormOptions = array();
+ // foreach ($fields as $field) {
+ // if (!is_string($field)) {
+ // throw new \Exception(__FUNCTION__ . "에서 {$this->getClassName()}의 Field:{$field}가 string 아닙니다.\n" . var_export($fields, true));
+ // }
+ // $fieldFormOptions[$field] = $this->getFieldFormOption($field);
+ // }
+ // return $fieldFormOptions;
+ // }
final public function getUUID()
{
diff --git a/app/Views/front/payment/card.php b/app/Views/ecommerce/card.php
similarity index 76%
rename from app/Views/front/payment/card.php
rename to app/Views/ecommerce/card.php
index aff8534..6d813df 100644
--- a/app/Views/front/payment/card.php
+++ b/app/Views/ecommerce/card.php
@@ -15,15 +15,15 @@
- | = getFieldLabel_PaymentHelper($field, $viewDatas) ?> |
+ = getFieldLabel_EcommerceHelper($field, $viewDatas) ?> |
- = getFieldForm_PaymentHelper($field, old($field, DEFAULTS['EMPTY']), $viewDatas) ?>
+ = getFieldForm_EcommerceHelper($field, old($field, DEFAULTS['EMPTY']), $viewDatas) ?>
= validation_show_error($field); ?>
|
- | = form_submit('', '결제', array("class" => "btn btn-outline btn-primary")); ?> |
+ = form_submit('', '카드결제', array("class" => "btn btn-outline btn-primary")); ?> |
= form_close(); ?>
diff --git a/app/Views/front/payment/deposit.php b/app/Views/ecommerce/deposit.php
similarity index 61%
rename from app/Views/front/payment/deposit.php
rename to app/Views/ecommerce/deposit.php
index ed5c653..9b88067 100644
--- a/app/Views/front/payment/deposit.php
+++ b/app/Views/ecommerce/deposit.php
@@ -3,6 +3,7 @@
= html_entity_decode($viewDatas['category']->head) ?>
+ = form_open_multipart(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
+ = form_close(); ?>
+
= html_entity_decode($viewDatas['category']->tail) ?>
= html_entity_decode($viewDatas['category']->tail) ?>
diff --git a/app/Views/front/product/addCart.php b/app/Views/front/product/addCart.php
index 4a9b058..2249cba 100644
--- a/app/Views/front/product/addCart.php
+++ b/app/Views/front/product/addCart.php
@@ -1,4 +1,4 @@
-= form_open("ecommerce/addCart", ['method' => 'post']) ?>
+= form_open(URLS['addCart'], ['method' => 'post']) ?>
= form_hidden("product_uid", $viewDatas['entity']->getPrimaryKey()) ?>