Получите информацию из PayPal после транзакции

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

25
задан jmasterx 12 March 2010 в 18:36
поделиться

2 ответа

PayPal работает следующим образом:

У вас есть форма с кнопкой «купить». При нажатии на него информация (продукт, цена, имя вашей учетной записи и т. Д.) Отправляется в PayPal.

Затем покупатель соглашается заплатить вам, и когда транзакция завершается, PayPal отправляет «IPN» (мгновенное уведомление о платеже) на ваш URL-адрес уведомления - он отправляет данные POST на этот URL-адрес для обработки вашим сервером. Вы отвечаете PayPal, чтобы спросить, отправили ли они данные POST (а не самозванец), и если они затем ответят, что это настоящая транзакция, вы можете передать продукт клиенту. Обратите внимание, что все это происходит в фоновом режиме, пока ваш покупатель все еще находится «на» веб-сайте PayPal.

Существует последний необязательный этап, на котором PayPal возвращает покупателя на ваш веб-сайт. В этом случае они отправляют покупателя обратно на ваш URL-адрес «возврата» и могут (необязательно) снова передать данные транзакции (они называют это PDT). И вы можете снова проверить в Paypal, является ли это действительной транзакцией, и предоставить загрузку и т. Д. В этот момент.

Самый сложный момент, который никто не объясняет, заключается в том, что покупатель не перенаправляется на ваш URL-адрес уведомления. т.е."посетителем" URL уведомления вашего веб-сайта является PayPal, , а не покупатель , поэтому это не происходит во время сеанса вашего покупателя. Если вы хотите сохранить сеанс на всех трех этапах этого процесса, вам необходимо создать средство отслеживания покупателя в вашей форме и передать его в PayPal в поле формы под названием «custom». Эти данные передаются вам обратно в данных IPN и PDT, и вы можете использовать их для восстановления соединения с исходным сеансом пользователя.

Вам действительно необходимо реализовать как IPN, так и PDT - если электронная почта IPN не работает, у вас есть PDT в качестве резервной копии. И если пользователь закрывает свой веб-браузер до того, как он будет перенаправлен обратно на вашу страницу PDT, то вы отправили электронное письмо IPN в качестве резервной копии.

Выполните поиск по IPN и PDT, и вы найдете довольно много информации. PayPal также имеет полную документацию и примеры сценариев.

58
ответ дан 28 November 2019 в 18:15
поделиться

URL-адрес уведомления должен вести к сценарию, сохраняющему возвращенные данные из PayPal, например:

   /** Fetch order from PayPal (IPN reply)
    * @return int received ID of inserted row if received correctly, 0 otherwise
    */
   function FetchOrder()
   {
   $transactionID=$_POST["txn_id"];
   $item=$_POST["item_name"];
   $amount=$_POST["mc_gross"];
   $currency=$_POST["mc_currency"];
   $datefields=explode(" ",$_POST["payment_date"]);
   $time=$datefields[0];
   $date=str_replace(",","",$datefields[2])." ".$datefields[1]." ".$datefields[3];
   $timestamp=strtotime($date." ".$time);
   $status=$_POST["payment_status"];
   $firstname=$_POST["first_name"];
   $lastname=$_POST["last_name"];
   $email=$_POST["payer_email"];
   $custom=$_POST["option_selection1"];
   if ($transactionID AND $amount)
      {
      // query to save data
      return $this->insertID;
      }
   else
      {
      return 0;
      }
   }

Вы также можете выбрать подтверждение заказа позже:

/** Verify PayPal order (IPN)
    * PayPal returns VERIFIED or INVALID on request
    * @return bool verified 1 if verified, 0 if invalid
    */
   function VerifyOrder()
   {
   $_POST["cmd"]="_notify-validate";
   $ch=curl_init();
   curl_setopt($ch,CURLOPT_HEADER,0);
   curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
   curl_setopt($ch,CURLOPT_USERAGENT,"your agent - replace");
   curl_setopt($ch,CURLOPT_URL,"https://www.paypal.com/cgi-bin/webscr");
   curl_setopt($ch,CURLOPT_POST, 1);
   foreach ($_POST as $key=>$value)
      {
      $string.="&".$key."=".urlencode(stripslashes($value));
      }
   curl_setopt($ch, CURLOPT_POSTFIELDS, $string);
   $result=curl_exec($ch);
   if ($result=="VERIFIED") return 1;
   else return 0;
   }
6
ответ дан 28 November 2019 в 18:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: