PHP CURL, перенаправление PayPal

#php #redirect #curl #paypal

#php #перенаправление #curl #paypal

Вопрос:

Позвольте мне объяснить, что я хочу сделать:

  1. Фиксируйте пользовательскую информацию в форме.
  2. Пользователь отправляет форму.
  3. Я собираю данные в БД.
  4. Я передаю идентификатор входа в PayPal (пользовательский var) и отправляю пользователя в PayPal.
  5. Пользователь вводит информацию о PayPal и отправляет платеж.
  6. PayPal отправляет мне IPN.
  7. Я обновляю статус записи в базе данных на оплаченный.

У меня все это работает, кроме шага 4. В php, где я собираю данные, я пытаюсь использовать curl для публикации на странице PayPal… но он не хочет перенаправлять при отправке данных.

Новичок в CURL, поэтому я уверен, что допустил ошибку в этой области.

Это то, что у меня есть с $ custom, просто установлено в случайную строку вместо идентификатора базы данных:

     $url = "https://www.sandbox.paypal.com/cgi-bin/webscr";
    //$url = 
    $cmd = "_s-xclick";
    $custom = "id1234";
    $b_id = "";

    switch($_POST["streamer"]){
        case "mrhyubusa":
            $b_id = "BTS5M8QXSGR3G";
            break;              
        default:
            break;
    }   

    //set POST variables
    $fields = array(
                'cmd' => urlencode($cmd),
                'hosted_button_id' => urlencode($b_id),
                'custom' => urlencode($custom)
    );

    //url-ify the data for the POST
    foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'amp;'; }
    rtrim($fields_string, 'amp;'); 

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST, count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    curl_close($ch);
  

Заранее спасибо, ребята.

Ответ №1:

При использовании стандартных платежей, подобных вашему, вам не нужен CURL. Стандарт платежей работает только с базовыми HTML-формами. Все, что вам нужно сделать, это захватить фрагмент HTML, который PayPal предоставляет в вашем менеджере кнопок, и вставить его на свою страницу, где вы хотите, чтобы он отображался.

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

CURL пригодился бы, если бы вы выполняли вызовы API веб-службы. Опять же, с Payments Standard вам это не нужно.

Комментарии:

1. Я понимаю, что могу просто сделать кнопку, которая ведет прямо на страницу PayPal. Проблема, с которой я сталкиваюсь, заключается в том, что я помещаю всю информацию из моей формы в мою базу данных, а затем отправляю их на страницу, которую обычно использует кнопка PayPal. Вот почему я пытаюсь сделать это с помощью curl после вставки в DB. Возможно, я веду себя глупо, но это единственный способ, который я действительно видел, чтобы сделать это. я не хотел создавать вторую форму только для того, чтобы загрузить ее, а затем отправить. Я хотел сделать все это на серверной части, чтобы сделать процесс максимально простым для пользователя.

2. Думаю, я мог бы отправить свою форму с помощью Ajax, а затем, когда она завершится, отправить вторую скрытую форму, которая является кнопкой PayPal, вместо использования curl… Я сделаю это, если не существует лучшего решения.

3. Или просто используйте IPN для обработки всех ваших вставок данных.