Omnipay PayPal Express 中是否存在信用卡功能?还是仅在 PayPal Pro 中?
Does the creditCard function exist in Omnipay PayPal Express? Or only in PayPal Pro?
这个问题可能与 and THIS 类似,但我不完全确定。
我制作了一个购物车,可以在结账时将产品详细信息和 quantity/total 金额发送到 Paypal。我正在使用 Laravel 4 和 Omnipay Paypal 插件 (Paypal_Express)。我可以使用 'setItems' 函数发送产品详细信息,现在我希望使用我的用户详细信息预填充 Paypal 摘要页面上的信用卡字段。
我在 THIS 等其他 SO 线程中看到其他人使用 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();
}
}
而且 ignited\laravel-omnipay\config.php 也没有改变(尽管我确实尝试过更换驱动程序)
return数组(
// 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) I get this error when I try (call_user_func_array() expects parameter 1 to be a valid callback, class 'Omnipay\Common\GatewayFactory' does not have a method 'creditCard').
您不能在 PayPal Express 网关上使用信用卡,只能在 Pro 或 REST 上使用。我建议您使用 REST 网关而不是 Pro 网关(REST 取代 Pro 并具有更多功能)。
I don't want to enter all the credit card details - Just speed the process up by entering the User's Name, Adress etc...
如果您使用的是 PayPal Express,则无需这样做,因为在用户完成 PayPal 登录流程并授权交易后,PayPal 会为您提供必要的详细信息。
Also I tried changing to Paypal_Pro and it didn't work. (same error as above) I changed config plus gateways in my payment controller.
2)How do you change PayPal_Express to 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";
}
这个问题可能与
我制作了一个购物车,可以在结账时将产品详细信息和 quantity/total 金额发送到 Paypal。我正在使用 Laravel 4 和 Omnipay Paypal 插件 (Paypal_Express)。我可以使用 'setItems' 函数发送产品详细信息,现在我希望使用我的用户详细信息预填充 Paypal 摘要页面上的信用卡字段。
我在 THIS 等其他 SO 线程中看到其他人使用 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();
}
}
而且 ignited\laravel-omnipay\config.php 也没有改变(尽管我确实尝试过更换驱动程序)
return数组(
// 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) I get this error when I try (call_user_func_array() expects parameter 1 to be a valid callback, class 'Omnipay\Common\GatewayFactory' does not have a method 'creditCard').
您不能在 PayPal Express 网关上使用信用卡,只能在 Pro 或 REST 上使用。我建议您使用 REST 网关而不是 Pro 网关(REST 取代 Pro 并具有更多功能)。
I don't want to enter all the credit card details - Just speed the process up by entering the User's Name, Adress etc...
如果您使用的是 PayPal Express,则无需这样做,因为在用户完成 PayPal 登录流程并授权交易后,PayPal 会为您提供必要的详细信息。
Also I tried changing to Paypal_Pro and it didn't work. (same error as above) I changed config plus gateways in my payment controller.
2)How do you change PayPal_Express to 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";
}