簡體   English   中英

支付成功后無法檢索Paypal信息

[英]impossible to retrieve Paypal information after successful payment

我正在嘗試在銷售網站上集成貝寶付款。 客戶部分運作良好,客戶付款,錢在賣家賬戶中。 允許恢復交易號、金額、客戶地址等數據的第二部分不起作用。 但我使用 Paypal 提供的腳本。

這個文件 index.php 支付作品


  
 
  
  
  
    <!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>
**the script below does not work** <!-- language: lang-PHP --> <?php require 'vendor/autoload.php'; ?> <script> // 1. Set up your server to make calls to PayPal // 1a. Add your client ID and secret PAYPAL_CLIENT = cliet id'; PAYPAL_SECRET = secret'; // 1b. Point your server to the PayPal API PAYPAL_OAUTH_API = 'https://api.sandbox.paypal.com/v1/oauth2/token/'; PAYPAL_ORDER_API = 'https://api.sandbox.paypal.com/v2/checkout/orders/'; // 1c. Get an access token from the PayPal API basicAuth = base64encode(`${ PAYPAL_CLIENT }:${ PAYPAL_SECRET }`); auth = http.post(PAYPAL_OAUTH_API ,{ headers: { Accept: `application/json`, Authorization: `Basic ${ basicAuth }` }, data: `grant_type=client_credentials` }); // 2. Set up your server to receive a call from the client function handleRequest(request, response), { // 2a. Get the order ID from the request body orderID = request.body.orderID; // 3. Call PayPal to capture the order capture = http.post(PAYPAL_ORDER_API + orderID + '/capture', { headers: { Accept: `application/json`, Authorization: `Bearer ${ auth.access_token }` } }); // 4. Save the capture ID to your database if (!capture.error) { captureID = capture.purchase_units[0] .payments.captures[0].id; database.saveCaptureID(captureID); } // 5. Handle any errors from the call if (capture.error) { console.error(capture.error); return response.send(500); } // 6. Return a successful response to the client response.send(200); } hello, according to the advice of PHPology I set up the return call URL and of course used the PAYPAL script. I went to the history of IPN messages and I have an HTTP 500 error. I think there may be a syntax error in the PAYPAL script they are specialists in this kind of error. <?php function ipn($ipn_data) { define('SSL_P_URL', 'https://www.paypal.com/cgi-bin/webscr'); define('SSL_SAND_URL', 'https://www.sandbox.paypal.com/cgi-bin/webscr'); $hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']); if (!preg_match('/paypal\.com$/', $hostname)) { $ipn_status = 'Validation post isn\'t from PayPal'; if ($ipn_data == true) { //You can send email as well } return false; } // parse the paypal URL $paypal_url = ($_REQUEST['test_ipn'] == 1) ? SSL_SAND_URL : SSL_P_URL; $url_parsed = parse_url($paypal_url); $post_string = ''; foreach ($_REQUEST as $field => $value) { $post_string .= $field . '=' . urlencode(stripslashes($value)) . '&'; } $post_string.="cmd=_notify-validate"; // append ipn command // get the correct paypal url to post request to $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); else $fp = fsockopen('ssl://www.sandbox.paypal.com', "443", $err_num, $err_str, 60); $ipn_response = ''; if (!$fp) { // could not open the connection. If loggin is on, the error message // will be in the log. $ipn_status = "fsockopen error no. $err_num: $err_str"; if ($ipn_data == true) { echo 'fsockopen fail'; } return false; } else { // Post the data back to paypal fputs($fp, "POST $url_parsed[path] HTTP/1.1\r\n"); fputs($fp, "Host: $url_parsed[host]\r\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-length: " . strlen($post_string) . "\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $post_string . "\r\n\r\n"); // loop through the response from the server and append to variable while (!feof($fp)) { $ipn_response .= fgets($fp, 1024); } fclose($fp); // close connection } // Invalid IPN transaction. Check the $ipn_status and log for details. if (!preg_match("/VERIFIED/s", $ipn_response)) { $ipn_status = 'IPN Validation Failed'; if ($ipn_data == true) { echo 'Validation fail'; print_r($_REQUEST); } return false; } else { $ipn_status = "IPN VERIFIED"; if ($ipn_data == true) { echo 'SUCCESS'; print_r($_REQUEST); } return true; } } function ipn_response() { //mail("sobhagya1411@gmail.com","My subject",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; } public 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('Y-m-d H:i:s'); $payment_date = date('Y-m-d H:i:s'); $paypal_sql = "INSERT INTO ipn_data_tbl (item_name,payer_email,first_name,last_name,amount,currency,country,txn_id,txn_type,payer_id,payment_status,payment_type,create_date,payment_date) VALUES ($item_name,'$payer_email','$first_name','$last_name','$amount','$currency','$country','$txn_id','$txn_type','$payer_id','$payment_status','$payment_type','$create_date','$payment_date')"; mysql_query($paypal_sql); } ?>

我解決了這個問題。 Paypal 提供的腳本由於存在語法錯誤而無法運行。 他們對方法的解釋非常模糊。 最后在進行一些語法和 url 修改后,我的 php IPN paypal IPN 偵聽器軟件可以工作了。

 <?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,'Ym-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')"); ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM