Я хочу использовать PayPals Платежи через веб-сайт Pro Hosted Solution , поэтому мы можем принимать платежи через PayPal без того, чтобы наши пользователи чувствовали, что они покидают сайт, и мы не должны быть PCI-совместимыми.
Мы хотим, чтобы это работало в следующем формате:
- пользователь нажимает на страницу покупки для предмета и выбирает количество и нажимает купить сейчас кнопка
- AJAX-запрос отправляется на сервер для проверки количества / подсчета итогов и т. Д.
- AJAX-запрос возвращает URL для iframe
- Iframe заполняется страницей, и после завершения загрузки отображается iframe
- Пользователь заполняет данные кредитной карты, и PayPal завершает транзакцию
- Страница успеха, на которой PayPal перенаправляет iframe для вызова некоторого JavaScript на родительской странице для перенаправления на другой URL.
Итак,
У меня есть страница выбора количества,
Я знаю, как отправлять данные на сервер и проверять количество / подсчитать сумму
Что я не знаю, как это сделать, с этого момента отправить запрос в PayPal, чтобы получить URL для iframe.
То, что я пытался сделать (в качестве очень простого автономного примера):
<?php
class paypal {
private $APIuser;
private $APIpass;
private $APIsign;
private $APIvers = '74.0';
private $APIaddr = 'https://api-3t.sandbox.paypal.com/nvp';
private $post_params = array();
function __construct($APIuser, $APIpass, $APIsign){
$this->APIuser = $APIuser;
$this->APIpass = $APIpass;
$this->APIsign = $APIsign;
}
function param($name, $value = null){
$this->post_params[$name] = $value;
return $this;
}
function getUrl(){
$post = $this->post_params;
$post['pwd'] = $this->APIpass;
$post['user'] = $this->APIuser;
$post['method'] = 'BMCreateButton';
$post['version'] = $this->APIvers;
$post['signature'] = $this->APIsign;
$post['buttoncode'] = 'CLEARTEXT';
$post['buttontype'] = 'PAYMENT';
$post_string = '?';
foreach($post as $k => $v)
$post_string .= $k.'='.urlencode($v).'&';
$post_string = substr($post_string, 0, -1);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->APIaddr.$post_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$out = curl_exec($ch);
curl_close($ch);
$out = explode('&', $out);
$final = array();
foreach($out as $k => &$v){
$v = explode('=', $v);
$final[$v[0]] = urldecode($v[1]);
}
return $final;
}
}
//mock variables
$price = 10.00;
$APIu = 'xxxxxxxxxx';
$APIp = 'xxxxxxxxxx';
$APIs = 'xxxxxxxxxx';
$paypal = new paypal($APIu, $APIp, $APIs);
$paypal->param('L_BUTTONVAR0=subtotal', $price*$_GET['quantity']);
$paypal->param('L_BUTTONVAR1=template', 'templateD');
$resp = $paypal->getUrl();
?>
<iframe width="100%" height=100%" src="<?php echo $resp['EMAILLINK']; ?>"></iframe>
Поначалу кажется, что все работает нормально, пока вы не введете данные своей кредитной карты для тестовых покупателей и не наберете
Пожалуйста, вернитесь на страницу оплаты и исправьте адрес.
Что я делаю не так / что мне нужно для этой работы?