Как обработать способ оплаты кредитной картой на вашем сайте (без перенаправления на PayPal) paypalexpressceckout с библиотекой ci-merchant
Я пользуюсь библиотекой ci-merchant и успешно ее интегрировал, а также работает для пользователя, владеющего аккаунтом PayPal. Но я не знаю, как обрабатывать данные для пользователя, у которого нет аккаунта PayPal и который хочет платить только с помощью кредитной или дебетовой карты на моем сайте * (без перенаправления). на PayPal) * любая идея????, что..... это код, который я использую для нормальной оплаты PayPal в моем контроллере и работает хорошо, а также..
$this->load->library('merchant');
$this->merchant->load('paypal_express');
$settings = $this->merchant->default_settings();
$settings = array(
'username' => 'takeout_api1.rest.com',
'password' => '1369227981',
'signature' => 'AnOQDpMvzNQqHN5u7vb9BKLaKYLoALq6R0g3ohOwD4RQgO0DQDI5l7V4',
'test_mode' => true,
);
$this->merchant->initialize($settings);
$params = array(
'amount' => 1500.00,
'currency' => 'CAD',
'return_url' => 'http://192.168.1.7/takeout/order_detail/test',
'cancel_url' => 'http://192.168.1.7/takeout/order_detail/test');
$response = $this->merchant->purchase($params);
function test()
{
$settings = array(
'username' => 'takeout_api1.rest.com',
'password' => '1369227981',
'signature' => 'AnOQDpMvzNQqHN5u7vb9BKLaKYLoALq6R0g3ohOwD4RQgO0DQDI5l7V4',
'test_mode' => true);
$this->merchant->initialize($settings);
$params = array(
'amount' => 1500.00,
'currency' => 'CAD',
'return_url' => 'http://192.168.1.7/takeout/order_detail/test',
'cancel_url' => 'http://192.168.1.7/takeout/order_detail/test');
$response = $this->merchant->purchase_return($params);
if ($response->success())
{
// mark order as complete
echo "yo";
exit;
}
else
{
$message = $response->message();
echo('Error processing payment: ' . $message);
exit;
}
}
2 ответа
Вы можете связать свои услуги Merchant
interface merchantServiceInterface
{
public function initialize();
public function purchase();
public function purchase_return();
}
Paypal
class Paypal implements merchantServiceInterface
{
public function initialize(){}
public function purchase(){}
public function purchase_return(){}
}
Кредитные / дебетовые карты
class Realex implements merchantServiceInterface
{
public function initialize(){}
public function purchase(){}
public function purchase_return(){}
}
Теперь в вашей форме есть небольшая группа переключателей и попросите пользователя выбрать PayPal или кредитную / дебетовую карту.
<label>Choose a payment Method</label>
<label>Paypal<label>
<input type="radio" name="merchant" value="paypal" />
<label>Credit/Debit Card<label>
<input type="radio" name="merchant" value="debit" />
Торговая библиотека
class Merchant
{
protected $_service;
public function __construct(merchantServiceInterface $service)
{
$this->_service = $service;
}
public function initialize()
{
// Will either run Paypal/Realex initialize()
// Depending on what instance was passed to _service
//
$this->_service->initialize();
}
}
контроллер
class Controller extends CI_Controller
{
public function method()
{
if($this->input->post('merchant') == 'paypal')
{
$service = new Paypal();
}
elseif($this->input->post('merchant') == 'debit')
{
$service = new Realex();
}
$this->load->library('Merchant', $service);
$this->merchant->initialize();
}
}
Изменить, чтобы ответить на ваш комментарий
Я просто использовал Realex в качестве примера
Вам нужно выяснить, что общего у обеих библиотек, или на очень низком уровне абстракции выяснить, что они разделяют.
пример будет
- Им обоим нужен метод инициализации для настройки параметров
- Они оба должны отправить запрос в API
- Им обоим нужен ответ
- и т. д., продолжайте абстрагироваться
То, как вы справитесь с этим, будет уникальным для самой библиотеки.
interface merchantServiceInterface
{
// Use the facade design pattern here
// so configuration is done in each library
public function initialize();
// Send a request with data
// Paypal - use http_build_query and curl
// Realex - use xml and curl
public function request(array $data);
public function responce();
}
Paypal Express Checkout не поддерживает прием кредитных карт на вашем сайте. Это внешний шлюз, поэтому перенаправление является обязательным.
Вам необходимо изучить использование PayPal Pro, Payflow или любого другого количества шлюзов, которые поддерживают прием кредитных карт непосредственно на вашем веб-сайте (плюс дополнительные требования PCI, которые прилагаются к этому).