Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] No encuentro tutorial de la API de ClickBank

Estas en el tema de No encuentro tutorial de la API de ClickBank en el foro de PHP en Foros del Web. Hola amig@s, Llevo un tiempo bastante considerable buscando algún tutorial o manual de especificaciones de la API de ClickBank, en español y donde se explique ...
  #1 (permalink)  
Antiguo 31/10/2015, 04:22
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 4 meses
Puntos: 154
No encuentro tutorial de la API de ClickBank

Hola amig@s,

Llevo un tiempo bastante considerable buscando algún tutorial o manual de especificaciones de la API de ClickBank, en español y donde se explique de manera muy accesible cómo usar esta API.

Si alguien conoce algún tutorial o manual para esto, le agradecería me pasase el enlace para poderlo estudiar.

Muchas gracias.
  #2 (permalink)  
Antiguo 31/10/2015, 05:58
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: No encuentro tutorial de la API de ClickBank

Saludo
Uhm, pues acá esta en inglés, pero en español no se ve el asunto,
sin embargo preguntar por acá a ver que dicen.
.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 31/10/2015, 08:11
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 4 meses
Puntos: 154
Respuesta: No encuentro tutorial de la API de ClickBank

Hola mortiprogramador,

Muchas gracias por tu respuesta, lo de español lo decía porque si ya me resulta difícil entenderlo en este idioma, ni te cuento en inglés que no lo entiendo ni medio bien...

He llamado al teléfono que aparece en el enlace que me has pasado pero, lógicamente, no están en sábado.

El enlace que me has pasado con la documentación en inglés lo había revisado ya, pero ahí no me aclaran lo que necesito, que, básicamente es saber cómo consultar si una venta se ha devuelto y saber cómo consultar si las ventas recurrentes se han pagado, están pendientes o se han cancelado.

Tengo un código que me devuelve unas respuestas pero no tengo claro cómo debo procesarlas para obtener lo que necesito, te lo copio por si me puedes dar alguna idea (si puede ser con ejemplos, mejor )

Ahí va:

Código PHP:
Ver original
  1. <?php
  2.  
  3. //Activamos la visualización de todo tipo de errores y notificaciones
  4. ini_set("display_errors", 1);
  5.  
  6.  
  7. //Esto lo saqué de algún sitio de Internet que ahora no recuerdo,
  8. //funciona, pero no sé cómo procesar la información que recibo.
  9. define('CLICKBANK_DEV_KEY','DEV-LO-QUE-SEA');
  10. define('CLICKBANK_API_KEY','API-LO-QUE-SEA');
  11.  
  12.  
  13.  
  14. Class ClickBank
  15. {
  16.     /*
  17.      * $tries   how many times to check for receipt
  18.      *          because when you come back from clicbank it sometimes shows it invalid
  19.      *          
  20.      * $receipt
  21.      *
  22.      * @return  empty array if receipt not valid
  23.      *          receipt info array if receipt is valid
  24.      */
  25.     function get_payment_info($tries, $receipt){
  26.         $receipt_info = array();
  27.         while($tries>0 && count($receipt_info)==0){
  28.             $receipt_info = $this->get_receipt_info($receipt);
  29.             $tries--;  
  30.         }
  31.         return $receipt_info;
  32.     }
  33.  
  34.     function get_receipt_info($receipt){
  35.         $receipt_info = array();
  36.         $ch = curl_init();
  37.         curl_setopt($ch, CURLOPT_URL, "https://api.clickbank.com/rest/1.3/orders/$receipt");
  38.         curl_setopt($ch, CURLOPT_HEADER, false);
  39.         //curl_setopt($ch, CURLOPT_GET, true);
  40.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  41.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  42.         curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json", "Authorization:".CLICKBANK_DEV_KEY.":".CLICKBANK_API_KEY));
  43.         $result = curl_exec($ch);
  44.         $curl_info = curl_getinfo($ch);
  45.         curl_close($ch);
  46.  
  47.         if($curl_info['http_code']==200){
  48.             $receipt_info = json_decode($result);          
  49.         }
  50.  
  51.         return $receipt_info;
  52.     }
  53. }
  54. /*Modo de empleo
  55.  
  56. $clickbank = new ClickBank();
  57.  
  58. $receipt = $_GET['cbreceipt']; o $receipt = $_POST['cbreceipt'];
  59.  
  60. // Esto devuelve los detalles de la transacción
  61. $transaction_info = $clickbank->get_payment_info(10, $receipt);
  62. */
  63.  
  64.  
  65. ?>

