Отправить форму через cURL и переадресовать браузер в PayPal

Я разрабатываю сайт, на котором у клиентов есть несколько вариантов оплаты, включая PayPal Payments Standard. Поскольку я собираю много данных о клиенте, я хотел бы обработать форму на своем сервере, прежде чем отправлять пользователя на сервер PayPal. Один из вариантов – объединить данные в одну строку, назначить строку custom полю и затем обработать ее в ответе IPN, но я считаю, что это очень неэлегантное решение. Вместо этого, после сбора пользовательских данных, я пытаюсь использовать cURL для отправки стандартной формы HTML PayPal. Как я могу перенаправить пользователя в PayPal, чтобы завершить процесс оформления заказа?

  // Process PayPal payment if ($method == 'PayPal') { // Prepare POST data $query = array(); $query['notify_url'] = 'http://example.com/ipn'; $query['cmd'] = '_cart'; $query['upload'] = '1'; $query['business'] = 'email@example.com'; $query['address_override'] = '1'; $query['first_name'] = $first_name; $query['last_name'] = $last_name; $query['email'] = $email; $query['address1'] = $ship_to_address; $query['city'] = $ship_to_city; $query['state'] = $ship_to_state; $query['zip'] = $ship_to_zip; $query['item_name_'.$i] = $item['description']; $query['quantity_'.$i] = $item['quantity']; $query['amount_'.$i] = $item['info']['price']; // Prepare query string $query_string = ''; foreach ($query as $key=>$value) { $query_string .= $key.'='.urlencode($value).'&'; } $query_string = rtrim($query_string, '&'); // Open connection $ch = curl_init(); //set the url, number of POST vars, POST data curl_setopt($ch,CURLOPT_URL, 'https://www.paypal.com/cgi-bin/webscr'); curl_setopt($ch,CURLOPT_POST, count($query)); curl_setopt($ch,CURLOPT_POSTFIELDS, $query_string); // Execute post $result = curl_exec($ch); // Close connection curl_close($ch); } 

ПРЕДУПРЕЖДЕНИЕ: этот ответ имеет дефицит безопасности. Передача конфиденциальных данных (таких как элемент и цена) через клиента позволяет клиенту изменять транзакцию. то есть. изменить элемент или изменить цену. См. Документацию PayPal о том, как реализовать IPN .

Вы должны перенаправить пользователя с помощью функции header php и отправить vars как GET not POST.

 // Process PayPal payment if ($method == 'PayPal') { // Prepare GET data $query = array(); $query['notify_url'] = 'http://jackeyes.com/ipn'; $query['cmd'] = '_cart'; $query['upload'] = '1'; $query['business'] = 'social@jackeyes.com'; $query['address_override'] = '1'; $query['first_name'] = $first_name; $query['last_name'] = $last_name; $query['email'] = $email; $query['address1'] = $ship_to_address; $query['city'] = $ship_to_city; $query['state'] = $ship_to_state; $query['zip'] = $ship_to_zip; $query['item_name_'.$i] = $item['description']; $query['quantity_'.$i] = $item['quantity']; $query['amount_'.$i] = $item['info']['price']; // Prepare query string $query_string = http_build_query($query); header('Location: https://www.paypal.com/cgi-bin/webscr?' . $query_string); } 

Вместо того, чтобы отправлять все данные в PayPal и обратно, вы должны хранить данные на своем сервере и отправлять только идентифицирующий токен. Любые данные, которые вы отправляете в PayPal (через браузер пользователя), могут быть перехвачены и изменены. Это серьезная опасность для безопасности.

Если вы отправляете только токен, нет возможности для подделки.

Прочитайте спецификацию PayPal, в ней есть рекомендации о том, как реализовать эти вещи.

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

делая завиток, он будет делать от конца до конца вызовы во внутренней стороне, он не будет отражать поведение интерфейса.

вам нужно сделать форму со скрытым полем и javascript, чтобы автоматически отправить форму после загрузки страницы.