Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
32 / 32 |
CRAP | |
100.00% |
221 / 221 |
| Sdk | |
100.00% |
1 / 1 |
|
100.00% |
32 / 32 |
56 | |
100.00% |
212 / 212 |
| __construct | |
100.00% |
1 / 1 |
3 | |
100.00% |
9 / 9 |
|||
| getEndpointForm | |
100.00% |
1 / 1 |
4 | |
100.00% |
11 / 11 |
|||
| getHeaderHttp | |
100.00% |
1 / 1 |
3 | |
100.00% |
7 / 7 |
|||
| setSoapClient | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| setProxyParameters | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
| setConnectionTimeout | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| setLocalCert | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| sendAuthorizeRequest | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| parseToAuthorizeRequest | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| getClientSoap | |
100.00% |
1 / 1 |
4 | |
100.00% |
47 / 47 |
|||
| getAuthorizeRequestResponse | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
| parseAuthorizeRequestResponseToArray | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| sanitizeValue | |
100.00% |
1 / 1 |
1 | |
100.00% |
10 / 10 |
|||
| getPayload | |
100.00% |
1 / 1 |
3 | |
100.00% |
14 / 14 |
|||
| getAuthorizeAnswer | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| parseToAuthorizeAnswer | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getAuthorizeAnswerResponse | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
| parseAuthorizeAnswerResponseToArray | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| voidRequest | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| parseToVoidRequest | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getVoidRequestResponse | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
| parseVoidRequestResponseToArray | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| returnRequest | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| parseToReturnRequest | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getReturnRequestResponse | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
| parseReturnRequestResponseToArray | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| discoverPaymentMethods | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getStatus | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getAllPaymentMethods | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getByRangeDateTime | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| getCredentials | |
100.00% |
1 / 1 |
3 | |
100.00% |
10 / 10 |
|||
| doRest | |
100.00% |
1 / 1 |
6 | |
100.00% |
23 / 23 |
|||
| <?php | |
| namespace TodoPago; | |
| require_once(dirname(__FILE__)."/Client.php"); | |
| define('TODOPAGO_VERSION','1.9.0'); | |
| define('TODOPAGO_ENDPOINT_TEST','https://developers.todopago.com.ar/'); | |
| define('TODOPAGO_ENDPOINT_PROD','https://apis.todopago.com.ar/'); | |
| define('TODOPAGO_ENDPOINT_TENATN', 't/1.1/'); | |
| define('TODOPAGO_ENDPOINT_SOAP_APPEND', 'services/'); | |
| define('TODOPAGO_ENDPOINT_TEST_FORM','https://developers.todopago.com.ar/resources/TPHybridForm-v0.1.js'); | |
| define('TODOPAGO_ENDPOINT_PROD_FORM','https://forms.todopago.com.ar/resources/TPHybridForm-v0.1.js'); | |
| define('TODOPAGO_WSDL_AUTHORIZE', dirname(__FILE__).'/Authorize.wsdl'); | |
| class Sdk | |
| { | |
| private $host = NULL; | |
| private $port = NULL; | |
| private $user = NULL; | |
| private $pass = NULL; | |
| private $connection_timeout = NULL; | |
| private $local_cert = NULL; | |
| private $end_point = NULL; | |
| private $soapClient = NULL; | |
| public function __construct($header_http_array, $mode = "test"){ | |
| $this->wsdl = array( | |
| "Authorize" => TODOPAGO_WSDL_AUTHORIZE, | |
| ); | |
| if($mode == "test") { | |
| $this->end_point = TODOPAGO_ENDPOINT_TEST; | |
| } elseif ($mode == "prod") { | |
| $this->end_point = TODOPAGO_ENDPOINT_PROD; | |
| } | |
| $this->header_http = $this->getHeaderHttp($header_http_array); | |
| } | |
| public function getEndpointForm($mode = null) { | |
| if($mode == "test") { | |
| $endpoint = TODOPAGO_ENDPOINT_TEST_FORM; | |
| } else if($mode == "prod") { | |
| $endpoint = TODOPAGO_ENDPOINT_PROD_FORM; | |
| } else { | |
| if($this->end_point == TODOPAGO_ENDPOINT_PROD) { | |
| $endpoint = TODOPAGO_ENDPOINT_PROD_FORM; | |
| } else { | |
| $endpoint = TODOPAGO_ENDPOINT_TEST_FORM; | |
| } | |
| } | |
| return $endpoint; | |
| } | |
| private function getHeaderHttp($header_http_array){ | |
| $header = ""; | |
| if(is_array($header_http_array)) { | |
| foreach($header_http_array as $key=>$value){ | |
| $header .= "$key: $value\r\n"; | |
| } | |
| } | |
| return $header; | |
| } | |
| /* | |
| * configuraciones | |
| */ | |
| public function setSoapClient(\TodoPago\Test\MockClient $soapClient) { | |
| $this->soapClient = $soapClient; | |
| } | |
| /** | |
| * Setea parametros en caso de utilizar proxy | |
| * ejemplo: | |
| * $todopago->setProxyParameters('199.0.1.33', '80', 'usuario','contrasenya'); | |
| */ | |
| public function setProxyParameters($host = null, $port = null, $user = null, $pass = null){ | |
| $this->host = $host; | |
| $this->port = $port; | |
| $this->user = $user; | |
| $this->pass = $pass; | |
| } | |
| /** | |
| * Setea time out (deaulft=NULL) | |
| * ejemplo: | |
| * $todopago->setConnectionTimeout(1000); | |
| */ | |
| public function setConnectionTimeout($connection_timeout){ | |
| $this->connection_timeout = $connection_timeout; | |
| } | |
| /** | |
| * Setea ruta del certificado .pem (deaulft=NULL) | |
| * ejemplo: | |
| * $todopago->setLocalCert('c:/miscertificados/decidir.pem'); | |
| */ | |
| public function setLocalCert($local_cert){ | |
| $this->local_cert= file_get_contents($local_cert); | |
| } | |
| /* | |
| * GET_PAYMENT_VALUES | |
| */ | |
| public function sendAuthorizeRequest($options_comercio, $options_operacion){ | |
| // parseo de los valores enviados por el e-commerce/custompage | |
| $authorizeRequest = $this->parseToAuthorizeRequest($options_comercio, $options_operacion); | |
| $authorizeRequestResponse = $this->getAuthorizeRequestResponse($authorizeRequest); | |
| //devuelve el formato de array el resultado de de la operación SendAuthorizeRequest | |
| $authorizeRequestResponseValues = $this->parseAuthorizeRequestResponseToArray($authorizeRequestResponse); | |
| return $authorizeRequestResponseValues; | |
| } | |
| private function parseToAuthorizeRequest($options_comercio, $options_operacion){ | |
| $authorizeRequest = (object)$options_comercio; | |
| $authorizeRequest->Payload = $this->getPayload($options_operacion); | |
| return $authorizeRequest; | |
| } | |
| private function getClientSoap($typo, $type = "native"){ | |
| $local_wsdl = $this->wsdl["$typo"]; | |
| $local_end_point = $this->end_point.TODOPAGO_ENDPOINT_SOAP_APPEND.TODOPAGO_ENDPOINT_TENATN."$typo"; | |
| $context = array( | |
| 'http' => array( | |
| 'header' => $this->header_http | |
| ), | |
| 'ssl' => array( | |
| 'verify_peer' => false, | |
| 'verify_peer_name' => false, | |
| 'allow_self_signed' => true | |
| ) | |
| ); | |
| if($this->soapClient != null) { | |
| $this->soapClient->setParameters(array( | |
| 'stream_context' => stream_context_create($context), | |
| 'local_cert'=>($this->local_cert), | |
| 'connection_timeout' => $this->connection_timeout, | |
| 'location' => $local_end_point, | |
| 'encoding' => 'UTF-8', | |
| 'proxy_host' => $this->host, | |
| 'proxy_port' => $this->port, | |
| 'proxy_login' => $this->user, | |
| 'proxy_password' => $this->pass | |
| )); | |
| return $this->soapClient; | |
| } | |
| if($type == "native") { | |
| $clientSoap = new \SoapClient($local_wsdl, array( | |
| 'stream_context' => stream_context_create($context), | |
| 'local_cert'=>($this->local_cert), | |
| 'connection_timeout' => $this->connection_timeout, | |
| 'location' => $local_end_point, | |
| 'encoding' => 'UTF-8', | |
| 'proxy_host' => $this->host, | |
| 'proxy_port' => $this->port, | |
| 'proxy_login' => $this->user, | |
| 'proxy_password' => $this->pass | |
| )); | |
| } else if($type == "curl") { | |
| $clientSoap = new Client($local_wsdl, array( | |
| 'local_cert'=>($this->local_cert), | |
| 'connection_timeout' => $this->connection_timeout, | |
| 'location' => $local_end_point, | |
| 'encoding' => 'UTF-8', | |
| 'proxy_host' => $this->host, | |
| 'proxy_port' => $this->port, | |
| 'proxy_login' => $this->user, | |
| 'proxy_password' => $this->pass | |
| )); | |
| $clientSoap->setCustomHeaders($context); | |
| } | |
| return $clientSoap; | |
| } | |
| private function getAuthorizeRequestResponse($authorizeRequest){ | |
| $clientSoap = $this->getClientSoap('Authorize'); | |
| $authorizeRequestResponse = $clientSoap->SendAuthorizeRequest($authorizeRequest); | |
| if($authorizeRequestResponse->StatusCode == 702) { | |
| $clientSoap = $this->getClientSoap('Authorize','curl'); | |
| $authorizeRequestResponse = $clientSoap->SendAuthorizeRequest($authorizeRequest); | |
| } | |
| return $authorizeRequestResponse; | |
| } | |
| private function parseAuthorizeRequestResponseToArray($authorizeRequestResponse){ | |
| $authorizeRequestResponseOptions = json_decode(json_encode($authorizeRequestResponse), true); | |
| return $authorizeRequestResponseOptions; | |
| } | |
| public static function sanitizeValue($string){ | |
| $string = htmlspecialchars_decode($string); | |
| $string = strip_tags($string); | |
| $re = "/\\[(.*?)\\]|<(.*?)\\>/i"; | |
| $subst = ""; | |
| $string = preg_replace($re, $subst, $string); | |
| $string = preg_replace('/[\x00-\x1f]/','',$string); | |
| $string = preg_replace('/[\xc2-\xdf][\x80-\xbf]/','',$string); | |
| $replace = array("\n","\r",'\n','\r',' ','&','<','>'); | |
| $string = str_replace($replace, '', $string); | |
| return $string; | |
| } | |
| private function getPayload($optionsAuthorize){ | |
| $xmlPayload = "<Request>"; | |
| unset($optionsAuthorize['SDK']); | |
| unset($optionsAuthorize['SDKVERSION']); | |
| unset($optionsAuthorize['LENGUAGEVERSION']); | |
| $optionsAuthorize['SDK'] = "PHP"; | |
| $optionsAuthorize['SDKVERSION'] = TODOPAGO_VERSION; | |
| $optionsAuthorize['LENGUAGEVERSION'] = PHP_VERSION; | |
| foreach($optionsAuthorize as $key => $value){ | |
| $xmlPayload .= "<" . $key . ">" . self::sanitizeValue($value) . "</" . $key . ">"; | |
| } | |
| $xmlPayload .= "</Request>"; | |
| //Paso a UTF-8. | |
| if(function_exists("mb_convert_encoding")) | |
| return mb_convert_encoding($xmlPayload, "UTF-8", "auto"); | |
| else | |
| return utf8_encode($xmlPayload); | |
| } | |
| /* | |
| * QUERY_PAYMENT | |
| */ | |
| public function getAuthorizeAnswer($optionsAnswer){ | |
| $authorizeAnswer = $this->parseToAuthorizeAnswer($optionsAnswer); | |
| $authorizeAnswerResponse = $this->getAuthorizeAnswerResponse($authorizeAnswer); | |
| $authorizeAnswerResponseValues = $this->parseAuthorizeAnswerResponseToArray($authorizeAnswerResponse); | |
| return $authorizeAnswerResponseValues; | |
| } | |
| private function parseToAuthorizeAnswer($optionsAnswer){ | |
| $obj_options_answer = (object) $optionsAnswer; | |
| return $obj_options_answer; | |
| } | |
| private function getAuthorizeAnswerResponse($authorizeAnswer){ | |
| $client = $this->getClientSoap('Authorize'); | |
| $authorizeResponse = $client->GetAuthorizeAnswer($authorizeAnswer); | |
| if($authorizeResponse->StatusCode == 702) { | |
| $client = $this->getClientSoap('Authorize','curl'); | |
| $authorizeResponse = $client->GetAuthorizeAnswer($authorizeAnswer); | |
| } | |
| return $authorizeResponse; | |
| } | |
| private function parseAuthorizeAnswerResponseToArray($authorizeAnswerResponse){ | |
| $authorizeAnswerResponseOptions = json_decode(json_encode($authorizeAnswerResponse), true); | |
| return $authorizeAnswerResponseOptions; | |
| } | |
| // DEVOLUCIONES | |
| public function voidRequest($optionsVoid){ | |
| $voidRequestOptions = $this->parseToVoidRequest($optionsVoid); | |
| $voidRequestResponse = $this->getVoidRequestResponse($voidRequestOptions); | |
| $voidRequestResponseValues = $this->parseVoidRequestResponseToArray($voidRequestResponse); | |
| return $voidRequestResponseValues; | |
| } | |
| private function parseToVoidRequest($optionsVoid){ | |
| $obj_optionsVoid = (object) $optionsVoid; | |
| return $obj_optionsVoid; | |
| } | |
| private function getVoidRequestResponse($voidRequestOptions){ | |
| $client = $this->getClientSoap('Authorize'); | |
| $voidRequestResponse = $client->VoidRequest($voidRequestOptions); | |
| if($voidRequestResponse->StatusCode == 702) { | |
| $client = $this->getClientSoap('Authorize','curl'); | |
| $voidRequestResponse = $client->VoidRequest($voidRequestOptions); | |
| } | |
| return $voidRequestResponse; | |
| } | |
| private function parseVoidRequestResponseToArray($voidRequestResponse){ | |
| $voidRequestResponseValues = json_decode(json_encode($voidRequestResponse), true); | |
| return $voidRequestResponseValues; | |
| } | |
| public function returnRequest($optionsReturn){ | |
| $returnRequestOptions = $this->parseToReturnRequest($optionsReturn); | |
| $returnRequestResponse = $this->getReturnRequestResponse($returnRequestOptions); | |
| $returnRequestResponseValues = $this->parseReturnRequestResponseToArray($returnRequestResponse); | |
| return $returnRequestResponseValues; | |
| } | |
| private function parseToReturnRequest($optionsReturn){ | |
| $obj_optionsReturn = (object) $optionsReturn; | |
| return $obj_optionsReturn; | |
| } | |
| private function getReturnRequestResponse($returnRequestOptions){ | |
| $client = $this->getClientSoap('Authorize'); | |
| $returnRequestResponse = $client->ReturnRequest($returnRequestOptions); | |
| if($returnRequestResponse->StatusCode == 702) { | |
| $client = $this->getClientSoap('Authorize','curl'); | |
| $returnRequestResponse = $client->ReturnRequest($returnRequestOptions); | |
| } | |
| return $returnRequestResponse; | |
| } | |
| private function parseReturnRequestResponseToArray($returnRequestResponse){ | |
| $returnRequestResponseValues = json_decode(json_encode($returnRequestResponse), true); | |
| return $returnRequestResponseValues; | |
| } | |
| //REST | |
| public function discoverPaymentMethods(){ | |
| $url = $this->end_point.TODOPAGO_ENDPOINT_TENATN.'api/PaymentMethods/Discover'; | |
| return $this->doRest($url); | |
| } | |
| public function getStatus($arr_datos_status){ | |
| $url = $this->end_point.TODOPAGO_ENDPOINT_TENATN.'api/Operations/GetByOperationId/MERCHANT/'. $arr_datos_status["MERCHANT"] . '/OPERATIONID/'. $arr_datos_status["OPERATIONID"]; | |
| return $this->doRest($url, null, "GET", array("Accept" => "application/json")); | |
| } | |
| public function getAllPaymentMethods($arr_datos_merchant){ | |
| $url = $this->end_point.TODOPAGO_ENDPOINT_TENATN.'api/PaymentMethods/Get/MERCHANT/'. $arr_datos_merchant["MERCHANT"]; | |
| return $this->doRest($url); | |
| } | |
| public function getByRangeDateTime($arr_datos) { | |
| if(!isset($arr_datos['PAGENUMBER'])) $arr_datos['PAGENUMBER'] = 1; | |
| $url = $this->end_point.TODOPAGO_ENDPOINT_TENATN.'api/Operations/GetByRangeDateTime/MERCHANT/'. $arr_datos["MERCHANT"] . '/STARTDATE/' . $arr_datos["STARTDATE"] . '/ENDDATE/' . $arr_datos["ENDDATE"] . '/PAGENUMBER/' . $arr_datos["PAGENUMBER"]; | |
| return $this->doRest($url); | |
| } | |
| public function getCredentials(Data\User $user) { | |
| $url = $this->end_point.'api/Credentials'; | |
| $data = $user->getData(); | |
| $response = $this->doRest($url, $data, "POST", array("Content-Type: application/json")); | |
| if($response == null) { | |
| throw new Exception\ConnectionException("Error de conexion"); | |
| } | |
| if($response["Credentials"]["resultado"]["codigoResultado"] != 0) { | |
| throw new Exception\ResponseException($response["Credentials"]["resultado"]["mensajeResultado"],$response["Credentials"]["resultado"]["codigoResultado"]); | |
| } | |
| $user->setMerchant($response["Credentials"]["merchantId"]); | |
| $user->setApikey($response["Credentials"]["APIKey"]); | |
| return $user; | |
| } | |
| private function doRest($url, $data = array(), $method = "GET", $headers = array()){ | |
| $curl = curl_init($url); | |
| curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); | |
| curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); | |
| curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); | |
| $conn_headers = array_filter(explode("\r\n",$this->header_http)); | |
| curl_setopt($curl, CURLOPT_HTTPHEADER, array_merge($conn_headers,$headers)); | |
| if($method == "POST") { | |
| curl_setopt($curl, CURLOPT_POST, 1); | |
| curl_setopt($curl, CURLOPT_POSTFIELDS,json_encode($data)); | |
| } | |
| if($this->host != null) | |
| curl_setopt($curl, CURLOPT_PROXY, $this->host); | |
| if($this->port != null) | |
| curl_setopt($curl, CURLOPT_PROXYPORT, $this->port); | |
| $result = curl_exec($curl); | |
| $http_status = curl_getinfo($curl, CURLINFO_HTTP_CODE); | |
| curl_close($curl); | |
| if($http_status != 200) { | |
| $result = "<Colections/>"; | |
| } | |
| if( json_decode($result) != null ) { | |
| return json_decode($result,true); | |
| } | |
| return json_decode(json_encode(simplexml_load_string($result)), true); | |
| } | |
| } |