| 제목 | [ci 드라이버] 한국 pg(결제) 드라이버 만들기 (2) -- 수정중 | ||
|---|---|---|---|
| 글쓴이 | 스미 | 작성시각 | 2016/02/19 10:33:07 |
|
|
|||
|
일단 이니시스 모듈은 제가 파악한것은 INIbill41 -- 일반적인 결제 구형 utf8 미지원 INIpay50 -- 일반적인 결제 신형 utf8 미지원 INIpay50-utf8 -- 일반적인 결제 신형 utf8 지원 INIformbill41 -- 카드정보를 받아 빌링키 생성, 이후 시스템에서 결제가 필요할때마다 빌링키로 결제 이렇게 있더라구요. 그중 INIformbill41 사용예제입니다. INIformbill41 좀더 설명드리면 1. 사용자에게 설치요구를 하지않습니다. -- 모바일 사용에 용의합니다. 2. 빌링키로 결제가 진행되어 초기 카드등록후 결제시마다 카드정보가 필요없습니다. -- 파일 수정 application/config/paymentgateway.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
if (defined('BASE_URL') == false) define('BASE_URL', CI::$APP->config->item('base_url'));
$config['pg_test'] = FALSE;
$config['pg_driver'] = 'INIformbill41';
$config['pg_default_field']['dummy'] = array();
$config['pg_default_field']['INIformbill41'] = array(
'home_url' => BASE_URL, // 홈페이지 URL
'pg_module_path' => null, // 이니페이 홈디렉터리 NULL입력시 자동입력
'debug' => 'true', // 디버그(bloon 값 아님)
'pg_mid_password' => '*****', // 키패스워드(상점아이디에 따라 변경)
'pg_mid' => '*********', // 상점아이디
'acceptmethod' => 'below1000=1', // 1000원 미만 승인을 위한 필드추가
'currency' => 'WON', // 화폐 단위 WON : 원화결제일 경우 USD : 달러결제일 경우
'auth_user' => '00', // 00:본인인증(카드번호,유효기간, 생년월일 6 자리, 비밀번호 앞 2 자리) 01:세미인증(카드번호, 유효기간, 생년월일 6 자리)
'quotaInterest' => '0', // 무이자 유무 일반할부 : 0 무이자할부 : 1
);
6. 변경 dummy -> INIformbill41 10-21. 추가 application/libraries/Paymentgateway/Paymentgateway.php
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Paymentgateway extends CI_Driver_Library {
protected $valid_drivers = array(
'INIformbill41',
'dummy'
);
6. 추가 -- 파일 추가 application/libraries/Paymentgateway/drivers/Paymentgateway_INIformbill41.php
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class CI_Paymentgateway_INIformbill41 extends CI_Driver
{
protected $validation_rules = array();
protected $formauth_validation_rules = array(
array('field' => 'buyer_name', 'label' => '구매자명', 'rules' => 'required|trim|max_length[30]',),
array('field' => 'price', 'label' => '상품결제 금액', 'rules' => 'required|trim|integer|is_natural_no_zero|max_length[20]',),
array('field' => 'card_number', 'label' => '카드번호', 'rules' => 'required|trim|integer|is_natural_no_zero|max_length[20]',),
array('field' => 'card_exp_month', 'label' => '유효기간 월', 'rules' => 'required|trim|integer|is_natural_no_zero|exact_length[2]',),
array('field' => 'card_exp_year', 'label' => '유효기간 년', 'rules' => 'required|trim|integer|is_natural_no_zero|exact_length[2]',),
array('field' => 'auth_field1', 'label' => '생년월일', 'rules' => 'required|trim|integer|is_natural_no_zero|min_length[6]|max_length[10]',),
array('field' => 'auth_field2', 'label' => '신용카드 비밀번호 앞 2자리', 'rules' => 'required|trim|integer|exact_length[2]',),
);
protected $reqrealbill_validation_rules = array(
array('field' => 'currency', 'label' => '화폐단위', 'rules' => 'trim|in_list[WON,USD]',),
array('field' => 'quotaInterest', 'label' => '무이자 유무', 'rules' => 'trim|is_natural|in_list[0,1]',),
array('field' => 'card_quota', 'label' => '할부 기간', 'rules' => 'required|trim|is_natural|less_than_equal_to[24]',),
array('field' => 'bill_key', 'label' => 'Billing Key', 'rules' => 'required|trim|max_length[40]',),
array('field' => 'card_password', 'label' => '신용카드 비밀번호 앞 2자리', 'rules' => 'required|trim|is_natural|exact_length[2]',),
array('field' => 'auth_user', 'label' => '본인인증유무', 'rules' => 'trim|is_natural|in_list[00,01]',),
array('field' => 'reg_number', 'label' => '생년월일6자리(사업자 번호)', 'rules' => 'trim|integer|is_natural|min_length[6]|max_length[10]',),
array('field' => 'buyer_name', 'label' => '구매자명', 'rules' => 'required|trim',),
array('field' => 'buyer_phone', 'label' => '구매자 이동전화번호', 'rules' => 'required|trim|numeric',),
array('field' => 'buyer_email', 'label' => '구매자 이메일', 'rules' => 'required|trim|valid_email',),
array('field' => 'payment_uid', 'label' => '주문번호', 'rules' => 'required|trim|is_natural_no_zero',),
array('field' => 'good_name', 'label' => '상품명', 'rules' => 'required|trim',),
array('field' => 'price', 'label' => '구매자 이메일', 'rules' => 'required|trim|is_natural_no_zero',),
);
public $PG_ROOT = null;
public $INIPAY = FALSE;
public $_pgCompany = 'inicis';
public $_pgCommand = FALSE;
public $_pgDefaultParams = array();
public $_pgParams = array();
public function __construct()
{
$CI =& get_instance();
$this->PG_ROOT = dirname(__FILE__) . '/inicis/INIformbill41';
}
public function setPG()
{
$paymethod = NULL;
$quotainterest = NULL;
require_once $this->PG_ROOT . '/sample/INIpay41Lib.php';
$this->INIPAY = new INIpay41;
return $this->INIPAY;
}
public function setCommand($pgCommand = FALSE)
{
$this->_pgCommand = FALSE;
if (empty($pgCommand)) return FALSE;
switch ($pgCommand) {
case('bill'): // 빌링
$this->_pgCommand = "formauth";
break;
case('pay'): // 빌링 결제
$this->_pgCommand = "reqrealbill";
break;
default: // 상기 지불수단 외 추가되는 지불수단의 경우 기본으로 paymethod가 4자리로 넘어온다.
$this->_pgCommand = method_exists($this, $pgCommand) == TRUE ? $pgCommand : null;
}
return $this->_pgCommand;
}
public function getCommand()
{
return $this->_pgCommand;
}
public function setDefaultParams($pgDefaultParams = null, $test)
{
$paramsKey = array(
'm_url' => 'home_url', // 홈페이지 결제시에만 사용
'm_currency' => 'currency', // 화폐단위 WON : 원화결제일 경우 USD : 달러결제일 경우
'm_authentification' => 'auth_user', // 본인인증여부 (00-YES)
'm_inipayHome' => 'pg_module_path', // 이니페이 홈디렉터리 NULL입력시 자동입력
'm_subPgIp' => FALSE, // 고정(절대 수정금지)
'm_debug' => 'debug', // 디버그
'm_keyPw' => 'pg_mid_password', // 키패스워드(상점아이디에 따라 변경)
'm_mid' => 'pg_mid', // 상점아이디
'm_merchantReserved3' => 'acceptmethod', // 사용옵션
);
$paramsTemp = array();
foreach ($paramsKey as $k => $v) {
if (isset($pgDefaultParams[$v])) $paramsTemp[$k] = $pgDefaultParams[$v];
}
if($test){
$paramsTemp['m_mid'] = 'INIBillTst';
$paramsTemp['m_keyPw'] = '1111';
}
$paramsTemp['m_subPgIp'] = '203.238.3.10';
if (empty($paramsTemp['m_inipayHome'])) {
$paramsTemp['m_inipayHome'] = $this->PG_ROOT;
}
$this->_pgDefaultParams = array_merge($this->_pgDefaultParams, $paramsTemp);
return $this->_pgDefaultParams;
}
public function purgeParams()
{
$this->_pgCommand = array();
}
public function setParams($pgParams = null)
{
if (empty($this->_pgCommand)) return FALSE;
if (is_array($this->_pgParams) == false) $this->_pgParams = array();
$params_keys = array(
'formauth' => array(
'm_type' => FALSE, // 고정(절대 수정금지)
'm_pgId' => FALSE, // 고정(절대 수정금지)
'm_payMethod' => FALSE, // 결제방법(절대 수정금지)
'm_billtype' => FALSE, // 결제방법(절대 수정금지)
'm_url' => 'home_url', // 홈페이지
'm_price' => 'price', // 금액
'm_buyerName' => 'buyer_name', // 구매자명
'm_cardNumber' => 'card_number', // 신용카드번호
'm_authentification' => 'auth_user', // 본인인증여부 (00-YES)
'm_authfield1' => 'auth_field1', // 생년월일
'm_authfield2' => 'auth_field2', // 신용카드 비밀번호 앞 2자리
'm_cardExpy' => 'card_exp_year', // 신용카드 유효기간-년 (YY)
'm_cardExpm' => 'card_exp_month', // 신용카드 유효기간-월 (MM)
),
'reqrealbill' => array(
'm_type' => FALSE, // 고정(절대 수정금지)
'm_pgId' => FALSE, // 고정(절대 수정금지)
'm_payMethod' => FALSE, // 결제방법
'm_billtype' => FALSE, // 결제방법(절대 수정금지)
'm_merchantReserved3' => 'acceptmethod', // 사용옵션 1000원 미만
'm_url' => 'home_url', // 홈페이지
'm_currency' => 'currency', // 화폐단위
'm_quotaInterest' => 'quotaInterest', // 무이자할부여부 (1-YES)
'm_cardQuota' => 'card_quota', // 할부개월
'm_billKey' => 'bill_key', // Billing 결제요청을 위한 key
'm_cardpass' => 'card_password', // 신용카드 비밀번호 앞 2자리
'm_authentification' => 'auth_user', // 본인인증여부 (00-생년월일필수)
'm_regNumber' => 'reg_number', // 생년월일6자리(사업자 번호)
'm_buyerName' => 'buyer_name', // 구매자명
'm_buyerTel' => 'buyer_phone', // 구매자 이동전화번호
'm_buyerEmail' => 'buyer_email', // 구매자 이메일
'm_uid' => 'payment_uid', // 상점 주문번호
'm_goodName' => 'good_name', // 상품명
'm_price' => 'price', // 금액
),
'cancel' => array(
'm_type' => FALSE, // 고정(절대 수정금지)
'm_tid' => 'pg_code2', // 취소할 거래의 거래아이디
'm_cancelMsg' => 'cancel_msg' //
)
);
$paramsKey = $params_keys[$this->_pgCommand];
$paramsTemp = array();
foreach ($paramsKey as $k => $v) {
if (isset($pgParams[$v]) && $v !== NULL && $v !== FALSE) {
$paramsTemp[$k] = $pgParams[$v];
}
}
if ($this->_pgCommand == 'formauth') {
$paramsTemp['m_type'] = 'formauth_bill';
$paramsTemp['m_pgId'] = 'INIpayBill';
$paramsTemp['m_payMethod'] = 'Auth';
$paramsTemp['m_billtype'] = 'Card';
} elseif ($this->_pgCommand == 'reqrealbill') {
$paramsTemp['m_type'] = 'reqrealbill';
$paramsTemp['m_pgId'] = 'INIpayBill';
$paramsTemp['m_payMethod'] = 'Card';
$paramsTemp['m_billtype'] = 'Card';
} else if ($this->_pgCommand == 'cancel') {
$paramsTemp['m_type'] = 'cancel';
}
$this->_pgParams = array_merge($this->_pgParams, $paramsTemp);
}
public function run($pgCommand = null, $pgParams = null)
{
if (!is_object($this->INIPAY)) $this->INIPAY = $this->setPG();
if (!empty($pgCommand)) {
$this->setCommand($pgCommand);
}
if (empty($this->_pgCommand)) return false;
if (!empty($pgParams) && is_array($pgParams)) {
$this->setParams($pgParams);
}
if (empty($this->_pgParams)) return false;
return call_user_func(array($this, $this->_pgCommand));
}
public function cancel($pgParams = null)
{
if (!empty($pgParams) && is_array($pgParams)) {
$this->setParams($pgParams);
}
if (empty($this->_pgParams)) return false;
$this->assign_params($this->_pgParams);
ob_start();
$this->INIPAY->startAction();
ob_clean();
$result = $this->sanitize_result();
return $result;
}
public function formauth($pgParams = null)
{
if (!empty($pgParams) && is_array($pgParams)) {
$this->setParams($pgParams);
}
if (empty($this->_pgParams)) return false;
$this->assign_params($this->_pgParams);
ob_start();
$this->INIPAY->startAction();
ob_clean();
$result = $this->sanitize_result();
return $result;
}
public function reqrealbill($pgParams = null)
{
if (!empty($pgParams) && is_array($pgParams)) {
$this->setParams($pgParams);
}
if (empty($this->_pgParams)) return false;
$this->assign_params($this->_pgParams);
ob_start();
$this->INIPAY->startAction();
ob_clean();
$result = $this->sanitize_result();
return $result;
}
public function assign_params($params = null)
{
if (!is_object($this->INIPAY)) $this->INIPAY = $this->setPG();
if (!empty($pgParams) && is_array($pgParams)) {
$this->setParams($pgParams);
}
if (empty($this->_pgParams) or !is_array($this->_pgParams)) return false;
if (empty($this->_pgDefaultParams) or !is_array($this->_pgDefaultParams)) return false;
$params = array_merge($this->_pgDefaultParams, $this->_pgParams);
foreach ($params as $k => $v) {
$this->INIPAY->{$k} = iconv('UTF-8', 'EUC-KR', $v);
}
}
public function sanitize_result()
{
if (!is_object($this->INIPAY)) $this->INIPAY = $this->setPG();
$resultKeys = array(
'formauth' => array(
'm_tid' => 'pg_code2', // 거래번호
'm_resultCode' => 'pg_code1', // 결과코드 ("00"이면 결제 성공)
'm_resultMsg' => 'pg_msg', // 결과내용 (결제결과에 대한 설명)
'm_billKey' => 'bill_key', // 빌링키
'm_cardCode' => 'pg_card_code', // 신용카드사 코드 (매뉴얼 참조)
'm_authCertain' => 'pg_auth_certain', // 본인인증 수행여부("00"이면 수행) (비정상 여부 확인)
'm_authCode' => 'pg_auth_code', // 신용카드 승인번호
'm_pgAuthDate' => 'pg_auth_date', // 이니시스 승인날짜 (YYYYMMDD)
'm_pgAuthTime' => 'pg_auth_time', // 이니시스 승인시각 (HHMMSS)
'm_cardPass' => 'card_password', // 카드 비밀번호 앞 두자리
'm_cardKind' => 'card_kind', // 카드종류(개인-0,법인-1)
),
'reqrealbill' => array(
'm_tid' => 'pg_code2', // 거래번호
'm_resultCode' => 'pg_code1', // 결과코드 ("00"이면 결제 성공)
'm_resultMsg' => 'pg_msg', // 결과내용 (결제결과에 대한 설명)
'm_authCode' => 'pg_auth_code', // 신용카드 승인번호
'm_cardCode' => 'pg_card_code', // 신용카드사 코드 (매뉴얼 참조)
'm_cardIssuerCode' => 'pg_cardissuer_code', // 카드발급사 코드 (매뉴얼 참조)
'm_authCertain' => 'pg_auth_certain', // 본인인증 수행여부("00"이면 수행)
'm_pgAuthDate' => 'pg_auth_date', // 이니시스 승인날짜 (YYYYMMDD)
'm_pgAuthTime' => 'pg_auth_time', // 이니시스 승인시각 (HHMMSS)
// 'm_ocbSaveAuthCode'=>'pgOKCashbagSaveAuthCode', // OK Cashbag 적립 승인번호
// 'm_ocbUseAuthCode'=>'pgOKCashbagUseAuthCode', // OK Cashbag 사용 승인번호
// 'm_ocbAuthDate'=>'pgOKCashbagAuthDate', // OK Cashbag 승인일시 (YYYYMMDDHHMMSS)
// 'm_eventFlag'=>'pgEventFlag', // 각종 이벤트 적용 여부
),
'cancel' => array(
'm_tid' => 'pg_code2', // 거래번호
'm_resultCode' => 'pg_code1', // 결과코드 ("00"이면 결제 성공)
'm_resultMsg' => 'pg_msg', // 결과내용 (결제결과에 대한 설명)
'm_pgCancelDate' => 'pg_cancel_date', // 신용카드 승인번호
'm_pgCancelTime' => 'pg_cancel_time', // 신용카드사 코드 (매뉴얼 참조)
'm_rcash_cancel_noappl' => 'pg_rcash_cancel_noappl', // 현금영수증 취소 승인번호 (현금영수증 발급 취소시에만 리턴됨)
)
);
$commandResult = $resultKeys[$this->_pgCommand];
$result = array();
foreach ($commandResult as $k => $v) {
$result[$v] = isset($this->INIPAY->{$k}) ? iconv('EUC-KR', 'UTF-8', $this->INIPAY->{$k}) : FALSE;
// $result[$v] = isset($this->INIPAY->{$k})?$this->INIPAY->{$k}:FALSE;
}
if (isset($result['pg_card_code'])) {
$cardCodeKey = array(
'01' => '외환',
'03' => '롯데',
'04' => '현대',
'06' => '국민',
'11' => 'BC',
'12' => '삼성',
'13' => 'LG',
'14' => '신한',
'15' => '한미',
'16' => 'NH',
'17' => '하나 SK 카드',
'21' => '해외비자',
'22' => '해외마스터',
'23' => 'JCB',
'24' => '해외아멕스',
'25' => '해외다이너스'
);
$result['pg_card_code_name'] = isset($cardCodeKey[$result['pg_card_code']]) ? $cardCodeKey[$result['pg_card_code']] : '기타';
}
return $result;
}
// 이니시스 사용가능여부 체크
public function is_supported()
{
$required_extensions = array('mcrypt', 'sockets', 'xml', 'openssl', 'iconv');
foreach ($required_extensions as $ext_name) {
if (!extension_loaded($ext_name)) {
log_message('debug', 'Paymentgateway driver "' . $this->_pg_driver . '" "' . $ext_name . '" extension not loaded.');
return FALSE;
}
}
return TRUE;
}
}
7-15. bill(빌링키 생성) 검증 룰 17-35 pay(결제) 검증 룰 -- 추가설명 수정중 application/libraries/Paymentgateway/drivers/inicis/INIformpay41 이니시스 INIformpay41 모듈 복사및 퍼미션
추가 드라이버 를 만든다면 다시 올리도록 하겠습니다. |
|||
| 다음글 | 4월 9일 MS Community Open Camp 발... (3) | ||
| 이전글 | [ci 드라이버] 한국 pg(결제) 드라이버 만들기 (... (4) | ||
|
한대승(불의회상)
/
2016/02/19 12:59:49 /
추천
0
|
|
쌈닭
/
2016/02/23 17:32:56 /
추천
0
감사합니다... 드라이버는...사랑입니다... |
|
누구야
/
2016/03/21 12:22:05 /
추천
0
좋은 강의입니다 잘 봤습니다!! |
|
fazi
/
2020/08/23 03:41:48 /
추천
0
Hi, I'm trying to create this driver in my codeignitor site, but I didn't find 이니시스 INIformpay41 모듈 복사및 퍼미션. Can anyone here help me |
|
변종원(웅파)
/
2020/08/24 10:33:39 /
추천
0
fazi/ Payment module must be requested from INICIS. :) |
좋은 강의 감사 합니다.
기대하고 있겠습니다. ^^