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

Symfony Sylius:如果捕获令牌不在url中,如何通知付款?,symfony,sylius,Symfony,Sylius,我正在用Payum创建自己的支付包。我成功地使用我的支付实体正确生成了支付订单,我的捆绑包正确地重定向到我的实体的支付页面(用户在其中输入他们的卡和PIN号码)。问题是我无法验证付款。我的支付实体只允许我配置一个支付确认异步调用url(它不允许我在每个订单中发送带有通知url的参数) 我必须如何获得支付令牌?有没有办法从订单id获取支付令牌,然后对其进行验证?好的,我想我已经成功了。这就是“解决方案”: 首先,我必须创建一个带有控制器的通知url payum_ceca_notification_

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


我必须如何获得支付令牌?有没有办法从订单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,在创建负载时,会给我一个标识符。该标识符存储在数据库中,并在验证期间用作比较。您使用哪种支付系统?卡号是在您的网站上输入的还是在外部网站上输入的?我们有和供我使用