Intereting Posts
Опубликовать MySQL Результат с помощью AJAX через jQuery Разделить php.ini для разных виртуальных хостов Могу ли я визуализировать представление, не возвращая его в контроллере действий в zend framework 2? Вызов функции в скрипте PHP из командной строки Как рассчитать «время назад» в php java-скрипт Оповещения о выпуске Unicode в IE 8 Laravel 5.3 Войти переадресации на разные страницы для нескольких пользователей Получить идентификатор автора сообщения в wordpress JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON (php) В PHP, как бы я разделил строку, где начальный и конечный разделитель отличаются друг от друга создание цикла для увеличения времени на 15 минут Как предотвратить перезагрузку файла phpstorm без подсказки при изменении файла на диске? Получите результаты от php exec (), пока команда все еще работает? Не удалось прочитать пару ключевых значений Json_encode в javascript Как получить и отобразить список видео с YouTube, используя javascript

PHP Curl Paypal Песочница

Можно ли использовать CURL и Sandbox разработчика Paypal? Когда я пробую этот код, он говорит в print_r ($ lines); что мне нужно войти в Песочницу, как я могу заставить его отправлять cookie-браузер?

Этот код находится на 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&amp;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/YH: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 } 

Solutions Collecting From Web of "PHP Curl Paypal Песочница"

Это должно работать:

 $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 } 

Также поиск $ _GET ['tx'] перестает работать после ~ 5 минут

Возможно, не совсем то, что вы хотите в качестве ответа, но я просто рекомендую этот сценарий, если вы хотите использовать PayPal из PHP:

http://www.micahcarrick.com/04-19-2005/php-paypal-ipn-integration-class.html

Очень чистый скрипт, который позволяет легко понять детали транзакции и редактировать вещи.

В нем также приводятся примеры использования сценария с песочницей PayPal. Если я правильно помню, вам просто нужно изменить одну переменную (и вам, очевидно, нужна учетная запись для песочницы).

Если кто-то использует java с paypal PDT .. apache commons httpclient 4.1 используется здесь.

 // 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("----------------------------------------------------"); }