Sylius:如果捕获令牌不在url中,如何通知付款



我正在使用Payum创建自己的支付捆绑包。我成功地用我的支付实体正确地生成了付款订单,我的捆绑包正确地重定向到我的实体的支付页面(用户在其中输入他们的卡和PIN号)。问题是我无法验证付款。我的支付实体只允许我配置一个单一的支付确认异步调用url(它不允许我在每个订单中发送带有通知url的参数)。

我必须如何获取支付令牌?有没有办法从订单id中获取支付令牌,然后进行验证?

好吧,我想我已经成功了。这就是"解决方案":

首先,我必须创建一个带有atached控制器的通知url。

payum_ceca_notification_url:
path: /payum/ceca/bank-notification
methods: [GET, POST]
defaults:
_controller: CecaPlugin:Notify:do

然后在我的doAction:

public function doAction(Request $request):Response
{
$params = $request->request->all();
$order_id = (int) $params['Num_operacion']; 
$payment = $this->container->get('sylius.repository.payment')->findOneBy(['id' => $order_id]);
$details = $payment->getDetails();
$cecaOptions = array(
'Environment' => $details['Environment'],
'MerchantID' => $details['MerchantID'],
'AcquirerBIN' => $details['AcquirerBIN'],
'TerminalID' => $details['TerminalID'],
'ClaveCifrado' => $details['ClaveCifrado']);
$apiCeca = new ApiCeca($cecaOptions);
$apiCeca->setFormHiddens(array(
'Num_operacion' => $details['Num_operacion'],
'Importe' => $details['Amount'],
'URL_OK' => $details['url_ok'],
'URL_NOK' => $details['url_nok'].'?pagocancelado=1'
));
// check my sign vs the sign sent to me by payment entity 
$apiCeca->checkTransaction($params);
$payment->setState(PaymentInterface::STATE_COMPLETED);
$payment->getOrder()->setPaymentState(OrderPaymentStates::STATE_PAID);
$manager = $this->container->get('sylius.manager.payment');
$manager->persist($payment);
$manager->flush();
return new Response();
}

我知道这不是最优雅的解决方案,但它是一个有效的解决方案。

最新更新