您好我一直在尝试使用Omnipay paypal和Laravel 4将paypal与我的网站的购物车集成。到目前为止,我主要使用THIS教程。
我还处于初级阶段,但我遇到了麻烦。当我尝试结账时,我收到一条错误,上面写着“需要金额参数”。
我有点像菜鸟,所以我可能会做一些愚蠢的事情,但如果我硬编码(即:'price'=> 25.00),那么它可以正常工作。解密和货币也都从数据库中提取并发送到paypal页面。我在这里发现的问题似乎没有人动态地将数据提取到控制器,所以也许我做错了什么?
这是我的控制器的相关部分:
<?php
use Omnipay\Omnipay;
class PaymentController extends Controller {
public function postPayment() {
$params = array(
'cancelUrl' => 'http://localhost/cancel_order',
'returnUrl' => 'http://localhost/payment_success',
'name' => Input::get('name'),
'description' => Input::get('description'),
'price' => Input::get('price'),
'currency' => Input::get('currency') );
Session::put('params', $params);
Session::save();
$gateway = Omnipay::create('PayPal_Express');
$gateway->setUsername('my username');
$gateway->setPassword('my pass');
$gateway->setSignature('my signature');
$gateway->setTestMode(true);
$response = $gateway->purchase($params)->send();
这是我的购物车结帐按钮:
{{ Form::open([ 'url' => 'pay_via_paypal', 'method' => 'post' ]) }}
{{Form::hidden('product',Product::find($productID)->name)}}
{{Form::hidden('description',Product::find($productID)->description)}}
{{Form::hidden('amount',Product::find($productID)->price)}}
{{Form::hidden('currency',Product::find($productID)->currency)}}
{{Form::submit('CHECKOUT')}}
{{Form::close()}}
表单可能看起来有点令人困惑,但在我提交之前,表单上的值都显示正常。
感谢您的帮助。
答案 0 :(得分:3)
如果仔细查看教程,您会看到有index()
函数负责生成表单。以及处理表单提交的postPayment()
函数。
在index()函数(在教程中)
hello.blade.php
中的有一个名为price
<input type="hidden" value="{{ $price }}" name="price" />
在你的情况下
{{ Form::hidden('amount',Product::find($productID)->price) }}
应替换为
{{ Form::hidden('price',Product::find($productID)->price) }}
然后,当您提交表单时,它将路由到postPayment()
函数,此处Route::post('pay_via_paypal', 'PaymentController@postPayment');
此路由应位于您的route
文件中
在postPayment()
函数中,
$params = array(
'cancelUrl' => 'http://localhost/cancel_order',
'returnUrl' => 'http://localhost/payment_success',
'name' => Input::get('name'),
'description' => Input::get('description'),
// you dont need this price parameter ('price' => Input::get('price'),)
'amount' => Input::get('price'), // add amount parameter which is required in paypal.
'currency' => Input::get('currency') );
仅供注意,
您反复使用
Product::find($productID)
这不是一个好习惯,如果您将该产品转换为Object变量,那么您可以使用该对象而不重复Product::find($productID)
。
为此,您可以将object
从控制器
等
$product = Product::find($productId);
return View::make('hello')->with(Array("product" => $product));
<\ n>在刀片视图中,
....
{{ Form::hidden('product',$product->name) }}
{{ Form::hidden('description',$product->description) }}
....
..等等