Y en esas estamos... Si me puedes echar un cable, te lo agradecería...
  #4 (permalink)  
Antiguo 31/10/2015, 21:23
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: No encuentro tutorial de la API de ClickBank

Saludo rbczgz

Pues encontré este link que es un componente para usar la api.
Por otra parte, estuve intentando crear las keys para
hacer uso de la api, pero te envié un mensaje privado
preguntandote algunas cosas al respecto.

En cuanto al código publicado, lo que hace es apuntar a la api,
y espera la info correspondiente para cada mètodo

Por ej, tenemos el método /1.3/orders/list
que espera los siguientes parámetros:

Archivo Adjunto 763

Y responde una lista de OrderDatas

En cuanto al consumo, lamentablemente el acceso está restringido,
así que revisa el mensaje que te envié para validar esas preguntas.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 24/11/2015 a las 22:25
  #5 (permalink)  
Antiguo 01/11/2015, 03:34
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 4 meses
Puntos: 154
Respuesta: No encuentro tutorial de la API de ClickBank

Hola mortiprogramador,

Muchas gracias por las molestias que te estás tomando solo para ayudarme. Ya te he respondido el mensaje privado.

He revisado los enlaces que me has pasado por aquí y el del componente no entiendo nada, el de la lista de OrderDatas me aparece la página en blanco.

Yo sigo investigando mientras espero tus noticias, a ver si consigo aclarar este asunto.
  #6 (permalink)  
Antiguo 01/11/2015, 06:14
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: No encuentro tutorial de la API de ClickBank

Saludo
Pues en cuanto a lo de OrderDatas, debería aparecer una definición
del schema de respuesta.

Código XML:
Ver original
  1. <xs:schema version="1.0"><xs:element name="orderData" type="orderData"/><xs:complexType name="orderData"><xs:sequence><xs:element name="date" type="xs:dateTime" nillable="true" minOccurs="0"/><xs:element name="receipt" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="promo" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="pmtType" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="txnType" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="item" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="amount" type="xs:decimal" nillable="true" minOccurs="0"/><xs:element name="site" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="affi" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="country" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="state" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="lastName" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="firstName" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="currency" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="email" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="zip" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="customerContactInfo" type="contactField" nillable="true" minOccurs="0" maxOccurs="unbounded"/><xs:element name="refundsBlocked" type="xs:boolean" minOccurs="0"/><xs:element name="rebillAmount" type="xs:decimal" nillable="true" minOccurs="0"/><xs:element name="processedPayments" type="xs:int" nillable="true" minOccurs="0"/><xs:element name="futurePayments" type="xs:int" nillable="true" minOccurs="0"/><xs:element name="nextPaymentDate" type="xs:dateTime" nillable="true" minOccurs="0"/><xs:element name="status" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="accountAmount" type="xs:decimal" nillable="true" minOccurs="0"/><xs:element name="role" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="customerDisplayName" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="title" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="recurring" type="xs:boolean" minOccurs="0"/><xs:element name="physical" type="xs:boolean" minOccurs="0"/><xs:element name="customerRefundableState" type="refundableState" nillable="true" minOccurs="0"/></xs:sequence></xs:complexType><xs:complexType name="contactField"><xs:sequence><xs:element name="field" type="xs:string" nillable="true" minOccurs="0"/><xs:element name="value" type="xs:string" nillable="true" minOccurs="0"/></xs:sequence></xs:complexType><xs:simpleType name="refundableState"><xs:restriction base="xs:string"><xs:enumeration value="REFUNDABLE"/><xs:enumeration value="SUGGESTED_REFUND_BLOCK"/><xs:enumeration value="UNREFUNDABLE"/><xs:enumeration value="ALREADY_REFUNDED"/><xs:enumeration value="TO_OLD"/><xs:enumeration value="REFUND_BLOCKED"/><xs:enumeration value="HAS_OPEN_REFUND"/></xs:restriction></xs:simpleType></xs:schema>

