我是Payum的新手。很多事情都把我搞糊涂了。我试图建立一个简单的贝宝快递结帐就像例子显示在Payum文件。然而,当我试图处理付款时,它显示了一个异常:
" my_paypal_express_checkout不存在。500服务器内部错误- InvalidArgumentException"
配置如下:
payum:
security:
token_storage:
Acme'PaymentBundle'Entity'PayumSecurityToken:
doctrine:
driver: orm
storages:
Acme'PaymentBundle'Entity'PaymentDetails:
doctrine:
driver: orm
contexts:
Ibase_paypal_express:
paypal_express_checkout_nvp:
...codes...
下面是控制器中prepare和done动作的代码:
public function preparePaypalAction(Request $request)
{
$paymentName = 'ibase_paypal_express_checkout';
$form = $this->createPurchaseForm();
$form->handleRequest($request);
if ($form->isValid()) {
$data = $form->getData();
$storage = $this->get('payum')->getStorage('Ibase'PaymentBundle'Entity'PaymentDetails');
/** @var 'Ibase'CartBundle'Entity'PaymentDetails $paymentDetails */
$paymentDetails = $storage->createModel();
$paymentDetails['PAYMENTREQUEST_0_CURRENCYCODE'] = $data['currency'];
$paymentDetails['PAYMENTREQUEST_0_AMT'] = $data['amount'];//total amount ??
$storage->updateModel($paymentDetails);
$captureToken = $this->get('payum.security.token_factory')->createCaptureToken(
$paymentName,
$paymentDetails,
'payment_done' // the route to redirect after capture;
);
$paymentDetails['INVNUM'] = $paymentDetails->getId();
$paymentDetails['RETURNURL'] = $captureToken->getTargetUrl();
$paymentDetails['CANCELURL'] = $captureToken->getTargetUrl();
$storage->updateModel($paymentDetails);
return $this->redirect($captureToken->getTargetUrl());
}
return $this->render('PaymentBundle:PaypalExpress:paypalPrepare.html.twig', array(
'form' => $form->createView(),
'paymentName' => $paymentName
));
}
public function doneAction(Request $request)
{
$token = $this->get('payum.security.http_request_verifier')->verify($request);
$payment = $this->get('payum')->getPayment($token->getPaymentName());
$status = new BinaryMaskStatusRequest($token);
$payment->execute($status);
if ($status->isSuccess()) {
$this->getUser()->addCredits(100);
$this->get('session')->getFlashBag()->set(
'notice',
'Payment success. Credits were added'
);
} else if ($status->isPending()) {
$this->get('session')->getFlashBag()->set(
'notice',
'Payment is still pending. Credits were not added'
);
} else {
$this->get('session')->getFlashBag()->set('error', 'Payment failed');
}
return $this->redirect('home');
}
/**
* @return 'Symfony'Component'Form'Form
*/
protected function createPurchaseForm()
{
return $this->createFormBuilder()
->add('amount', null, array(
'data' => 1,
'constraints' => array(new Range(array('max' => 2)))
))
->add('currency', null, array('data' => 'AUD'))
->getForm()
;
}
任何人都可以帮助将不胜感激!
查看您的YML文件
contexts:
Ibase_paypal_express:
和你的代码:
$paymentName = 'ibase_paypal_express_checkout';
注意到大写的'I'和字符串名称吗?这两个名称/值应该相同。所以要么
$paymentName = 'Ibase_paypal_express';
或
contexts:
ibase_paypal_express_checkout: