невозможно получить информацию Paypal после успешной оплаты - PullRequest
1 голос
/ 12 января 2020

Я пытаюсь интегрировать PayPal оплаты на сайте продаж. клиентская часть работает хорошо, клиент платит, а деньги находятся на счете продавца. вторая часть, которая позволяет восстановить такие данные, как номер транзакции, сумма, адрес клиента, не работает. пока я использую скрипты, предоставляемые Paypal.

этот индекс файла. php для оплаты работ

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre class="snippet-code-html lang-html prettyprint-override"><code>    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
      <title>Radiofil</title>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css"
            integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" 
    		crossorigin="anonymous">
      
    </head>
    <body>

    <nav class="navbar navbar-expand-lg navbar-dark bg-primary mb-1">

      <a class="navbar-brand" href="#">Boutique Tubes</a>


    </nav>

    <div class="container">

      <h1>Récapitulatif</h1>

      <table class="table table-striped">
     
        <thead>
        <tr>
          <th>Tube</th>
          <th>Qte</th>
          <th>Prix</th>
    	  
        </tr>
        </thead>
        <tbody>

         <?php 
    	     $user_id = 8000;
    		 $RefBonCommande= '20000';
    	include('../config/dbconn.php');
    $query = mysqli_query($dbconn,"SELECT * FROM detailcde WHERE user_id='$user_id' AND RefBonCommande='$RefBonCommande'") or die (mysqli_error());

     while ($row3 = mysqli_fetch_array($query, MYSQLI_NUM)) {


    $count = mysqli_num_rows($query);
    	
    $numerotube=$row3[3];
    $qty= $row3[4];
    $totalp = $row3[5];

          echo "<tr>";
          echo  "<td>".$numerotube."</td>";
    	  echo "<td>".$qty."</td>";
    	  echo "<td>".$totalp.'€'."</td>";
    }
    	$query1 = mysqli_query($dbconn,"SELECT * FROM commandes WHERE Refcde='$RefBonCommande' AND adherent1='$user_id'") or die (mysqli_error()); 
    	$row4 = mysqli_fetch_array($query1);
    	$port=$row4['FraisTransport'];
    	$total=$row4['Total'];
    	  echo "<tr>";
          echo  "<td>".'Total + port '."</td>";
    	  echo "<td>".'1 '."</td>";
    	  echo "<td>".$total.'€'."</td>";
    	  echo "<tr>";
    	  echo "<td><b><font size = 5>".'Commande de l\'adherent RFL n° '.$user_id."</b></br></td>"; 
    ?>
        </tbody>
      </table>

      <!--<p class="text-right">
        <div id="paypal-button"></div>
        <!--<a href="payment.php" class="btn btn-success">Acheter</a>-->
      </p>

    </div><!-- /.container -->

      <script
        src="https://www.paypal.com/sdk/js?client-id=client-id&currency=EUR"> // Required. Replace SB_CLIENT_ID with your sandbox client ID.

        paypal.Buttons().render('#paypal-button-container');

        // This function displays Smart Payment Buttons on your web page.
    	</script>
    <center>	
      <div id="paypal-button-container"></div> 
      </center>
      <script>
      paypal.Buttons({
        createOrder: function(data, actions) {
          return actions.order.create({
            purchase_units: [{
              amount: {
                value: <?php echo $total ;?>  //'5.60'
              }
            }]
          });
        },
        onApprove: function(data, actions) {
          return actions.order.capture().then(function(details) {
            alert('Transaction completed by adherent ' + details.payer.name.given_name);
            // Call your server to save the transaction
            return fetch('/paypal-transaction-complete', {
              method: 'post',
              headers: {
                'content-type': 'application/json'
              },
              body: JSON.stringify({
                orderID: data.orderID,
    			payerID: data.payerID
    			})
    			
            });
          });
        }
      }).render('#paypal-button-container');

      </script>

    </body>
    </html>
