[이니시스/PG] Mobile 모듈 붙이기
2018. 9. 12. 11:11ㆍPHP
반응형
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/" + 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
반응형
'PHP' 카테고리의 다른 글
PHP의 php.ini 설정에서 register_globals = on/off 차이 (0) | 2018.09.14 |
---|---|
form utf-8 -> euc-kr 로 변환하여 전송 post php/asp (0) | 2018.09.12 |
php 상에 curl 라이브러리가 설치되어야 사용가능한 기능 (0) | 2018.09.12 |
페이팔로 결제를 요청할 전송 폼 만들기 (0) | 2018.09.07 |
PHP 날짜 계산 정리 (0) | 2018.08.30 |