<?php

    
/*
    
        <?php

        include 'class.paypal.php';

        $config = array(
            'cert_id' => 'YV2YVYKJD8YXY',
            'business' => 'seller_1207770619_biz@yahoo.es',
            'openssl' => '/usr/bin/openssl',
            'my_cert' => 'certificates/my-pubcert.pem',
            'my_key' => 'certificates/my-prvkey.pem',
            'paypal_cert' => 'certificates/paypal_cert.pem'
        );

        $paypal = new PayPal($config);

        //puedes hacer de dos formas, usand $paypal->add o directamente un array sobre encrypt
        $form = array(
            'cmd' => '_xclick',
            'item_name' => 't-shirt 13',
            'item_number' => '12',
            'amount' => '4500.00'
        );

        $encrypted = $paypal->encrypt($form);

        ?>
        <html>
        <head>
        <title>PHP Sample using PayPal Encrypted Buttons</title>
        </head>
        <body>
        <h1>Sample Donation Page</h1>
        <p>This page uses encrypted PayPal buttons for your security.</p>
        <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
        <input type="hidden" name="cmd" value="_s-xclick">
        <input type="hidden" name="encrypted" value="<?PHP echo $encrypted; ?>">
        <input type="submit" value="Buy">
        </form>
        </body>
        </html>
    
    */

class PayPal {
    
    var 
$config = array();
    var 
$params = array();
    var 
$encrypt null;
    
    function 
PayPal($config= array()) {
        
$this->config $config;
        
$this->add('cert_id'$config['cert_id']);
        
$this->add('business'$config['business']);
    }
    
    function 
add($name=''$value='') {
        if(
$name$this->params[$name] = $value;
    }
    
    function 
command() {
        return    
$this->config['openssl'].' smime -sign -signer '.$this->config['my_cert'].' -inkey '.$this->config['my_key'].
                
' -outform der -nodetach -binary | '.$this->config['openssl'].' smime -encrypt'.
                
' -des3 -binary -outform pem '.$this->config['paypal_cert'];
    }
    
    function 
openssl() {
        
$descriptors = array(
               
=> array('pipe''r'),
            
=> array('pipe''w'),
        );
        
$process proc_open($this->command(), $descriptors$pipes);
        if(
is_resource($process)) {
            foreach(
$this->params as $key => $value) { 
                
fwrite($pipes[0], "$key=$value\n"); 
            }
            
fflush($pipes[0]);
            
fclose($pipes[0]);
            
$output = array();
            while (!
feof($pipes[1])) {
                
$output[] = fgets($pipes[1]);
            }
            
fclose($pipes[1]); 
            
proc_close($process);
            return 
join(''$output);
        }
        return 
false;
    }
    
    function 
encrypt($params=array()) {
        
$this->params array_merge($this->params$params);
        
$this->encrypt $this->openssl();
        return 
$this->encrypt;
    }
    
}


?>