** скрипт ниже не Работа** // 1. Настройте сервер для совершения звонков в PayPal // 1a. Добавьте свой идентификатор клиента и секретный PAYPAL_CLIENT = cliet id '; PAYPAL_SECRET = секретный; // 1б. Укажите свой сервер на PayPal API PAYPAL_OAUTH_API = 'https://api.sandbox.paypal.com/v1/oauth2/token/'; PAYPAL_ORDER_API = 'https://api.sandbox.paypal.com/v2/checkout/orders/'; // 1 c. Получить токен доступа из API PayPal basicAuth = base64encode (`$ {PAYPAL_CLIENT}: $ {PAYPAL_SECRET}`); auth = http.post (PAYPAL_OAUTH_API, {заголовки: {Accept: `application / json`, авторизация:` Basi c $ {basicAuth} `}, данные:` grant_type = client_credentials`}); // 2. Настройка вашего сервера на прием вызова от клиентской функции handleRequest (запрос, ответ), {// 2a. Получить идентификатор заказа из тела запроса orderID = request.body.orderID; // 3. Вызов PayPal для захвата захвата заказа = http.post (PAYPAL_ORDER_API + orderID + '/ capture', {headers: {Accept: `application / json`, авторизация:` Bearer $ {auth.access_token} `}} ); // 4. Сохраняем идентификатор захвата в вашей базе данных if (! Capture.error) {captureID = capture.purchase_units [0] .payments.captures [0] .id; database.saveCaptureID (captureID); } // 5. Обрабатываем любые ошибки из вызова if (capture.error) {console.error (capture.error); return response.send (500); } // 6. Вернуть успешный ответ клиенту response.send (200); } привет, по совету PHPology я настроил URL обратного вызова и, конечно, использовал скрипт PAYPAL. Я пошел в историю сообщений IPN, и у меня есть ошибка HTTP 500. Я думаю, что может быть синтаксическая ошибка в скрипте PAYPAL, они специалисты в этом виде ошибок. $ value) {$ post_string. = $ field. знак равно urlencode (штрихи-черты ($ value)). '&'; } $ post_string. = "cmd = _notify-validate"; // добавляем команду ipn // получаем правильный адрес PayPal для отправки запроса в $ paypal_mode_status = $ ipn_data; // get_option ( 'im_sabdbox_mode'); if ($ paypal_mode_status == true) $ fp = fsockopen ('ssl: // www.sandbox.paypal.com', "443", $ err_num, $ err_str, 60); иначе $ fp = fsockopen ('ssl: // www.sandbox.paypal.com', "443", $ err_num, $ err_str, 60); $ ipn_response = ''; if (! $ fp) {// не удалось открыть соединение. Если loggin включен, сообщение об ошибке // будет в журнале. $ ipn_status = "ошибка fsockopen №. $ err_num: $ err_str"; if ($ ipn_data == true) {echo 'fsockopen fail'; } вернуть ложь; } else {// Отправка данных обратно в paypal fputs ($ fp, "POST $ url_parsed [path] HTTP / 1.1 \ r \ n"); fputs ($ fp, "Хост: $ url_parsed [хост] \ r \ n"); fputs ($ fp, "Content-type: application / x- www-form-urlencoded \ r \ n"); fputs ($ fp, "Content-length:". strlen ($ post_string). "\ r \ n"); fputs ($ fp, "Соединение: закрыть \ r \ n \ r \ n"); fputs ($ fp, $ post_string. "\ r \ n \ r \ n"); // l oop через ответ от сервера и добавление к переменной while (! feof ($ fp)) {$ ipn_response. = fgets ($ fp, 1024); } fclose ($ fp); // закрыть соединение} // Неверная транзакция IPN. Проверьте $ ipn_status и войдите в систему для получения подробной информации. if (! preg_match ("/ VERIFIED / s", $ ipn_response)) {$ ipn_status = 'Ошибка проверки IPN'; if ($ ipn_data == true) {echo 'Ошибка проверки'; print_r ($ _ REQUEST); } вернуть ложь; } else {$ ipn_status = "IPN VERIFIED"; if ($ ipn_data == true) {echo 'SUCCESS'; print_r ($ _ REQUEST); } верните истину; }} function ipn_response () {// mail ("sobhagya1411@gmail.com", "Моя тема", print_r ($ request, true)); $ ipn_data = true; if ($ this-> ipn ($ _ REQUEST)) {$ this-> insert_data ($ _ REQUEST); }} function issetCheck ($ post, $ key) {if (isset ($ post [$ key])) {$ return = $ post [$ key]; } else {$ return = ''; } return $ return; } publi c function insert_data () {$ post = $ _REQUEST; $ item_name = $ this-> issetCheck ($ post, 'item_name'); $ amount = $ this-> issetCheck ($ post, 'mc_gross'); $ currency = $ this-> issetCheck ($ post, 'mc_currency'); $ payer_email = $ this-> issetCheck ($ post, 'payer_email'); $ first_name = $ this-> issetCheck ($ post, 'first_name'); $ last_name = $ this-> issetCheck ($ post, 'last_name'); $ country = $ this-> issetCheck ($ post, Residence_country '); $ txn_id = $ this-> issetCheck ($ post, 'txn_id'); $ txn_type = $ this-> issetCheck ($ post, 'txn_type'); $ payment_status = $ this-> issetCheck ($ post, 'payment_status'); $ payment_type = $ this-> issetCheck ($ post, 'payment_type'); $ payer_id = $ this-> issetCheck ($ post, 'payer_id'); $ create_date = date ('Ymd H: i: s'); $ payment_date = date ('Ymd H: i: s'); $ paypal_ sql = "INSERT INTO ipn_data_tbl (item_name, payer_email, first_name, фамилия_имя, сумма, валюта, страна, txn_id, txn_type, payer_id, payment_status, payment_type, create_date, payment_date 'payment' '' pay_ee_name ', $ item_ $ $ first_name ' '$ last_name', '$ сумма', '$ валюты', '$ страна', '$ txn_id', '$ txn_type', '$ payer_id', '$ payment_status', '$ payment_type',' $ create_date», '$ PAYMENT_DATE')"; mysql_query ($ paypal_ sql); }?>

