[이니시스/PG] Mobile 모듈 붙이기

2018. 9. 12. 11:11PHP

반응형


1. 이니시스 INIpay(Mobile) 다운로드 받기

 

2. 압축풀기 

     - inicis.com\INIpay(Mobile)\INIpayMobile_WEBmanual\Mobile Sample

 

3. INIpayMobile_Sample.html 모듈 요청페이지를 커스터마이징(form 요청, input 값 셋팅)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<form id="form1" name="ini" method="post" action="" accept-charset="EUC-KR">
         <input type="hidden" name="inipaymobile_type" value="web" />    <!-- 기본값 -->
         <input type="hidden" name="paymethod" value="wcard" />           <!-- 결제방법 -->
         <input type="hidden" name="P_MID" value="<?=$mid?>" />          <!-- 이니시스 에서 발급받은 mid 값 -->
         <input type="hidden" name="P_OID" value="<?=$P_OID?>" />        <!-- 상점에서 생성한 주문번호 -->
         <input type="hidden" name="P_AMT" value="<?=$nTotalPrice?>" />  <!-- 상품결제요청 가격 -->
         <input type="hidden" name="P_UNAME" value="<?=$strArrUser[0]['user_nm']?>" />   <!-- 결제요청 user 이름 -->
         <input type="hidden" name="P_MNAME" value="store" />                            <!-- 상점이름 -->
         <input type="hidden" name="P_NOTI" value="<?=$P_NOTI?>" />                      <!-- 인증 성공시 가맹점으로 리턴변수(개발자 개인변수) -->
         <input type="hidden" name="P_GOODS" value="<?=$strGoodsName?>" />               <!-- 상품이름 -->
         <input type="hidden" name="P_MOBILE" value="" />                                <!-- 결제요청 user 전화번호 -->
         <input type="hidden" name="P_EMAIL" value="<?=$strArrUser[0]['email']?>" />     <!-- user 메일 -->
         <input type="hidden" name="P_HPP_METHOD" value="2">                             <!-- 휴대폰 결제일때 컨텐츠/실물 여부 -->
         <input type="hidden" name="P_RESERVED" value="twotrs_isp=Y&block_isp=Y&twotrs_isp_noti=N&ismart_use_sign=Y&vbank_receipt=Y&bank_receipt=N&apprun_check=Y" />  <!-- 결제옵션 파라미터 -->
         <input type="hidden" name="P_NEXT_URL" value="<?=$_SERVER['REQUEST_SCHEME']?>://<?=$config['domain']?>/order_inicis_step1.php" />   <!-- 결제요청 처리 url -->
</form>
 
<script>
jQuery(document).ready( function() {
            // 결제버튼 클릭시
            jQuery('.btn-join').click( function() {
                  on_web();
            } );
} );
function on_web() {
         var order_form = document.ini;
         var paymethod = order_form.paymethod.value;
         order_form.action = "https://mobile.inicis.com/smart/Viewer" + paymethod + "/";
         order_form.submit();
}
</script>

 

5. 결제완료시 P_NEXT_URL 변수에 있는 url로 이동후 처리(order_inicis_step1.php)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
$P_STATUS = $_REQUEST['P_STATUS'];
$P_REQ_URL = $_REQUEST['P_REQ_URL'];
$P_TID = $_REQUEST['P_TID'];
$P_MID = !isset($_REQUEST['P_MID']) ? 'INIpayTest' : $_REQUEST['P_MID'];
$oP_NOTI = json_decode(mb_convert_encoding(str_replace("'",'"', stripslashes($_REQUEST['P_NOTI'])), 'UTF-8', 'EUC-KR'));
 
// 성공이 아닐경우
if( $P_STATUS != '00' ) {
         //echo '주문이 실패하였습니다! 관리자에게 문의해주세요!(9)';
         return;
}
 
// 메세지 utf-8 치환
$_REQUEST['P_RMESG1'] = iconv('EUC-KR', 'UTF-8', $_REQUEST['P_RMESG1']);
// sql에 넣을 배열 생성
$strArrFirstPGReq = $_REQUEST;
$strArrFirstPGReq['P_NOTI'] = mb_convert_encoding(stripslashes($_REQUEST['P_NOTI']), 'UTF-8', 'EUC-KR');
 
// 쓰지않는 컬럼삭제
unset($strArrFirstPGReq['P_REQ_URL']);
unset($strArrFirstPGReq['P_OID']);
// filed 생성
$strPGFiled = strtolower(implode(', ', array_keys($strArrFirstPGReq)));
// value 생성
$strPGValue  = '"';
$strPGValue .= implode('","', array_values($strArrFirstPGReq));
$strPGValue .= '"';
 
