Pregunta

¿Es posible utilizar Curl y desarrollador de PayPal Sandbox? Cuando trato de este código se dice en print_r ($ líneas); que necesito para iniciar sesión en el recinto de seguridad, ¿cómo puedo hacer que envíe mi cookie del navegador?

Este código es de http: //leepeng.blogspot. com / 2006/04 / standard-paypal-php-integration.html

   $orderno = $_SESSION["ss_last_orderno"];
    $ppAcc = "[SELLER HERE]";
    $at = "[AT HERE]"; //PDT Identity Token
    $url = "https://www.sandbox.paypal.com/cgi-bin/webscr"; //Test
    //$url = "https://www.paypal.com/cgi-bin/webscr"; //Live
    $tx = $_REQUEST['tx']; //this value is return by PayPal
    $cmd = "_notify-synch";
    $post = "tx=$tx&at=$at&cmd=$cmd";

    //Send request to PayPal server using CURL
    $ch = curl_init ($url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    curl_setopt ($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt ($ch, CURLOPT_POST, 1);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);

    $result = curl_exec ($ch); //returned result is key-value pair string
    $error = curl_error($ch);

    if (curl_errno($ch) != 0) //CURL error
    exit("ERROR: Failed updating order. PayPal PDT service failed.");

    $longstr = str_replace("\r", "", $result);
    $lines = split("\n", $longstr);
    print_r($lines);
    //parse the result string and store information to array
    if ($lines[0] == "SUCCESS") {
    //successful payment
    $ppInfo = array();
    for ($i=1; $i<count($lines); $i++) {
    $parts = split("=", $lines[$i]);
    if (count($parts)==2) {
    $ppInfo[$parts[0]] = urldecode($parts[1]);
    }
    }

    $curtime = gmdate("d/m/Y H:i:s");
    //capture the PayPal returned information as order remarks
    $oremarks =
    "##$curtime##\n".
    "PayPal Transaction Information...\n".
    "Txn Id: ".$ppInfo["txn_id"]."\n".
    "Txn Type: ".$ppInfo["txn_type"]."\n".
    "Item Number: ".$ppInfo["item_number"]."\n".
    "Payment Date: ".$ppInfo["payment_date"]."\n".
    "Payment Type: ".$ppInfo["payment_type"]."\n".
    "Payment Status: ".$ppInfo["payment_status"]."\n".
    "Currency: ".$ppInfo["mc_currency"]."\n".
    "Payment Gross: ".$ppInfo["payment_gross"]."\n".
    "Payment Fee: ".$ppInfo["payment_fee"]."\n".
    "Payer Email: ".$ppInfo["payer_email"]."\n".
    "Payer Id: ".$ppInfo["payer_id"]."\n".
    "Payer Name: ".$ppInfo["first_name"]." ".$ppInfo["last_name"]."\n".
    "Payer Status: ".$ppInfo["payer_status"]."\n".
    "Country: ".$ppInfo["residence_country"]."\n".
    "Business: ".$ppInfo["business"]."\n".
    "Receiver Email: ".$ppInfo["receiver_email"]."\n".
    "Receiver Id: ".$ppInfo["receiver_id"]."\n";

    //Update database using $orderno, set status to Paid
    //Send confirmation email to buyer and notification email to merchant
    //Redirect to thankyou page
    }

    //Payment failed
    else {

    print "Please try again...";
    //Delete order information
    //Redirect to failed page
    } 
¿Fue útil?

Solución

Esto debería funcionar:     

$tid = $_GET['tx'];
$auth_token = "zzzzzzzzzzzzzzzzzzzz";
$paypal_url = "www.sandbox.paypal.com";

$url = "https://" . $paypal_url . "/cgi-bin/webscr";

$post_vars = "cmd=_notify-synch&tx=" . $tid . "&at=" . $auth_token;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_vars);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'cURL/PHP');

$fetched = curl_exec($ch);



$lines = explode("\n", $fetched);
$keyarray = array();
if (strcmp ($lines[0], "SUCCESS") == 0) {
for ($i=1; $i<count($lines);$i++){
list($key,$val) = explode("=", $lines[$i]);
$keyarray[urldecode($key)] = urldecode($val);
}
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
$firstname = $keyarray['first_name'];
$lastname = $keyarray['last_name'];
$itemname = $keyarray['num_cart_items'];
$amount = $keyarray['mc_gross'];

echo ("<h2>Thank you for your purchase!</h2>");

}
else if (strcmp ($lines[0], "FAIL") == 0) {
    echo ("<h2>Sorry, something went wrong</h2>");

// log for manual investigation

}

También $ _GET [ 'tx'] mirar hacia arriba deja de funcionar después de ~ 5 minutos

Otros consejos

Tal vez no es exactamente lo que desea como una respuesta, pero me acaba de seguir la recomendación de este script si desea utilizar PayPal desde PHP:

http: //www.micahcarrick .com / 04.19.2005 / php--paypal IPN-integración-class.html

guión muy limpio, lo que hace que sea fácil de entender las partes de una transacción y editar cosas.

También viene con ejemplos proporcionados sobre cómo utilizar la secuencia de comandos con el recinto de seguridad de PayPal. Si no recuerdo mal, sólo hay que cambiar una variable (y obviamente necesita una cuenta de la caja de arena).

Si alguien usando Java con paypal PDT .. apache commons httpclient 4.1 se utiliza aquí ..

// Imports ----------------
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
// end of imports ---------------

            HttpClient httpclient = new DefaultHttpClient();  
            HttpParams myParams = httpclient.getParams();
            HttpConnectionParams.setConnectionTimeout(myParams,40000);
            HttpConnectionParams.setSoTimeout(myParams,40000);
            HttpPost httppost = new HttpPost("https://www.sandbox.paypal.com/cgi-bin/webscr");             
            httppost.setHeader("Content-Type", "application/x-www-form-urlencoded");

         try {  
                // Add your data  

                String txToken = "xxxxxxxxxxxx";
                String authToken = "xxxxxxxxxxxxxxxxxxxxxxxxx";                 

                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
                nameValuePairs.add(new BasicNameValuePair("cmd", "_notify-synch"));  
                nameValuePairs.add(new BasicNameValuePair("tx", txToken));  
                nameValuePairs.add(new BasicNameValuePair("at", authToken));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                HttpResponse response = httpclient.execute(httppost);  

                InputStream is = response.getEntity().getContent();
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                StringBuilder str = new StringBuilder();
                String line = null;

                while((line = reader.readLine()) != null){
                     str.append(line + "\n");
                }
                is.close();
                     String responseText = str.toString();
                     logger.info("----------------------------------------------------");
                     logger.info("RESPONSE : " + responseText);
                     logger.info("----------------------------------------------------");     
                     getContext().getResponse().getWriter().write(responseText);                


             }
             catch (Exception e) {  
                     logger.info("----------------------------------------------------");
                     logger.info("ERROR : " + e.getMessage());
                     logger.info("----------------------------------------------------");    
             }   
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top