Symfony Sylius:如果捕获令牌不在url中,如何通知付款?
我正在用Payum创建自己的支付包。我成功地使用我的支付实体正确生成了支付订单,我的捆绑包正确地重定向到我的实体的支付页面(用户在其中输入他们的卡和PIN号码)。问题是我无法验证付款。我的支付实体只允许我配置一个支付确认异步调用url(它不允许我在每个订单中发送带有通知url的参数)Symfony Sylius:如果捕获令牌不在url中,如何通知付款?,symfony,sylius,Symfony,Sylius,我正在用Payum创建自己的支付包。我成功地使用我的支付实体正确生成了支付订单,我的捆绑包正确地重定向到我的实体的支付页面(用户在其中输入他们的卡和PIN号码)。问题是我无法验证付款。我的支付实体只允许我配置一个支付确认异步调用url(它不允许我在每个订单中发送带有通知url的参数) 我必须如何获得支付令牌?有没有办法从订单id获取支付令牌,然后对其进行验证?好的,我想我已经成功了。这就是“解决方案”: 首先,我必须创建一个带有控制器的通知url payum_ceca_notification_
我必须如何获得支付令牌?有没有办法从订单id获取支付令牌,然后对其进行验证?好的,我想我已经成功了。这就是“解决方案”: 首先,我必须创建一个带有控制器的通知url
payum_ceca_notification_url:
path: /payum/ceca/bank-notification
methods: [GET, POST]
defaults:
_controller: CecaPlugin:Notify:do
然后在我的行动中:
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();
}
我知道这不是最优雅的解决方案,但它是一个有效的解决方案,将订单标记为已付款。好的,我想我已经做到了。这就是“解决方案”: 首先,我必须创建一个带有控制器的通知url
payum_ceca_notification_url:
path: /payum/ceca/bank-notification
methods: [GET, POST]
defaults:
_controller: CecaPlugin:Notify:do
然后在我的行动中:
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();
}
我知道这不是最优雅的解决方案,但它是一个有效的解决方案,将订单标记为已付款。支付系统必须有一个页面可调用。创建加载时带条带的示例:银行验证过程可能很长(对于用户),并且必须异步完成。@LeMenachFlorian是的,支付系统有一个页面可调用,但此页面不可变且唯一,因此url中没有令牌。付款系统异步发送给我的唯一有用参数是付款id。。。但我不知道如何使用payment获得支付令牌,我更了解。我已经做了几个实现,特别是使用stripe,在创建负载时,会给我一个标识符。该标识符存储在数据库中,并在验证期间用作比较。您使用哪种支付系统?卡号是在您的网站上输入的还是在外部网站上输入的?我们有,对于CB,我使用的支付系统必须有呼叫页面。创建加载时带条带的示例:银行验证过程可能很长(对于用户),并且必须异步完成。@LeMenachFlorian是的,支付系统有一个页面可调用,但此页面不可变且唯一,因此url中没有令牌。付款系统异步发送给我的唯一有用参数是付款id。。。但我不知道如何使用payment获得支付令牌,我更了解。我已经做了几个实现,特别是使用stripe,在创建负载时,会给我一个标识符。该标识符存储在数据库中,并在验证期间用作比较。您使用哪种支付系统?卡号是在您的网站上输入的还是在外部网站上输入的?我们有和供我使用