Por otra parte, encontre este link en donde está la api para
varios idiomas, pero al intentar ingresar a otras distintas a inglés,
dice que no hay acceso y que hay que hablar con un dueño de cuenta de Zendesk.

En cuanto a las keys, ya las pude generar, pero el código que publicaste
al menos en mi caso no me devuelve nada, tu dices que a tí sí te responde algo,
podrías contarnos cual es el dato que envías en la variable cbrecepit
y la respuesta que retorna?
Ahí vamos poco a poco revisando eso.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 01/11/2015, 07:35
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 4 meses
Puntos: 154
Respuesta: No encuentro tutorial de la API de ClickBank

Hola mortiprogramador,

Lo que mencionas de la definición del schema de respuesta, la verdad es que no lo entiendo, no tengo ni idea de xml

El enlace que mencionas para varios idiomas, a mi sí me funciona en español y se puede ver este enlace entre otros de otros idiomas.

En cuanto a la variable cbreceipt, ahí tenemos un problema, porque eso es el código de un recibo de ClickBank, pero tiene que ser uno válido y debe pertenecer a la misma cuenta que utiliza la API, ya que si no, obviamente, no se puede acceder a la info del recibo

La respuesta que retorna no la debo publicar aquí porque es información que, entre otras cosas, contiene los datos del comprador, por lo que moral y legalmente, no tengo permitido publicarlo...

Creo que podría publicarlo de esta forma, con casi todos los datos "comprometidos" cambiados:

Esto es lo que me genera la respuesta que copio a continuación:

Código PHP:
Ver original
  1. <?php
  2. $clickbank = new ClickBank();
  3.  
  4. $receipt = "SR46E7JH";
  5. echo "Información de transacción:<br>";
  6. $transaction_info = $clickbank->get_payment_info(10, $receipt);
  7. echo "<pre>";
  8. print_r($transaction_info);
  9. echo "</pre>";
  10. ?>

Código:
stdClass Object
(
    [orderData] => Array
        (
            [0] => stdClass Object
                (
                    [date] => 2015-07-08T15:14:10-07:00
                    [receipt] => SR46E7JH
                    [promo] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [pmtType] => PYPL
                    [txnType] => SALE
                    [item] => X (Si el vendedor tiene más de un producto, este es el Id del mismo)
                    [amount] => 352.00
                    [site] => USUARIO del vendedor (creo)
                    [affi] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [country] => XX
                    [state] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [lastName] => APELLIDO del comprador
                    [firstName] => NOMBRE del comprador
                    [currency] => MONeda en la que ha pagado el comprador
                    [email] => [email protected]
                    [zip] => Codigo_postal_del_comprador
                    [rebillAmount] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [processedPayments] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [futurePayments] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [nextPaymentDate] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [status] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [accountAmount] => 236.36 (Cantidad que le queda a la cuenta que hace la consulta)
                    [role] => VENDOR
                    [customerDisplayName] => Nombre para mostrar como lo tiene configurado el cliente
                    [title] => Nombre del producto según aparece en ClickBank
                    [recurring] => false
                    [physical] => false
                    [customerRefundableState] => TO_OLD
                )

            [1] => stdClass Object
                (
                    [date] => 2015-08-12T21:45:32-07:00
                    [receipt] => SR46E7JH
                    [promo] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [pmtType] => PYPL
                    [txnType] => RFND
                    [item] => 2
                    [amount] => -352.00
                    [site] => USUARIO del vendedor (creo)
                    [affi] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [country] => XX
                    [state] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [lastName] => APELLIDO del comprador
                    [firstName] => NOMBRE del comprador
                    [currency] => MONeda en la que ha pagado el comprador
                    [email] => [email protected]
                    [zip] => Codigo_postal_del_comprador
                    [rebillAmount] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [processedPayments] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [futurePayments] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [nextPaymentDate] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [status] => stdClass Object
                        (
                            [@nil] => true
                        )

                    [accountAmount] => -236.36
                    [role] => VENDOR
                    [customerDisplayName] => Nombre para mostrar como lo tiene configurado el cliente
                    [title] => Nombre del producto según aparece en ClickBank
                    [recurring] => false
                    [physical] => false
                    [customerRefundableState] => stdClass Object
                        (
                            [@nil] => true
                        )

                )

        )

)
Esto corresponde a una venta devuelta, tengo acceso a ver ventas normales, devueltas pero no recurrentes...

