Этот вопрос может быть похож на ЭТОТ а также ЭТОТ но я не совсем уверен.
Я сделал корзину покупок, которая отправляет данные о продукте и количество / общую сумму в Paypal при оформлении заказа. Я использую Laravel 4 и плагин Omnipay Paypal (Paypal_Express). Я могу отправить подробную информацию о продукте, используя функцию «setItems», и теперь хочу предварительно заполнить поле кредитной карты на странице сводной информации Paypal данными моего пользователя.
Я видел в других темах, таких как ЭТОТ что другие люди используют функцию creditCard для передачи информации на страницу с краткой информацией о кредитной карте Paypal.
Мой вопрос: 1) Нужно ли вам использовать Paypal_Pro для работы функции creditCard?
Я получаю эту ошибку при попытке (call_user_func_array() expects parameter 1 to be a valid callback, class 'Omnipay\Common\GatewayFactory' does not have a method 'creditCard'
).
Я не хочу вводить все данные кредитной карты — просто ускорите процесс, введя имя пользователя, адрес и т. Д …
Также я попытался перейти на Paypal_Pro, и это не сработало. (та же ошибка, что и выше) Я изменил конфигурацию плюс шлюзы в моем контроллере платежей.
2) Как вы меняете PayPal_Express на PayPay_Pro?
Мой код:
public function postPayment() {$cart = Session::get('cart');
$allProducts = [];
foreach($cart->aContents as $productID=>$quantity){
$product = Product::find($productID);
// get the product id
// load the product from the id
// store data in the allProduct array
$allProducts[] = array('name' => $product->name, 'quantity' => $quantity, 'price'=> $product->price);
}
$cardInput = array(
'first_name' => Input::get('first_name'),
'last_name' => Input::get('last_name'),
'address1' => Input::get('address1'),
'city' => Input::get('city'),
'zip' => Input::get('zip'),
'email' => Input::get('email')
);
$card = Omnipay::creditCard($cardInput);
$params = array(
'cancelUrl' => \URL::to('cancel_order'),
'returnUrl' => \URL::to('payment_success'),
'amount' => Input::get('price'),
'currency' => Input::get('currency'),
'card' => $card,
);
Session::put('params', $params);
Session::save();
$gateway = Omnipay::create('PayPal_Express');
$gateway->setUsername('tjmusicmanagement-facilitator_api1.gmail.com');
$gateway->setPassword('K2LWQVP2L8472BPY');
$gateway->setSignature('AwTOuAJWzCkdc5PldYeiz.l3iy5UAwOucYW6EFLLA9zUQqXaWyEGbebq');
$gateway->setTestMode(true);
$gateway->setLogoImageUrl(URL::to('images/logoSmall.png'));$response = $gateway->purchase($params)->setItems($allProducts)->send();
if ($response->isSuccessful()) {
// payment was successful: update database
print_r($response);
} elseif ($response->isRedirect()) {
// redirect to offsite payment gateway
$response->redirect();
} else {
// payment failed: display message to customer
echo $response->getMessage();
}
}
И также воспламененный \ laravel-omnipay \ config.php остается неизменным (хотя я пытался изменить драйвер)
возвращаемый массив (
// The default gateway to use
'default' => 'paypal',
// Add in each gateway here
'gateways' => array(
'paypal' => array(
'driver' => 'PayPal_Express',
'options' => array(
'solutionType' => '',
'landingPage' => '',
'headerImageUrl' => ''
)
)
)
);
Спасибо за ваше время !!
РЕДАКТИРОВАТЬ: Вот моя функция getSuccessPayment, где я надеюсь получить данные PayPal пользователей (только имя и адрес и т. Д.) Из PayPal. Но как и где мне это указать?
public function getSuccessPayment()
{
$gateway = Omnipay::create('PayPal_Express');
$gateway->setUsername('lillyloverofwar-facilitator_api1.gmail.com');
$gateway->setPassword('U6LM3SG2MNCA3QE2');
$gateway->setSignature('AJVP9tUtdotIeVt82RpcG7n9ld-tAdCG1Ramb1u8yZECHhSpiXc0BO04');
$gateway->setTestMode(true);
$params = Session::get('params');
$response = $gateway->completePurchase($params)->send();
$paypalResponse = $response->getData(); // this is the raw response object
if(isset($paypalResponse['PAYMENTINFO_0_ACK']) && $paypalResponse['PAYMENTINFO_0_ACK'] === 'Success') {
// return View::make('successfulPayment')->with($params);
// Session::flush();
// Response
// print_r($paypalResponse);
} else {
//Failed transaction
}
// FLUSHING SESSION HERE GETS AN ERROR
// Session::flush();
return View::make('successfulPayment');}
1) Я получаю эту ошибку при попытке (call_user_func_array () ожидает, что параметр 1 будет допустимым обратным вызовом, класс ‘Omnipay \ Common \ GatewayFactory’ не имеет метода creditCard).
Вы не можете использовать кредитные карты на шлюзе PayPal Express, только на Pro или REST. Я рекомендую использовать шлюз REST, а не шлюз Pro (REST заменяет Pro и имеет больше возможностей).
Я не хочу вводить все данные кредитной карты — просто ускорите процесс, введя имя пользователя, адрес и т. Д …
В любом случае нет необходимости делать это, если вы используете PayPal Express, потому что PayPal предоставит вам необходимые данные после того, как пользователь пройдет процедуру входа в PayPal и авторизует транзакцию.
Также я попытался перейти на Paypal_Pro, и это не сработало. (та же ошибка, что и выше) Я изменил конфигурацию плюс шлюзы в моем контроллере платежей.
2) Как вы меняете PayPal_Express на PayPay_Pro?
Я предлагаю вам взглянуть на мою развилку шлюза omnipay-paypal, https://github.com/delatbabel/omnipay-paypal — в ветви accept-paypal-Payments есть дополнительные коммиты (отправленные в виде PR в основной репозиторий, но еще не объединенные) с дополнительными функциями, такими как использование шлюза REST для покупок с помощью кредитной карты или PayPal, и дополнительной документацией API, включая примеры кода. о том, как использовать шлюз REST.
Вот пример кода для использования шлюза Rest для транзакции покупки с помощью кредитной карты:
// Create a gateway for the PayPal RestGateway
// (routes to GatewayFactory::create)
$gateway = Omnipay::create('RestGateway');
// Initialise the gateway
$gateway->initialize(array(
'clientId' => 'MyPayPalClientId',
'secret' => 'MyPayPalSecret',
'testMode' => true, // Or false when you are ready for live transactions
));
// Create a credit card object
// DO NOT USE THESE CARD VALUES -- substitute your own
// see the documentation in the class header.
$card = new CreditCard(array(
'firstName' => 'Example',
'lastName' => 'User',
'number' => '4111111111111111',
'expiryMonth' => '01',
'expiryYear' => '2020',
'cvv' => '123',
'billingAddress1' => '1 Scrubby Creek Road',
'billingCountry' => 'AU',
'billingCity' => 'Scrubby Creek',
'billingPostcode' => '4999',
'billingState' => 'QLD',
));
// Do a purchase transaction on the gateway
$transaction = $gateway->purchase(array(
'amount' => '10.00',
'currency' => 'AUD',
'description' => 'This is a test purchase transaction.',
'card' => $card,
));
$response = $transaction->send();
if ($response->isSuccessful()) {
echo "Purchase transaction was successful!\n";
$sale_id = $response->getTransactionReference();
echo "Transaction reference = " . $sale_id . "\n";
}
Других решений пока нет …