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<?php
function comprobarPedido($receipt) {
define('CB_DEVELOPER_KEY', 'DEV-'); // Tu Clave de DESARROLLADOR. define('CB_CLERK_KEY', 'API-'); // Tu Clave de ASISTENTE.
define('VENDOR_ID', ''); // Dejalo vacío si quieres aceptar cualquier vendedor de CB define('ERROR_ON_REFUND', 1); // Muestra error si la compra fué reembolsada (1 or 0). define('ERROR_ON_CANCEL', 1); // Muestra error si una suscripción fue cancelada (1 or 0).
// DEFINICIONES DE ERROR
define('ERROR_MSG_EMPTY_RECEIPT', "No has ingresado ningún dato"); define('ERROR_MSG_INVALID_RECEIPT', "El nº de compra es inválido"); define('ERROR_MSG_COULD_NOT_CONNECT', "Oops! El Sistema no puede conectarse con el servidor de ClickBank. Por favor intenta mas tarde!"); define('ERROR_MSG_BAD_RECEIPT', "No se puede encontrar esa compra"); define('ERROR_MSG_PARSE_ERROR', "Sin resultados..."); define('ERROR_MSG_NO_ORDERDATA', "La propiedad 'orderData' no existe."); define('ERROR_MSG_INAPPROPRIATE_VENDOR', "Nosotros no vendemos procuctos de este vendedor."); define('ERROR_MSG_REFUNDED', "Tu compra fue reembolsada."); define('ERROR_MSG_CANCELED', "Tu suscripción ha sido cancelada");
if (substr($receipt, 0, 1) == '#') { }
if (preg_match('|^([0-9A-Z]*)[-]|', $receipt, $matches)) { $receipt = $matches[1];
}
// CHEQUEA LOS VENDEDORES ACEPTADOS.
$acceptable_vendors = array(); foreach($arr as $vendor_id) {
$vendor_id = trim($vendor_id); if (preg_match('|^[0-9A-Z]{5,10}$|i', $vendor_id)) { }
}
$err = false;
// Chequea el formato de los códigos de pedido
if (!$err && $receipt == '') {
$err = ERROR_MSG_EMPTY_RECEIPT;
}
if (!$err && !preg_match('|^[0-9A-Z]{8,9}$|', $receipt)) { $err = ERROR_MSG_INVALID_RECEIPT;
}
if (!$err) {
// CONECTA A LA API DE CB
curl_setopt($ch, CURLOPT_URL
, 'https://api.clickbank.com/rest/1.3/orders/' . $receipt); 'Accept: application/json',
'Authorization: ' . CB_DEVELOPER_KEY . ':' . CB_CLERK_KEY
));
if ($result === FALSE) { // NO PUEDE CONECTAR.
$err = ERROR_MSG_COULD_NOT_CONNECT;
} else {
if ($code != 200) {
$err = ERROR_MSG_BAD_RECEIPT;
}
}
$err = ERROR_MSG_PARSE_ERROR;
}
if (!$err && !property_exists($o, 'orderData')) {
$err = ERROR_MSG_NO_ORDERDATA;
}
// CHEQUEA LOS DATOS DE LA ORDEN
if (!$err) {
$data = is_array($o->orderData) ?
$o->orderData : array($o->orderData);
$refunded = false;
foreach($data as $record) {
if ($record->txnType == 'RFND') {
$refunded = true;
}
}
$canceled = (is_string($data[0]->status) && $data[0]->status == 'CANCELED');
$site_is_ok = sizeof($acceptable_vendors) == 0 ?
true : in_array($site, $acceptable_vendors);
if (!$site_is_ok) {
$err = ERROR_MSG_INAPPROPRIATE_VENDOR;
} else if ($refunded && ERROR_ON_REFUND) {
$err = ERROR_MSG_REFUNDED;
} else if ($canceled && ERROR_ON_CANCEL) {
$err = ERROR_MSG_CANCELED;
}
}
}
if ($err) {
return $err;
} else {
return "Correcto";
}
}
//Aquí el uso, como lo voy a usar con AJAX, lo he puesto así.
$resultado = comprobarPedido($receipt);
if ($resultado != "Correcto") {
echo "<h1 style=\"color: #F00;\">".$resultado."</h1><input type=\"button\" id=\"form_clickbank\" name=\"form_clickbank\" value=\"Reintentar\" onclick=\"javascript: location.reload()\">";
} else {
echo "<h1 style=\"color: #F00;\">Correcto</h1>";
}
?>
Lo dejo aquí por si le sirve a alguien más y marco como solucionado el tema, para las posibles búsquedas.