支付失败后在sylius中重新启动支付步骤
Reinitiate payment steps in sylius after unsuccessfull payment
如果在 Sylius 0.13 中下订单后尝试失败,是否有一种简洁的方法让用户能够重试付款?
我有用户的前端管理和他们的订单列表,我想添加 link 到每个未成功支付的订单,将用户转发到 /payment/capture/<hash>
url 就像下订单一样.
谢谢。
我已经通过自己处理付款的常规控制器解决了这个问题。我们在前端有订单详细信息,可以看到付款表格(如果未付款):
public function showAction($number)
{
$order = $this->findOrderOr404($number);
$form = $this->getPaymentFormIfOrderPayable($order);
$view = $this
->view()
->setTemplate('SyliusWebBundle:Frontend/Account:Order/show.html.twig')
->setData(array(
'order' => $order,
'form' => $form,
))
;
return $this->handleView($view);
}
新付款方式始终是数据库中的最后一个方式。之后它会生成类似于完成订单后的表格。
/**
* @param OrderInterface $order
* @return bool|FormInterface form if payable otherwise false
*/
protected function getPaymentFormIfOrderPayable(OrderInterface $order) {
if($order->getState() === OrderInterface::STATE_PENDING) {
/** @var PaymentInterface $paymentMethod */
$paymentMethod = $order->getPayments()->last()->getMethod()->getGateway();
switch ($paymentMethod) {
case 'gpe':
$form = $this->createGPEPaymentRequest($order);
break;
default:
$form = false;
}
} else {
$form = false;
}
return $form;
}
付款后,用户将转到另一个操作,如 Payum 中的 CaptureAction 和 PaymentStatusAction:
/**
* @param Request $request
* @param string $number Order Id
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* @throws NotFoundHttpException
* @throws AccessDeniedException
*/
public function payAction(Request $request, $number) {
$order = $this->findOrderOr404($number);
/** @var PaymentInterface $paymentMethod */
$paymentMethod = $order->getPayments()->last()->getMethod()->getGateway();
switch ($paymentMethod) {
case 'gpe':
$this->resolveGPEPaymentRequest($request, $order);
break;
$this->get('sylius.cart_provider')->abandonCart();
$this->get('event_dispatcher')->dispatch('sylius.checkout.purchase.complete', new PurchaseCompleteEvent($order->getPayments()->last()));
return $this->redirect($this->generateUrl('sylius_account_order_show', array('number' => $order->getNumber())));
}
如果在 Sylius 0.13 中下订单后尝试失败,是否有一种简洁的方法让用户能够重试付款?
我有用户的前端管理和他们的订单列表,我想添加 link 到每个未成功支付的订单,将用户转发到 /payment/capture/<hash>
url 就像下订单一样.
谢谢。
我已经通过自己处理付款的常规控制器解决了这个问题。我们在前端有订单详细信息,可以看到付款表格(如果未付款):
public function showAction($number)
{
$order = $this->findOrderOr404($number);
$form = $this->getPaymentFormIfOrderPayable($order);
$view = $this
->view()
->setTemplate('SyliusWebBundle:Frontend/Account:Order/show.html.twig')
->setData(array(
'order' => $order,
'form' => $form,
))
;
return $this->handleView($view);
}
新付款方式始终是数据库中的最后一个方式。之后它会生成类似于完成订单后的表格。
/**
* @param OrderInterface $order
* @return bool|FormInterface form if payable otherwise false
*/
protected function getPaymentFormIfOrderPayable(OrderInterface $order) {
if($order->getState() === OrderInterface::STATE_PENDING) {
/** @var PaymentInterface $paymentMethod */
$paymentMethod = $order->getPayments()->last()->getMethod()->getGateway();
switch ($paymentMethod) {
case 'gpe':
$form = $this->createGPEPaymentRequest($order);
break;
default:
$form = false;
}
} else {
$form = false;
}
return $form;
}
付款后,用户将转到另一个操作,如 Payum 中的 CaptureAction 和 PaymentStatusAction:
/**
* @param Request $request
* @param string $number Order Id
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* @throws NotFoundHttpException
* @throws AccessDeniedException
*/
public function payAction(Request $request, $number) {
$order = $this->findOrderOr404($number);
/** @var PaymentInterface $paymentMethod */
$paymentMethod = $order->getPayments()->last()->getMethod()->getGateway();
switch ($paymentMethod) {
case 'gpe':
$this->resolveGPEPaymentRequest($request, $order);
break;
$this->get('sylius.cart_provider')->abandonCart();
$this->get('event_dispatcher')->dispatch('sylius.checkout.purchase.complete', new PurchaseCompleteEvent($order->getPayments()->last()));
return $this->redirect($this->generateUrl('sylius_account_order_show', array('number' => $order->getNumber())));
}