// 기승인 TID 여부 확인
$strArrPG = sql_fetch('SELECT * FROM pg_mobile WHERE user_id = ? AND p_tid = ?', array($oP_NOTI->user_id, $P_TID), 0);
 
if( count($strArrPG) >= 1 ) {
         //echo '이미 주문접수가 되어있습니다! 다시시도해주세요! (10)';
         return;
}
 
$oDBConnect->beginTransaction();
try {
 
         //*******************************************
         //  pg_mobile 저장 & pg기승인 START
         //*******************************************
 
         // 기승인된 TID 를 DB 에 저장
         $strPGSql  = "INSERT INTO pg_mobile (user_id, $strPGFiled, p_oid, cret_id, cret_ip, cret_dtm) ";
         $strPGSql .= "VALUES (?, $strPGValue, ?, ?, ?, ?)";
         $oResult = sql_query($strPGSql, array( $oP_NOTI->user_id, $oP_NOTI->P_OID, $oP_NOTI->user_id, $config['ip'], $config['date3'] ));
 
         if( $oResult->errorInfo()[0] != 0000 ) {
                  throw new Exception('주문이 실패하였습니다! 관리자에게 문의해주세요!(1)');
         }
 
         // 데이터 수신
         $output = array();
         $params = array( 'P_TID' => $P_TID, 'P_MID' => $P_MID );
         $r = request_curl($_REQUEST['P_REQ_URL'], 1, $params);
         parse_str($r[0], $output);
 
         // 글자 utf-8로 변경
         if( !empty($output['P_RMESG1']) ) $output['P_RMESG1'] = iconv('EUC-KR', 'UTF-8', $output['P_RMESG1']);
         if( !empty($output['P_UNAME']) ) $output['P_UNAME'] = iconv('EUC-KR', 'UTF-8', $output['P_UNAME']);
         if( !empty($output['P_VACT_NAME']) ) $output['P_VACT_NAME'] = iconv('EUC-KR', 'UTF-8', $output['P_VACT_NAME']);
         if( !empty($output['P_FN_NM']) ) $output['P_FN_NM'] = iconv('EUC-KR', 'UTF-8', $output['P_FN_NM']);
         if( !empty($output['P_CARD_ISSUER_NAME']) ) $P_CARD_ISSUER_NAME = iconv('EUC-KR', 'UTF-8', $output['P_CARD_ISSUER_NAME']);
         if( !empty($output['P_CARD_PURCHASE_NAME']) ) $P_CARD_PURCHASE_NAME = iconv('EUC-KR', 'UTF-8', $output['P_CARD_PURCHASE_NAME']);
 
         // 데이터수신이 성공인지
         if( $output['P_STATUS'] != '00' ) {
                  throw new Exception('주문이 실패하였습니다! 관리자에게 문의해주세요!(2)');
         }
 
         // 셋팅된 가격과 결제금액이 맞는지 체크
         if( $output['P_AMT'] != $oP_NOTI->prn_s ) {
                  throw new Exception('가격에 오류가 있습니다! 관리자에게 문의해주세요!(2-1)');
         }
 
         // 필요없는 데이터 삭제
         unset($output['P_TID']);
         unset($output['P_OID']);
         unset($output['P_NOTI']);
         unset($output['P_CARD_ISSUER_NAME']);
         unset($output['P_CARD_PURCHASE_NAME']);
         unset($output['P_CARD_APPLPRICE']);
         unset($output['P_APPL_NUM']);
 
         $strPGUpdateSql = '';
         foreach( $output as $key => $val ) {
                  $strPGUpdateSql .= strtolower($key)."='".$val."', ";
         }
         $strPGUpdateSql = substr($strPGUpdateSql, 0, -2);
 
         $strPGSql  = "UPDATE pg_mobile SET $strPGUpdateSql ";
         $strPGSql .= "WHERE user_id = ? AND p_tid = ? AND p_oid = ?";
         $oResult = sql_query($strPGSql, array($oP_NOTI->user_id, $P_TID, $oP_NOTI->P_OID));
 
         //echo $strPGSql;
         if( $oResult->errorInfo()[0] != 0000 ) {
                  throw new Exception('주문이 실패하였습니다! 관리자에게 문의해주세요!(3)');
         }
 
         //*******************************************
         //  pg_mobile 저장 & pg기승인 END
         //*******************************************
 
         //*******************************************
         //  주문테이블에 주문서 집어넣기 START
         //*******************************************
 
 
         // order에 주문서 insert
         $strOrderSql  = "INSERT INTO order ($strFileds, cret_id, cret_ip, cret_dtm) ";
         $strOrderSql .= "VALUES ($strValues, ?, ?, ?)";
         $oResult  = sql_query($strOrderSql, array( $oP_NOTI->user_id, $config['ip'], $config['date3'] ));
 
         if( $oResult->errorInfo()[0] != 0000 ) {
                  throw new Exception('주문이 실패하였습니다! 관리자에게 문의해주세요!(4)');
         }
 
         // order_item 에 아이템 insert
         $nArrGoodsEa = explode('|', $oP_NOTI->ea);
         $nArrDeliveryPrice = explode('|', $oP_NOTI->d_price);
         $nArrDeliveryType = explode('|', $oP_NOTI->d_type);
         foreach( explode('|', $oP_NOTI->goods_id) as $key => $val ) {
 
                  $strOrderSql  = "INSERT INTO order_item ($strFileds, cret_id, cret_ip, cret_dtm) ";
                  $strOrderSql .= "VALUES ($strValues, ?, ?, ?)";
                  $oResult  = sql_query($strOrderSql, array( $oP_NOTI->user_id, $config['ip'], $config['date3'] ));
 
                  if( $oResult->errorInfo()[0] != 0000 ) {
                           throw new Exception('주문이 실패하였습니다! 관리자에게 문의해주세요!(5)');
                  }
 
                  // order_item_option 에 아이템 insert
                  // Todo...
                  // ....
                  // ....
 
 
                  // order_delivery 에 배송정보 insert
                  $strOrderSql  = "INSERT INTO order_delivery ($strFileds, cret_id, cret_ip, cret_dtm) ";
                  $strOrderSql .= "VALUES ($strValues, ?, ?, ?)";
                  $oResult  = sql_query($strOrderSql, array( $oP_NOTI->user_id, $config['ip'], $config['date3'] ));
 
                  if( $oResult->errorInfo()[0] != 0000 ) {
                           throw new Exception('주문이 실패하였습니다! 관리자에게 문의해주세요!(6)');
                  }
 
         }
 
         //*******************************************
         //  주문테이블에 주문서 집어넣기 END
         //*******************************************
 
 
         $oDBConnect->commit();
 
} catch( Exception $e ) {
         $oDBConnect->rollBack();
         //echo $e->getMessage();
         echo "<script>alert('".$e->getMessage()."');location.replace('../index.php');</script>";
         return;
}
 