Espero que sirva...
  #8 (permalink)  
Antiguo 01/11/2015, 13:02
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: No encuentro tutorial de la API de ClickBank

Saludo

Pues en cuanto al schema de respuesta, piensalo como un objeto de php.

El enlace a mí me sigue respondiendo con

You do not have access to this topic
You do not have access to this page.
Please contact the account owner of this Zendesk for further help.

Tal vez es porque la cuenta mía es nueva, y aún no tiene configurado eso.

Y finalmente, con la respuesta que te da, ¡ya está!
Es un objeto, en cuyo caso ya puedes mostrar la info con php

Ej
Código PHP:
Ver original
  1. foreach($transaction_info->orderData as $id=>$value)
  2. {
  3.     if( $value->pmtType == 'PYPL' )
  4.         $value->pmtType = 'Paypal';
  5.     if( $value->txnType == 'SALE')
  6.         $value->txnType = 'venta';    
  7.     if( $value->txnType == 'RFND')
  8.         $value->txnType = 'refrendación';
  9.        
  10.     echo utf8_decode('</br>El ciente '.$value->firstName.' '.$value->lastName.' ha realizado una '.$value->txnType.' por '.$value->pmtType.' por valor de '.$value->amount);
  11. }

Sí te fijas, el objeto devuelto tiene los mismos datos del schema.
¿En cuanto a las ventas recurrentes, te refieres a las mismas compras
que hace un mismo usuario?
Esa consulta tendría que hacerse con el list que veiamos ayer creo yo,
¿O a que te refieres con las recurrentes?

Bue, mientras, revisa lo que te pasé, debe funcionar sin problema.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 01/11/2015, 14:40
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 4 meses
Puntos: 154
Respuesta: No encuentro tutorial de la API de ClickBank

Cita:
Iniciado por mortiprogramador Ver Mensaje

Pues en cuanto al schema de respuesta, piensalo como un objeto de php.
Ahí tengo el primer problema, aún no he conseguido un curso, tutorial o lo que sea en el que aprender correctamente y desde lo más básico POO

Cita:
Iniciado por mortiprogramador Ver Mensaje

El enlace a mí me sigue respondiendo con

You do not have access to this topic
You do not have access to this page.
Please contact the account owner of this Zendesk for further help.

Tal vez es porque la cuenta mía es nueva, y aún no tiene configurado eso.
Sí, lo más probable es que sea eso...

Cita:
Iniciado por mortiprogramador Ver Mensaje

Y finalmente, con la respuesta que te da, ¡ya está!
Es un objeto, en cuyo caso ya puedes mostrar la info con php

Ej
Código PHP:
Ver original
  1. foreach($transaction_info->orderData as $id=>$value)
  2. {
  3.     if( $value->pmtType == 'PYPL' )
  4.         $value->pmtType = 'Paypal';
  5.     if( $value->txnType == 'SALE')
  6.         $value->txnType = 'venta';    
  7.     if( $value->txnType == 'RFND')
  8.         $value->txnType = 'refrendación';
  9.        
  10.     echo utf8_decode('</br>El ciente '.$value->firstName.' '.$value->lastName.' ha realizado una '.$value->txnType.' por '.$value->pmtType.' por valor de '.$value->amount);
  11. }

Sí te fijas, el objeto devuelto tiene los mismos datos del schema.
Sí, es cierto, son los mismos datos, pero como te decía, aún es un tema pendiente el aprender POO... Tendré que seguir intentando, básicamente lo que tengo que hacer es comprobar si un "receipt" está o no devuelto, en el caso de las ventas "normales" y en el caso de las recurrentes, si está pagado en tiempo, está pendiente o está cancelado, con el ejemplo que me has puesto, creo que podré hacer algo de las "normales", el tema será con las recurrentes...

Cita:
Iniciado por mortiprogramador Ver Mensaje

¿En cuanto a las ventas recurrentes, te refieres a las mismas compras
que hace un mismo usuario?
Esa consulta tendría que hacerse con el list que veiamos ayer creo yo,
¿O a que te refieres con las recurrentes?
Las ventas recurrentes ("recurring" creo que las llaman ellos) son las que se hacen periódicamente (mensual, trimestral, anual, etc...) tipo cursos por entregas, membresías, etc... En estas, como decía, necesito comprobar si están al día en los pagos y si no están canceladas.


