Ответ Paypal получает "Сбой"


Я интегрирую paypal в свою корзину покупок Вот моя форма передачи стоимости

      <h3>By Paypal</h3><hr/>
       <label>Click Here</label>
       <br/>
     <?php
      include 'controller/connection.php';
      $paypal_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
      $paypal_id = '[email protected]';                                                                                                                                $cancel_url = 'http://my-website/index.php?action=cancel';
      $return_url = 'http://my-website/store.php';
      $i = 0;
      $products = array();
      $qry = mysql_query("select * from temp_cart where tokenId='$token'");
      while ($row = mysql_fetch_array($qry)) {
      $pid = $row[0];
      $pname = $row[1];
      $qty = $row[3];
      $price = $row[4];
      $amount = $row[5];
      $products[] = array('pid' => $pid, 'pname' => $pname, 'qty' => $qty, 'price' => $price, 'amount' => $amount);
       }
    ?>
     <form action="<?php echo $paypal_url;?>" method="post">
     <input type="hidden" name="cmd" value="_cart">
     <input type="hidden" name="upload" value="1">
     <input type="hidden" name="add" value="1">
     <input type="hidden" name="business" value="<?php echo $paypal_id;?>">
             <?php
             foreach ($products as $product) {
             $i++;
              //echo $product['amount'];
              ?>
             <input type="hidden" name="item_name_<?php echo $i;?>" value="<?php echo $product['pname']?>">
             <input type='hidden' name='item_number_<?php echo $i;?>' value='<?php echo $product['pid'] ?>' />

             <input type="hidden" name="amount_<?php echo $i;?>" value="<?php echo $product['amount']?>">
            <?php
              }
             ?>

        <input type='image' src='https://www.sandbox.paypal.com/en_US/i/btn/btn_buynow_SM.gif' name='submit' style='display:{$display_button}' />
   </form>

Это работает правильно. Но после оплаты, когда я перенаправляю с paypal, я получаю ответ с ОШИБКОЙ.Но в моей учетной записи "Ящик для отправки" он показывает, что я ЗАВЕРШЕН.И показывает мне ТЕЛЕЖКУ. Мой код для получения ответа от PayPal:-

<?php
session_start();

//include('connection.php');
/*
 update: 06/27/2011
  - updated to use cURL for better security, assumes PHP version 5.3
*/

// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-synch';

$tx_token = $_GET['tx'];

$pp_hostname = "www.sandbox.paypal.com"; 

// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-synch';

$tx_token = $_GET['tx'];
$auth_token = "MY API TOKEN";
$req .= "&tx=$tx_token&at=$auth_token";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://$pp_hostname/cgi-bin/webscr");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
//set cacert.pem verisign certificate path in curl using 'CURLOPT_CAINFO' field here,
//if your server does not bundled with default verisign certificates.
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: $pp_hostname"));
$res = curl_exec($ch);
curl_close($ch);

if(!$res){
    //HTTP ERROR
}else{
     // parse the data
    $lines = explode("\n", $res);
    $keyarray = array();
    echo $lines[0];

    echo "<br>";
    if (strcmp ($lines[0], "SUCCESS") == 0) {
       echo $lines[0];
        for ($i=1; $i<count($lines);$i++){
        list($key,$val) = explode("=", $lines[$i]);
        $keyarray[urldecode($key)] = urldecode($val);
    }
    //echo "skjdhckh";
    // 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




    $user_email = '[email protected]';

     $site_name = 'Company name';
     $eol = "\r\n";
     $headers  = 'MIME-Version: 1.0' . $eol;
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . $eol;
     $headers .= 'From:' . $site_name . ' <[email protected]>'. $eol;
     $headers .= 'Reply-To:' . $site_name . ' <[email protected]>' . $eol;
     $headers .= 'Return-Path:' . $site_name . ' <[email protected]>' . $eol;

     $eol = "\r\n<br />";
     $thanks_text = $eol.$eol.'Thanks!'. $eol;
    if(isset($_SESSION['user']) && ($_SESSION['token']))
        {
                include('connection.php');

                $user=$_SESSION['user'];
                $_SESSION['user']=$user;
                $token=$_SESSION['token'];
                $_SESSION['token']=$token;
                //$sub=$_SESSION['coursename'];
                date_default_timezone_set('Australia/Melbourne'); 
                $date = date('y-m-d h:i:s a', time());
                $qry="update allorder set status='completed',date='$date'  where token='$token' and name1='$user'";
                $run_qry=mysql_query($qry);

                    if($run_qry)
                    {

    /*$select_id="select email from register where username='$username'";
    $run_qry2=mysql_query($select_id);
     if($row=mysql_fetch_row($run_qry2))
    {   */
      $email=$row[0];   
      $email_tpl = 'Hello Buyer,' . $eol;
      $email_tpl .= "We have received your payment of $amount $cc." . $eol;
      $email_tpl .= "Thanks for the purchase." . $eol;
      $email_tpl .= $eol . $thanks_text;

    mail ($email, 'Payment Received', $email_tpl, $headers);
    echo $email;
    $_SESSION['username']=$user;
                ?>
                 <script language="javascript" type="text/javascript">
            // Print a message
            alert('Thank you for your purchase! your Payment was successfull. Now You can print and download your certificate');
                // Redirect to some page of the site.
            window.location = 'index.php';
                </script>
                <?php
    //}

                }

                    else
                    {
                    echo mysql_error();
                    }

    }

    }
    else if (strcmp ($lines[0], "FAIL") == 0) {
       echo 'Transaction Failed';
    }
}

