itsolution/module/shop/pg/agspay/lib/AGSMobile.php
2021-10-26 18:21:20 +09:00

612 lines
22 KiB
PHP

<?
require_once("JSONFunc.php");
define('AGSHOST','https://www.allthegate.com');
class AGSMobile {
var $tracking_id = "";
var $transaction = "";
var $store_id = "";
var $tracking_info = array();
var $logging = false;
var $logfile = null;
var $log_path = null;
var $ispCardNm = "";
var $netCancelId = "";
function AGSMobile() {
$args= func_get_args();
call_user_func_array
(
array(&$this, '__construct'),
$args
);
}
function __construct($store_id , $tracking_id , $transaction, $log_path) {
$this->store_id = $store_id;
$this->tracking_id = $tracking_id;
$this->transaction = $transaction;
$this->log_path = $log_path;
$this->tracking_info = $this->callApi(
AGSHOST."/payment/mobilev2/transaction/tracking.jsp",
array(
"storeID"=>$this->store_id,
"trackingID"=>$this->tracking_id
)
);
$this->log($this->tracking_info);
$this->tracking_info = json_decode($this->tracking_info,true);
}
function setLogging($b) {
$this->logging = $b;
}
function log($str) {
if($this->logging){
$path = $this->log_path;
$folder_path = "";
if($path == null){
$path = "/log";
}
$folder = dirname(__FILE__).$path;
if (!@file_exists($folder)) {
@mkdir($folder);
}
if (!$this->logfile ) {
$this->logfile = @fopen($folder."/".date("Y-m-d").".log","a");
if (!$this->logfile) {
die($folder."/".date("Y-m-d").".log 파일을 생성할 수 없습니다");
}
}
if ($this->logfile && $this->logging) {
$str = date("Y-m-d H:i:s")."==>".$str."\n";
@fwrite($this->logfile,$str);
}
}else {
if ($this->logfile) {
@fclose($this->logfile);
}
}
}
function getTrackingInfo() {
return $this->tracking_info;
}
function callApi($url , $params) {
$query = "";
foreach($params as $key => $value) {
$query .= $key."=".$value;
$query .= "&";
}
$nurl = $url . "?" . $query;
$this->log($nurl);
if(function_exists('curl_version')) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $nurl);
curl_setopt($ch, CURLOPT_TIMEOUT, 90);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 90 );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'AGSMobile 2.0');
$str = curl_exec($ch);
curl_close($ch);
}else {
$str = file_get_contents($nurl);
}
return $str;
}
function approve() {
$ret = array(
"status"=>"error",
"message"=>"알 수 없는 에러"
);
$data = array(
);
switch($this->transaction) {
/* virtual */
case "virtual" : {
$ret["paytype"]= "virtual";
$html = $this->callApi(
AGSHOST."/payment/mobilev2/transaction/virtual.jsp",
array(
"storeID"=>$this->store_id,
"trackingID"=>$this->tracking_id,
"type"=>"approve"
)
);
$this->log($html);
if ($html) {
$json = json_decode($html,true);
if (!is_array($json) || !isset($json['code'])) {
return $ret;
}
if ($json['code'] == 400) {
$ret["message"] = $json['message'];
$ret["status"] = "error";
return $ret;
}
$json = $json['data'];
if ($json['Success'] != "y") {
$ret["status"]="error";
$ret["message"]=$json['ResMsg'];
$ret["data"]=null;
}else {
$ret["status"]="ok";
$ret["message"]="ok";
$ret["data"]=array(
//아래는 전 승인 공통..
"AuthTy" => $json['AuthTy'],
"SubTy" => $json['SubTy'],
"NetCancelId" => $json['NetCancelId'],
"StoreId" => $json['StoreId'],
"OrdNo" => $json['OrdNo'],
"Amt" => $json['Amt'],
"EscrowYn"=> $json['EscrowYn'],
"NoInt" => $json['DeviId'] == "9000400002" ? "y" : "n",
"EscrowSendNo" => $json['EscrowSendNo'],
"VirtualNo" => $json['VirtualNum'], // 입금계좌번호(가상계좌번호)
"BankCode" => $json['BankCode'], // 입금은행코드
"SuccessTime" => $json['SuccessTime'], // 승인일자
"DueDate" => $json['DueDate'] // 승인일자
);
}
}
};break;
/* hp */
case "hp" : {
$ret["paytype"]= "hp";
$html = $this->callApi(
AGSHOST."/payment/mobilev2/transaction/phone.jsp",
array(
"storeID"=>$this->store_id,
"trackingID"=>$this->tracking_id,
"type"=>"approve"
)
);
$this->log($html);
if ($html) {
$json = json_decode($html,true);
if (!is_array($json) || !isset($json['code'])) {
return $ret;
}
if ($json['code'] == 400) {
$ret["message"] = $json['message'];
$ret["status"] = "error";
return $ret;
}
$json = $json['data'];
if ($json['Success'] != "y") {
$ret["status"]="error";
$ret["message"]=$json['ResMsg'];
$ret["data"]=null;
}else {
$ret["status"]="ok";
$ret["message"]="ok";
$this->netCancelId = $json['NetCancelId'];
$ret["data"]=array(
"AuthTy" => $json['AuthTy'],
"SubTy" => $json['SubTy'],
"NetCancelId" => $json['NetCancelId'],
"StoreId" => $json['StoreId'],
"OrdNo" => $json['OrdNo'],
"Amt" => $json['Amt'],
"EscrowYn"=> $json['EscrowYn'],
"NoInt" => $json['DeviId'] == "9000400002" ? "y" : "n",
"AdmTID" => $json['HpTid'], // 결제TID
"PhoneCompany" => $json['HpCompany'], // 통신사
"Phone" => $json['HpNumber'] // 핸드폰 번호
);
}
}
};break;
/* kmpi */
case "kmpi" :
case "ansim" :
case "xansim" :
{
$ret["paytype"]= "card";
$html = $this->callApi(
AGSHOST."/payment/mobilev2/transaction/ansim.jsp",
array(
"storeID"=>$this->store_id,
"trackingID"=>$this->tracking_id,
"type"=>"approve"
)
);
$this->log($html);
if ($html) {
$json = json_decode($html,true);
if (!is_array($json) || !isset($json['code'])) {
return $ret;
}
if ($json['code'] == 400) {
$ret["message"] = $json['message'];
$ret["status"] = "error";
return $ret;
}
$json = $json['data'];
if ($json['Success'] != "y") {
$ret["status"]="error";
$ret["message"]=$json['FailReason'];
$ret["data"]=null;
}else {
$ret["status"]="ok";
$ret["message"]="ok";
$this->netCancelId = $json['NetCancelId'];
$ret["data"]=array(
"AuthTy" => $json['AuthTy'],
"SubTy" => $json['SubTy'],
"NetCancelId" => $json['NetCancelId'],
"StoreId" => $json['StoreId'],
"OrdNo" => $json['OrdNo'],
"Amt" => $json['Amt'],
"EscrowYn"=> $json['EscrowYn'],
"NoInt" => $json['DeviId'] == "9000400002" ? "y" : "n",
"EscrowSendNo" => $json['EscrowSendNo'],
"BusiCd" => $json['Code'], // 전문코드
"AdmNo" => $json['AdmNo'], // 승인번호
"AdmTime" => $json['AdmTime'], // 승인시각
"CardCd" => $json['CardType'], // 카드사코드
"CardNm" => $json['CardName'], // 카드사명
"DealNo" => $json['SendNo'], // 거래번호
"PartialMm" => $json["CardPartialMm"]
);
}
}
};break;
/* isp */
case "isp" : {
$ret["paytype"]= "card";
$html = $this->callApi(
AGSHOST."/payment/mobilev2/transaction/isp.jsp",
array(
"storeID"=>$this->store_id,
"trackingID"=>$this->tracking_id,
"type"=>"approve"
)
);
$this->log($html);
if ($html) {
$json = json_decode($html,true);
if (!is_array($json) || !isset($json['code'])) {
return $ret;
}
if ($json['code'] == 400) {
$ret["message"] = $json['message'];
$ret["status"] = "error";
return $ret;
}
$json = $json['data'];
if ($json['Success'] != "y") {
$ret["status"]="error";
$ret["message"]=$json['FailReason'];
$ret["data"]=null;
}else {
$ret["status"]="ok";
$ret["message"]="ok";
/*
변수명에 맞게 json에서 뽑아와서 data에 세팅해야함..
이 때 들어갈 data는 12개의 인자를 리턴함
나머지 필요한 정보들은 tracking_info 에서 꺼내세요.
*/
$this->netCancelId = $json['NetCancelId'];
$ret["data"]=array(
//아래는 전 승인 공통..
"AuthTy" => $json['AuthTy'],
"SubTy" => $json['SubTy'],
"NetCancelId" => $json['NetCancelId'],
"StoreId" => $json['StoreId'],
"OrdNo" => $json['OrdNo'],
"Amt" => $json['Amt'],
"EscrowYn"=> $json['EscrowYn'],
"NoInt" => $json['DeviId'] == "9000400002" ? "y" : "n",
"EscrowSendNo" => $json['EscrowSendNo'],
"BusiCd" => $json['Code'], // 전문코드
"AdmNo" => $json['AdmNo'], // 승인번호
"AdmTime" => $json['AdmTime'], // 승인시각
"CardCd" => $json['CardType'], // 카드사코드
"CardNm" => $json['CardName'], // 카드사명
"DealNo" => $json['SendNo'], // 거래번호
"PartialMm" => $json["CardPartialMm"]
);
}
}
}break;
/* type default */
default : {
$this->log("결제 타입이 잘 못 되었습니다." . $this->transaction);
$ret["message"] = "결제 타입 에러";
$ret["status"] = "error";
}break;
}
return $ret;
}
function forceCancel() {
return $this->cancel("","","",$this->netCancelId);
}
function cancel($AdmNo, $AdmDt, $SendNo, $NetCancID = "") {
$ret = array(
"status"=>"error",
"message"=>"알 수 없는 에러"
);
$data = array(
);
switch($this->transaction) {
/* ansim, xansim, kmpi */
case "ansim" :
case "xansim" :
case "kmpi" :
{
$ret["paytype"]= "card";
$html = $this->callApi(
AGSHOST."/payment/mobilev2/transaction/ansim.jsp",
array(
"storeID"=>$this->store_id,
"trackingID"=>$this->tracking_id,
"admNo"=>$AdmNo,
"sendNo"=>$SendNo,
"admDt"=>$AdmDt,
"NetCancelId"=>$NetCancID,
"type"=>"cancel"
)
);
$this->log($html);
if ($html) {
$json = json_decode($html,true);
if (!is_array($json) || !isset($json['code'])) {
return $ret;
}
if ($json['code'] == 400) {
$ret["message"] = $json['message'];
$ret["status"] = "error";
return $ret;
}
$json = $json['data'];
if ($json['Success'] != "y") {
$ret["status"]="error";
$ret["message"]=$json['FailReason'];
$ret["data"]=null;
}else {
$ret["status"]="ok";
$ret["message"]="ok";
$ret["data"]=array(
"StoreId" => $json['StoreId'], // 업체ID
"AdmNo" => $json['AdmNo'], // 승인번호
"AdmTime" => $json['DealTime'], // 승인시각
"Code" => $json['Code'] // S000 : 성공, S001 : 기처리(이미처리된건), E999 : 기타오류.
);
}
}
};break;
/* isp */
case "isp" : {
$ret["paytype"]= "card";
$html = $this->callApi(
AGSHOST."/payment/mobilev2/transaction/isp.jsp",
array(
"storeID"=>$this->store_id,
"trackingID"=>$this->tracking_id,
"admNo"=>$AdmNo,
"sendNo"=>$SendNo,
"admDt"=>$AdmDt,
"NetCancelId"=>$NetCancID,
"type"=>"cancel"
)
);
$this->log($html);
if ($html) {
$json = json_decode($html,true);
if (!is_array($json) || !isset($json['code'])) {
return $ret;
}
if ($json['code'] == 400) {
$ret["message"] = $json['message'];
$ret["status"] = "error";
return $ret;
}
$json = $json['data'];
if ($json['Success'] != "y") {
$ret["status"]="error";
$ret["message"]=$json['FailReason'];
$ret["data"]=null;
}else {
$ret["status"]="ok";
$ret["message"]="ok";
$ret["data"]=array(
"AuthTy" => $json['AuthTy'],
"SubTy" => $json['SubTy'],
"StoreId" => $json['StoreId'], // 업체ID
"AdmNo" => $json['AdmNo'], // 승인번호
"AdmTime" => $json['DealTime'], // 승인시각
"Code" => $json['Code'] // S000 : 성공, S001 : 기처리(이미처리된건), E999 : 기타오류.
);
}
}
}break;
/* hp */
case "hp" : {
$ret["paytype"]= "hp";
$html = $this->callApi(
AGSHOST."/payment/mobilev2/transaction/phone.jsp",
array(
"storeID"=>$this->store_id,
"trackingID"=>$this->tracking_id,
"NetCancelId"=>$NetCancID,
"type"=>"cancel"
)
);
$this->log($html);
if ($html) {
$json = json_decode($html,true);
if (!is_array($json) || !isset($json['code'])) {
return $ret;
}
if ($json['code'] == 400) {
$ret["message"] = $json['message'];
$ret["status"] = "error";
return $ret;
}
$json = $json['data'];
if ($json['Success'] != "y") {
$ret["status"]="error";
$ret["message"]=$json['ResMsg'];
$ret["data"]=null;
}else {
$ret["status"]="ok";
$ret["message"]="ok";
$ret["data"]=array(
"AuthTy" => $json['AuthTy'],
"SubTy" => $json['SubTy'],
"StoreId" => $json['StoreId'], // 업체ID
"AdmTime" => $json['AdmTime'], // 승인시각
"AdmTID" => $json['HpTid'] // 결제TID
);
}
}
}break;
/* type default */
default : {
$this->log("취소 타입이 잘 못 되었습니다.");
$ret["message"] = "취소 타입 에러";
$ret["status"] = "error";
}break;
}
return $ret;
}
}
?>