この質問はおそらくこれとこれに似ていますが、完全にはわかりません。
チェックアウト時に製品の詳細と数量/合計金額を Paypal に送信するショッピング カートを作成しました。Laravel 4 と Omnipay Paypal プラグイン (Paypal_Express) を使用しています。「setItems」関数を使用して製品の詳細を送信できます。現在、Paypal の概要ページのクレジット カード フィールドにユーザーの詳細を事前入力しようとしています。
THISなどの他の SO スレッドで、他の人が creditCard 関数を使用して詳細を Paypal のクレジット カード情報ページに渡すのを見てきました。
私の質問: 1) creditCard 機能を使用するには、Paypal_Pro を使用する必要がありますか? ( ) を試すと、このエラーが発生します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 は変更されていません (ただし、ドライバーを変更してみました)
配列を返します(
// 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 関数で、ユーザーのペイパルの詳細 (名前と住所など) をペイパルから取得できることを願っています。しかし、これをどこでどのように指定すればよいのでしょうか?
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');
}