Ver Mensaje Individual
  #12 (permalink)  
Antiguo 21/11/2015, 12:47
rbczgz
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 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.