1 Ответ

0 голосов
/ 24 января 2020

Я решаю проблему. Paypal предоставляет скрипты, которые не работают из-за синтаксических ошибок. Их объяснение методов очень неясно. Наконец, после внесения некоторых изменений в синтаксис и URL-адрес мое программное обеспечение php IPN paypal IPN listener работает.

<?php

$charset = "utf-8";

include('../config/dbconn.php');
	$deb='je commence';
	mysqli_query($dbconn,"INSERT INTO paytest (mess) VALUES ('$deb')");

/* NE RIEN MODIFIER CI-DESSOUS */

// lecture du post de PayPal et ajout de 'cmd'
$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value) {
$value = trim(urlencode(stripslashes($value)));
$req .= "&$key=$value";
}

//mysqli_query($dbconn,"INSERT INTO paytest (mess) VALUES ('$req')");

// reponse a PayPal pour validation
$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
//$header .= "Content-Length: 1028\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Host: www.sandbox.paypal.com\r\n";
$header .= "Connection: close\r\n\r\n";
//$header .= "Host: ipnpb.paypal.com:443\r\n";

$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
//$fp = fsockopen ('ipnpb.paypal.com', 443, $errno, $errstr, 30);
mysqli_query($dbconn,"INSERT INTO paytest (mess) VALUES ('fp1')");
mysqli_query($dbconn,"INSERT INTO paytest (mess) VALUES ('$fp')");

