Una parte importante de tener éxito como vendedor de productos digitales es la de tomar precauciones para proteger su producto e impedir que se descargue en forma indebida. En esta guía, le ofrecemos varios pasos que puede tomar para mantener la seguridad de su producto.

Protección de su Página de Agradecimiento

Aquí hay algunas sugerencias para proteger su Página de Agradecimiento:

  1. Inserte el siguiente código HTML en el elemento <HEAD> de su Página de Agradecimiento; esto puede prevenir que un robot de motor de búsqueda indexe esa página o los siguientes enlaces en esa página:
    <META name="robots" content="noindex, nofollow"/>
  2. Déle a la dirección de URL de su Página de Agradecimiento un nombre de archivo que no sea obvio (no debe ser algo como agradecimiento.htm, que es muy fácil de adivinar)
  3. Si le preocupa la seguridad y tiene experiencia en programación de la interfaz de entrada común (CGI, Common Gateway Interface), puede generar un guión que verificará la conclusión satisfactoria del proceso de compra del cliente antes de permitirle acceso a la Página de Agradecimiento. Siga las instrucciones que aparecen a continuación para implementar el guión de seguridad de enlace de ClickBank.

Guión de seguridad de enlace de ClickBank

Cuando el cliente completa una compra, una gran cantidad de valores son transferidos a su Página de Agradecimiento, en la cadena de consulta, si usted especificó una clave secreta en su configuración de la cuenta. Estos valores son el número de recibo de ClickBank (cbreceipt), el momento del pedido (hora), el número de artículo ClickBank (artículo), y el billete de compra ClickBank (cbpop).

Durante la compra, ciframos el recibo, la hora y el artículo y usamos la clave secreta que especificó en su cuenta. Entonces le transferiremos el resultado en un parámetro de cadena de consulta llamado cbpop. Use el guión de validación para confirmar que el valor cbpop es correcto.

A diferencia de versiones anteriores de este guión, no se necesita un valor “seed”.

Los ejemplos C#, VB.NET y Ruby que se ofrecen a continuación constituyen solo un método para verificar la existencia de un valor cbpop válido y dejar la captura de los parámetros de la solicitud a cargo de sus implementaciones individuales. Estas muestras de códigos no se aplican al Servicio de notificación instantánea.


PHP SOURCE:

function cbValid()
{ $key='YOUR SECRET KEY';
  $rcpt=$_REQUEST['cbreceipt'];
  $time=$_REQUEST['time'];
  $item=$_REQUEST['item'];
  $cbpop=$_REQUEST['cbpop'];

  $xxpop=sha1("$key|$rcpt|$time|$item");
  $xxpop=strtoupper(substr($xxpop,0,8));

  if ($cbpop==$xxpop) return 1;
  else return 0;
}

PERL SOURCE:

sub cbValid
{ my($q,$key,$rcpt,$time,$item,$cbpop,$xxpop);
  $key='YOUR SECRET KEY';

  $q='&'.$ENV{'QUERY_STRING'};
  $q=~/Wcbreceipt=(w+)/; $rcpt=$1;
  $q=~/Wtime=(w+)/;      $time=$1;
  $q=~/Witem=(w+)/;      $item=$1;
  $q=~/Wcbpop=(w+)/;     $cbpop=$1;

  use Digest::SHA1 qw(sha1_hex);
  $xxpop=uc(substr(sha1_hex("$key|$rcpt|$time|$item"),0,8));
  return 1 if $cbpop eq $xxpop;
  return 0;
}

C# SOURCE:

public bool cbValid(string cbreceipt, string time, string item, string cbpop)
{
    string secret_key = "YOUR SECRET KEY";

    byte[] data = Encoding.Default.GetBytes(secret_key + "|" + cbreceipt + "|" + time + "|" + item);
    byte[] hashedData = new SHA1Managed().ComputeHash(data);

    string xxpop = BitConverter.ToString(hashedData).Replace("-","").ToUpper().Substring(0, 8);

    return cbpop.Equals(xxpop);
}

VB.NET SOURCE:

Public Function cbValid(ByVal receipt As String, ByVal time As String, ByVal item As String, ByVal cbpop As String) As Boolean
    Dim key As String = "YOUR SECRET KEY"
    Dim sha As New SHA1CryptoServiceProvider()
    Dim mash As String = key & "|" & receipt & "|" & time & "|" & item

    Dim result() As Byte = sha.ComputeHash(New System.Text.ASCIIEncoding().GetBytes(mash))

    Dim xxpop As String = BitConverter.ToString(result).Replace("-", "").ToUpper().Substring(0, 8)

    Return cbpop.Equals(xxpop)
End Function

Ruby SOURCE:

require 'digest/sha1'

def cbValid(receipt, time, item, cbpop)
  key = "YOUR SECRET KEY"

  popCheck = "#{key}|#{receipt}|#{time}|#{item}"
  xxpop = Digest::SHA1.hexdigest(popCheck).upcase[0,8]

  cbpop == xxpop
end

Python SOURCE:

import hashlib

def valid_cb_pop(receipt, time, item, cbpop):
    secret_key = 'YOUR SECRET KEY'
    data = "%s|%s|%s|%s" % (secret_key, receipt, time, item)
    return cbpop == hashlib.sha1(data).hexdigest()[:8].upper()

Java SOURCE:

import org.apache.commons.codec.digest.DigestUtils;

/**
* Note:  To make this method simple it uses the Apache Commons Codec library for computing the SHA value.
*        This library is available at: http://commons.apache.org/codec/
**/

public class CBPopValidator {

     /**
     * Code to validate cbpop parameter passed from ClickBank orderform to thank-you page.
     *
     * @param receipt The receipt number that ClickBank generated and passed to thank-you page.
     * @param time The time (unix timestamp) of the purchase, also passed to thank-you page
     * @param item The item purchased, also passed to thank-you page
     * @param cbpop The passed validation parameter
     * @return True of passed cbpop matches the calculated cbpop using the passed parameters and secret key
     **/
    public static boolean validCbPop(final String receipt, final String time, final String item, final String cbpop) {
        // secret key on the site of your ClickBank account
        final String secretKey = "YOUR SECRET KEY";

        // create sha1 of passed data with secret key
        String hashedData = DigestUtils.shaHex(String.format("%s|%s|%s|%s", secretKey, receipt, time, item));

        // compare hashed result to passed value
        return hashedData != null && hashedData.substring(0, 8).equalsIgnoreCase(cbpop);
    }
}

Related posts:

  1. Tener un alcance global con su producto
  2. Fijación de precios de su producto