Cita:
Iniciado por mortiprogramador Ver Mensaje

Bue, mientras, revisa lo que te pasé, debe funcionar sin problema.
Sí, con eso tengo para "entretenerme" un rato largo, jejeje, solo entenderlo, ya me llevará un buen rato, pero lo conseguiré (o si no, te volveré a pedir ayuda al respecto )

Pero todo esto será ya mañana, hoy se ha hecho tarde y la cabeza ya no me da más. Muchas gracias por todas las molestias que te estás tomando para ayudarme, de verdad, igual soy pesado, pero no te puedes imaginar lo agradecido que estoy.
  #10 (permalink)  
Antiguo 01/11/2015, 17:17
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: No encuentro tutorial de la API de ClickBank

Saludo
Pues sí, con eso tendrás para divertirte.
En cuanto a POO, te dejo este link que es una serie de entregas
sobre el tema, y está explicado con ejemplos claros, espero te sirva.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #11 (permalink)  
Antiguo 02/11/2015, 02:58
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 4 meses
Puntos: 154
Respuesta: No encuentro tutorial de la API de ClickBank

Hola mortiprogramador,

Muchas gracias por el enlace, voy a revisarlo con detenimiento a ver si consigo aprender algo a fondo. Te voy contando
  #12 (permalink)  
Antiguo 21/11/2015, 12:47
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 4 meses
Puntos: 154
Respuesta: No encuentro tutorial de la API de ClickBank

Hola de nuevo,

Después de analizar ese enlace, tus ayudas y muchas más cosas que he seguido buscando, encontré este código que adapté a una función para poderlo llamar cuando sea necesario (lo que no anoté de dónde lo saqué, por eso no puedo poner los créditos, si alguien lo sabe, que me lo diga y los añado):