// variables
$discount = $_POST['discount'];
$insurance_amount = $_POST['insurance_amount'];
$payer_id = $_POST['payer_id'];
$address_country_code = $_POST['address_country_code'];
$ipn_track_id = $_POST['ipn_track_id'];
$address_zip = $_POST['address_zip'];
$charset = $_POST['charset'];
$payment_gross = $_POST['payment_gross'];
$address_status = $_POST['address_status'];
$shipping_discount = $_POST['shipping_discount'];
$address_street = $_POST['address_street'];
$verify_sign = $_POST['verify_sign'];
$item_name = $_POST['item_name'];
$test_ipn = $_POST['test_ipn'];
$txn_type = $_POST['txn_type'];
$receiver_id = $_POST['receiver_id'];
$payment_fee = $_POST['payment_fee'];
$mc_currency = $_POST['mc_currency'];
$transaction_subject = $_POST['transaction_subject'];
$shipping_method = $_POST['shipping_method'];
$custom = $_POST['custom'];
$protection_eligibility = $_POST['protection_eligibility'];
$address_country = $_POST['address_country'];
$payer_status = $_POST['payer_status'];
$first_name = $_POST['first_name'];
$address_name = $_POST['address_name'];
$mc_gross = $_POST['mc_gross'];
$payment_date = $_POST['payment_date'];
$payment_status = $_POST['payment_status'];
$quantity = $_POST['quantity'];
$business = $_POST['business'];
$item_number = $_POST['item_number'];
$last_name = $_POST['last_name'];
$address_state = $_POST['address_state'];
$txn_id = $_POST['txn_id'];
$mc_fee = $_POST['mc_fee'];
$payment_type = $_POST['payment_type'];
$notify_version = $_POST['notify_version'];
$payer_email = $_POST['payer_email'];
$receiver_email = $_POST['receiver_email'];
$address_city = $_POST['address_city'];
$residence_country = $_POST['residence_country'];

$payment_currency = $_POST['mc_currency'];
$receiver_id = $_POST['receiver_id'];
$num_cart_items = $_POST['num_cart_items'];


mysqli_query($dbconn,"INSERT INTO paytest (mess) VALUES ('$txn_id')");
mysqli_query($dbconn,"INSERT INTO paytest (mess) VALUES ('Date')");
mysqli_query($dbconn,"INSERT INTO paytest (mess) VALUES ('$payment_date')");
$rest = substr($payment_date, 9, 13);
$mois = substr($rest, 0, 3);
$jour = substr($rest, 4, 2);
$an = substr($rest, 8, 4);
$date = $an.'-'.$mois.'-'.$jour;
$date = date_create($date);
$dte = date_format($date,'Y-m-d');

if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
fseek($fp, 0);
while (!feof($fp)) {
$res = fgets ($fp, 10024);
//$test=strcmp (trim($res), "VERIFIED");
//if (strcmp ($res, "VERIFIED") == 0) {
if (strcmp (trim($res), "VERIFIED") == 0) {
$deba = 'verifie';
mysqli_query($dbconn,"INSERT INTO paytest (mess) VALUES ('$deba')");
// Envoi du mail
   
 	$paypal_sql = "INSERT INTO paiements (payment_id,payment_status,payment_amount,taxe_paypal,payment_currency,payment_date,payer_email)
    VALUES ('$txn_id','$payment_status','$mc_gross','$mc_fee','$mc_currency','$dte','$payer_email')";
    mysqli_query($dbconn,$paypal_sql); 


}
else if (strcmp (trim($res), "INVALID") == 0) {
$debb = 'invalide';
mysqli_query($dbconn,"INSERT INTO paytest (mess) VALUES ('$debb')");

	$payment_status = 'INVALID';
 	$paypal_sql = "INSERT INTO paiements (payment_id,payment_status,payment_amount,taxe_paypal,payment_currency,payment_date,payer_email)
    VALUES ('$txn_id','$payment_status','$mc_gross','$mc_fee','$mc_currency','$dte','$payer_email')";
    mysqli_query($dbconn,$paypal_sql); 


}
}
fclose ($fp);
}
$debc = 'fini';
mysqli_query($dbconn,"INSERT INTO paytest (mess) VALUES ('$debc')");
?>

 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...