| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 | <?php/** * Archivo SDK de Pagopar * @author "Pagopar" <desarrollo@pagopar.com> * @version 1 27/4/2017 */require_once 'lib/DBPagopar.php';require_once 'classes/OrderPagopar.php';class Pagopar{    //Tokens del comercio //TODO(Quitar después)    const TOKEN_PRIVADO = 'dflghdf5458';    const TOKEN_PUBLICO = '123456abcdegf';    //URLs de configuración    const URL_BASE = 'https://api.pagopar.com/api/';    const URL_COMERCIOS = self::URL_BASE.'comercios/1.1/iniciar-transaccion';    const URL_PEDIDOS = self::URL_BASE.'pedidos/1.1/traer';    const URL_REDIRECT = 'https://pagopar.com/pagos/%s';    //Tipos de Tokens generados    const TOKEN_TIPO_CONSULTA = 'CONSULTA';    const TOKEN_TIPO_CIUDAD = 'CIUDADES';    const TOKEN_TIPO_CATEGORIA = 'CATEGORIA';    const TOKEN_TIPO_FLETE = 'CALCULAR-FLETE';    //Base de datos    protected $db;    //Datos del pedido del comercio    private $idOrder;    private $hashOrder;    public $order;    /**     * Constructor de la clase     * @param int $id Id del pedido     * @param $db     * @internal param Database $PDO $db Base de Datos (Basada en PDO)     */    public function __construct($id = null,$db) {        $this->db = $db;        $this->idOrder = $id;        $this->order = new OrderPagopar($id);    }    /**     * Invoca a la URL de acuerdo a los parámetros     * @param array $args Parámetros     * @param  string $url Url a invocar     * @return string Respuesta en formato JSON     */    private function runCurl($args, $url){        $args = json_encode($args);        $ch = curl_init();        $headers= array('Accept: application/json','Content-Type: application/json');        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);        curl_setopt($ch, CURLOPT_POST, true);        curl_setopt($ch, CURLOPT_POSTFIELDS, $args);        $response = curl_exec($ch);        $error = curl_error($ch);        $info = curl_getinfo($ch);        curl_close($ch);        return $response;    }    /**     * Inicia la transacción con Pagopar y si tiene éxito al generar el pedido,     * redirecciona a la página de pago de Pagopar.     * @throws Exception     */    public function newPagoparTransaction(){        $orderPagopar = $this->order->makeOrder($this->idOrder);        $response = $this->runCurl($orderPagopar, self::URL_COMERCIOS);        $arrayResponse = json_decode($response);        //Verificar si hay error        if(!$arrayResponse->respuesta){            throw new Exception($arrayResponse->resultado);        }        $this->hashOrder = $arrayResponse->resultado[0]->data;        $this->db->insertTransaction($orderPagopar['id_pedido_comercio'],            $orderPagopar['tipo_pedido'],            $orderPagopar['monto_total'],            $this->hashOrder,            $orderPagopar['fecha_maxima_pago'],            $orderPagopar['descripcion_resumen']        );        $this->redirectToPagopar($this->hashOrder);    }    /**     * Redirecciona a la página de Pagopar     * @param string $hash Hash del pedido     */    public function redirectToPagopar($hash){        $url = sprintf(self::URL_REDIRECT, $hash);        //Redireccionamos a Pagopar        header('Location: '. $url);        exit();    }    /**     * Inicia la transacción con Pagopar y si tiene éxito al generar el pedido con valores de prueba,     * redirecciona a la página de pago de Pagopar.     */    public function newTestPagoparTransaction(){        //Creamos el comprador        $buyer = new BuyerPagopar();        $buyer->name            = 'Juan Perez';        $buyer->email           = 'mihares@gmail.com';        $buyer->cityId          = 1;        $buyer->tel             = '0972200046';        $buyer->typeDoc         = 'CI';        $buyer->doc             = '352221';        $buyer->addr            = 'Mexico 840';        $buyer->addRef          = 'alado de credicentro';        $buyer->addrCoo         = '-25.2844638,-57.6480038';        $buyer->ruc             = null;        $buyer->socialReason    = null;        //Agregamos el comprador        $this->order->addPagoparBuyer($buyer);        //Creamos los productos        $item1 = new ItemPagopar();        $item1->name                = "Válido 1 persona";        $item1->qty                 = 1;        $item1->price               = 1000;        $item1->cityId              = 1;        $item1->desc                = "producto";        $item1->url_img             = "http://www.clipartkid.com/images/318/tickets-for-the-film-festival-are-for-the-two-day-event-admission-is-lPOEYl-clipart.png";        $item1->weight              = '0.1';        $item1->category            = 3;        $item1->sellerPhone         = '0985885487';        $item1->sellerEmail         = 'mihares@gmail.com';        $item1->sellerAddress       = 'dr paiva ca cssssom gaa';        $item1->sellerAddressRef    = '';        $item1->sellerAddressCoo    = '-28.75438,-57.1580038';        $item2 = new ItemPagopar();        $item2->name                = "Heladera";        $item2->qty                 = 1;        $item2->price               = 785000;        $item2->cityId              = 1;        $item2->desc                = "producto";        $item2->url_img             = "https://cdn1.hendyla.com/archivos/imagenes/2017/04/09/publicacion-564c19b86b235526160f43483c76a69ee1a85c96c976c33e3e21ce6a5f9009b9-234_A.jpg";        $item2->weight              = '5.0';        $item2->category            = 3;        $item2->sellerPhone         = '0985885487';        $item2->sellerEmail         = 'mihares@gmail.com';        $item2->sellerAddress       = 'dr paiva ca cssssom gaa';        $item2->sellerAddressRef    = '';        $item2->sellerAddressCoo    = '-28.75438,-57.1580038';        //Agregamos los productos al pedido        $this->order->addPagoparItem($item1);        $this->order->addPagoparItem($item2);        $this->order->publicKey = self::TOKEN_PUBLICO;        $this->order->privateKey = self::TOKEN_PRIVADO;        $this->order->typeOrder = 'VENTA-COMERCIO';        $this->order->desc = 'Entrada Retiro';        $this->order->periodDays = 1;        $this->order->periodDays = 0;        $this->newPagoparTransaction();    }    /**     * Obtiene un JSON con el estado del pedido     * @param int $id Id del pedido     * @throws Exception     */    public function getPagoparOrderStatus($id){        $this->idOrder = $id;        $orderData = $this->db->selectTransaction("id=$id");        if($orderData){            $this->hashOrder = $orderData['hash'];        }else{            throw new Exception("Hay un error con el hash");        }        $token = $this->generateToken(self::TOKEN_TIPO_CONSULTA);        $args = ['hash_pedido'=>$this->hashOrder, 'token'=>$token, 'token_publico'=> self::TOKEN_PUBLICO];        $arrayResponse = $this->runCurl($args, self::URL_PEDIDOS);        print_r($arrayResponse);    }    /**     * Genera un Token para el pedido     * @param string $typeOfToken Tipo de token generado     * @return string Token generado     */    private function generateToken($typeOfToken){        return sha1(self::TOKEN_PRIVADO.$typeOfToken);    }    /**     * Retorna las ciudades en forma de array     * @param string $typeOfToken Tipo de token generado     * @return string Token generado     */    public function consultarCiudades(){        $token = $this->generateToken(self::TOKEN_TIPO_CIUDAD);        $url = self::URL_BASE.'ciudades/1.1/traer';        $args = ['token'=>$token,'token_publico'=> self::TOKEN_PUBLICO];        $arrayResponse = $this->runCurl($args, $url);        return $arrayResponse;    }    public function consultarCategorias(){        $token = $this->generateToken(self::TOKEN_TIPO_CATEGORIA);        $url = self::URL_BASE.'categorias/1.1/traer';        $args = ['token'=>$token,'token_publico'=> self::TOKEN_PUBLICO];        $arrayResponse = $this->runCurl($args, $url);        return $arrayResponse;    }    #CALCULAR-FLETE    public function calcularFlete($json){        $token = $this->generateToken(self::TOKEN_TIPO_FLETE);        $url = self::URL_BASE.'calcular-flete/1.1/traer';        $args = ['token'=>$token,'token_publico'=> self::TOKEN_PUBLICO, 'dato'=> $json];        $arrayResponse = $this->runCurl($args, $url);        return $arrayResponse;    }    #registrar usuario    public function registrarUsuario(array $json){        $url = self::URL_BASE.'usuario/1.1/registro';        $args = $json;        $arrayResponse = $this->runCurl($args, $url);        return $arrayResponse;    }}
 |