?>

Все работает правильно, но я получаю ответ об ошибке. пожалуйста, помогите мне, если я что-то забыл.

Заранее благодарю

Author: Bushra Shahid, 2013-02-28

1 answers

Убедитесь, что вы используете токен PDT из своей учетной записи продавца тестовой песочницы, если вы тестируете с помощью песочницы.

ПРИЧИНЫ СБОЯ, 4002 или 4003 ОТВЕТА

  • Убедитесь, что вы отправляете обратно значения "tx", "cmd" и Auth Чтобы PayPal вернул УСПЕХ и детали транзакции, вашему сценарию PDT необходимо отправить переменную "tx", извлеченную из строки возврата, токен аутентификации с вашей учетной записи в PayPal с помощью cmd "_notify-синхронизация".

  • Недопустимый Маркер Аутентификации Проверьте маркер, чтобы убедиться, что он является точным и передается обратно правильно. Убедитесь, что ваш токен представляет собой непрерывную строку и что в вашем скрипте нет разрывов строк. Для некоторых языков это может иметь значение.

  • Убедитесь, что вы не отправляете ответ на неправильный URL-адрес. Если вы тестируете в изолированной среде, вам необходимо убедиться, что ваши сообщения скрипта возвращаются в www.sandbox.paypal.com . Если вы находитесь в прямом эфире сайт, скрипт должен отправить обратно на www.paypal.com . Вы получите сообщение ОБ ошибке, если вы тестируете в песочнице, и ваш скрипт публикует сообщения обратно на живой сайт (или наоборот)

  • Проверка одного и того же "tx" более 5 раз Проверьте поведение пользователя. Другой способ получить СБОЙ - это если вы ссылаетесь на один и тот же "tx" более 5 раз. Пример: Если пользователь обновит страницу PDT 5 раз после просмотра подробных сведений, он увидит СБОЙ при последнем обновлении. Это не ошибка. Это делается специально для обеспечения безопасности, таким образом, URL-адрес, создаваемый PDT, не может быть доступен бесконечно для получения данных, специфичных для транзакции.

  • Недопустимое или отсутствующее значение "tx" Значение "tx" - это идентификатор транзакции, который используется для сбора платежной информации. Если это неверно или отсутствует, вы получите ответ ОБ ошибке, так как не удалось получить платежные данные.

PDT НЕ ПОЛУЧЕН

  • Адрес электронной почты, связанный с оплатой Чтобы PDT работал, вы должны подтвердить адрес электронной почты адрес, используемый в качестве ценности бизнеса в вашем коде кнопки. Если этот адрес электронной почты не подтвержден, PDT не будет работать, так как вы не увидите строку запроса PDT, добавленную к вашему возвращаемому URL-адресу.

  • Убедитесь, что вы используете правильно отформатированный URL-адрес возврата. Когда вы включаете PDT, URL-адрес, который вы используете в качестве URL-адреса автоматического возврата по умолчанию, должен быть действительным именем хоста или IP-адресом, а не URL-адресом внутренней интрасети, иначе пользователь не будет автоматически возвращен обратно на этот URL-адрес. Убедитесь, что вы используете действительный URL-адрес - это URL-адрес, по которому вы хотите, чтобы пользователь вернулся, иначе вы не увидите желаемого результата.

  • Кнопки оплаты в стиле подписки PDT не предназначен для работы с подписками, поэтому, если у вас есть подписка с бесплатной пробной версией, вы не увидите никаких данных на странице возврата/процессе PDT. Это связано с тем, что PDT передает платежные данные, и если во время регистрации платеж отсутствует, то из этого следует, что платежные данные для передачи отсутствуют.

  • Пользователь поведение PDT активируется клиентом с помощью метода возврата, нажав кнопку возврата или ничего не выбирая в тех случаях, когда клиенты входят в свои учетные записи PayPal для оплаты. Это означает, что покупатель может изменить поток возврата или выйти из браузера, и никакие данные не передаются.

 5
Author: PP_MTS_Chad, 2013-02-28 14:32:46