Código PHP:
Ver original
  1. <?php
  2. function comprobarPedido($receipt) {
  3.  
  4.  
  5.     define('CB_DEVELOPER_KEY',  'DEV-');    // Tu Clave de DESARROLLADOR.
  6.     define('CB_CLERK_KEY',      'API-');    // Tu Clave de ASISTENTE.
  7.  
  8.  
  9.     define('VENDOR_ID', '');        // Dejalo vacío si quieres aceptar cualquier vendedor de CB
  10.     define('ERROR_ON_REFUND', 1);   // Muestra error si la compra fué reembolsada (1 or 0).
  11.     define('ERROR_ON_CANCEL', 1);   // Muestra error si una suscripción fue cancelada (1 or 0).
  12.  
  13.  
  14.  
  15.     // DEFINICIONES DE ERROR
  16.     define('ERROR_MSG_EMPTY_RECEIPT',           "No has ingresado ningún dato");
  17.     define('ERROR_MSG_INVALID_RECEIPT',         "El nº de compra es inválido");
  18.     define('ERROR_MSG_COULD_NOT_CONNECT',       "Oops! El Sistema no puede conectarse con el servidor de ClickBank. Por favor intenta mas tarde!");
  19.     define('ERROR_MSG_BAD_RECEIPT',             "No se puede encontrar esa compra");
  20.     define('ERROR_MSG_PARSE_ERROR',             "Sin resultados...");
  21.     define('ERROR_MSG_NO_ORDERDATA',            "La propiedad 'orderData' no existe.");
  22.     define('ERROR_MSG_INAPPROPRIATE_VENDOR',    "Nosotros no vendemos procuctos de este vendedor.");
  23.     define('ERROR_MSG_REFUNDED',                "Tu compra fue reembolsada.");
  24.     define('ERROR_MSG_CANCELED',                "Tu suscripción ha sido cancelada");
  25.  
  26.     if (substr($receipt, 0, 1) == '#') {
  27.         $receipt = trim(substr($receipt, 1));
  28.     }
  29.     if (preg_match('|^([0-9A-Z]*)[-]|', $receipt, $matches)) {
  30.         $receipt = $matches[1];
  31.     }
  32.     // CHEQUEA LOS VENDEDORES ACEPTADOS.
  33.     $acceptable_vendors = array();
  34.     $arr = explode(',', VENDOR_ID);
  35.     foreach($arr as $vendor_id) {
  36.         $vendor_id = trim($vendor_id);
  37.         if (preg_match('|^[0-9A-Z]{5,10}$|i', $vendor_id)) {
  38.             $acceptable_vendors[] = strtoupper($vendor_id);
  39.         }
  40.     }
  41.  
  42.     $err = false;
  43.  
  44.     // Chequea el formato de los códigos de pedido
  45.     if (!$err && $receipt == '') {
  46.         $err = ERROR_MSG_EMPTY_RECEIPT;
  47.     }
  48.     if (!$err && !preg_match('|^[0-9A-Z]{8,9}$|', $receipt)) {
  49.         $err = ERROR_MSG_INVALID_RECEIPT;
  50.     }
  51.  
  52.     if (!$err) {
  53.         $ch = curl_init();
  54.  
  55.         // CONECTA A LA API DE CB
  56.         curl_setopt($ch, CURLOPT_URL, 'https://api.clickbank.com/rest/1.3/orders/' . $receipt);
  57.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  58.         curl_setopt($ch, CURLOPT_HEADER, false);
  59.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  60.         curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  61.             'Accept: application/json',
  62.             'Authorization: ' . CB_DEVELOPER_KEY . ':' . CB_CLERK_KEY
  63.         ));
  64.         $result = curl_exec($ch);
  65.         if ($result === FALSE) { // NO PUEDE CONECTAR.
  66.             $err = ERROR_MSG_COULD_NOT_CONNECT;
  67.         } else {
  68.             $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  69.             if ($code != 200) {
  70.                 $err = ERROR_MSG_BAD_RECEIPT;
  71.             }
  72.         }
  73.         curl_close($ch);
  74.  
  75.        
  76.     @   $o = json_decode($result);
  77.         if (!$err && !is_object($o)) {
  78.             $err = ERROR_MSG_PARSE_ERROR;
  79.         }
  80.         if (!$err && !property_exists($o, 'orderData')) {
  81.             $err = ERROR_MSG_NO_ORDERDATA;
  82.         }
  83.  
  84.         // CHEQUEA LOS DATOS DE LA ORDEN
  85.         if (!$err) {
  86.             $data = is_array($o->orderData) ? $o->orderData : array($o->orderData);
  87.  
  88.             $refunded = false;
  89.             foreach($data as $record) {
  90.                 if ($record->txnType == 'RFND') {
  91.                     $refunded = true;
  92.                 }
  93.             }
  94.  
  95.             $canceled = (is_string($data[0]->status) && $data[0]->status == 'CANCELED');
  96.  
  97.             $site = strtoupper($data[0]->site);
  98.             $site_is_ok = sizeof($acceptable_vendors) == 0 ? true : in_array($site, $acceptable_vendors);
  99.  
  100.             if (!$site_is_ok) {
  101.                 $err = ERROR_MSG_INAPPROPRIATE_VENDOR;
  102.             } else if ($refunded && ERROR_ON_REFUND) {
  103.                 $err = ERROR_MSG_REFUNDED;
  104.             } else if ($canceled && ERROR_ON_CANCEL) {
  105.                 $err = ERROR_MSG_CANCELED;
  106.             }
  107.         }
  108.  
  109.     }
  110.  
  111.     if ($err) {
  112.                return $err;
  113.                 } else {
  114.                return "Correcto";
  115.                }
  116. }
  117.  
  118.  
  119. //Aquí el uso, como lo voy a usar con AJAX, lo he puesto así.
  120.  
  121. $resultado = comprobarPedido($receipt);
  122.  
  123.     if ($resultado != "Correcto") {
  124.  
  125.              echo "<h1 style=\"color: #F00;\">".$resultado."</h1><input type=\"button\" id=\"form_clickbank\" name=\"form_clickbank\" value=\"Reintentar\" onclick=\"javascript: location.reload()\">";
  126.              } else {
  127.  
  128.             echo "<h1 style=\"color: #F00;\">Correcto</h1>";
  129.            }
  130. ?>

Lo dejo aquí por si le sirve a alguien más y marco como solucionado el tema, para las posibles búsquedas.

Etiquetas: api, clickbank, manual, tutorial
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:26.