// 가상계좌 일경우 가상계좌안내 페이지로 이동
if( $nPtype == 3 ) {
         /*
         echo '*****가상계좌 안내*****';
         echo '계좌번호 : ' . $output['P_VACT_NUM'];
         echo '입금마감일자 : ' . $output['P_VACT_DATE'];
         echo '입금마감시간 : ' . $output['P_VACT_TIME'];
         echo '계좌주명 : ' . $output['P_VACT_NAME'];
         echo '은행 : ' . getBankName($output['P_VACT_BANK_CODE']);
         echo '결제금액 : ' . $output['P_AMT'];
         */
         require_once './order_finish.php';
 
// 신용카드 일경우 결제완료 페이지로 이동
} else if( $nPtype == 1 ) {
         /*
         echo '*****결제승인 안내*****';
         echo '결제카드 : ' . $P_CARD_ISSUER_NAME;
         echo '카드번호 : ' . $output['P_CARD_NUM'];
         echo 'PG승인번호 : ' . $output['P_AUTH_NO'];
         echo 'PG승인카드번호 : ' . $output['P_ISP_CARDCODE'];
         echo 'PG승인시각 : ' . $output['P_AUTH_DT'];
         echo '결제금액 : ' . $output['P_AMT'];
         */
         require_once './pay_finish.php';
// 휴대폰 일경우 결제완료 페이지로 이동
} else if( $nPtype == 4 ) {
         /*
         echo '*****결제승인 안내*****';
         echo '결제통신사 : ' . $output['P_HPP_CORP'];
         echo '결제번호 : ' . $output['P_HPP_NUM'];
         echo '결제금액 : ' . $output['P_AMT'];
         */
         require_once './pay_finish.php';
}

 


출처 : http://lemon421.cafe24.com/blog/textyle/1625

반응형