【问题标题】:Lexik paybox installation: Warning: DOMDocument::loadHTML(): Empty string supplied as inputLexik paybox 安装:警告:DOMDocument::loadHTML(): Empty string 作为输入提供
【发布时间】:2019-07-26 22:02:17
【问题描述】:

上下文:我尝试设置LexikPaybox 捆绑包。我按照自述文件中的安装指南进行操作。

问题$paybox->getUrl() 方法引发

警告:DOMDocument::loadHTML():作为输入提供的空字符串

地址返回:

dump($this->getWebPage(sprintf(
    '%s://%s%s',
    $server['protocol'],
    $server['host'],
    $server['test_path']
)));
>>> "https://preprod-tpeweb.paybox.com/load.html"

然后,getWebPage()(第 163 行)返回一个空字符串,该字符串在 $doc->loadHTML() 中引发错误。

我的研究

  • 有完全相同的问题here。但是,没有明确的答案。

    如果我运行 curl https://tpeweb.paybox.com/load.html ,我会得到预期的 html 输出。

  • 有很多类似的帖子处理上述错误。但是,我不认为这是模块的代码错误,而是我缺少的更多内容。

配置

Config.yml:

# Lexik Paybox Bundle
lexik_paybox:
    parameters:
        production: false        # Switches between Paybox test and production servers (preprod-tpe <> tpe)
        # Site number provided by the bank
        site:  '1999888'
        # Rank number provided by the bank
        rank:  '32'
        rang: '32'
        # Customer's login provided by Paybox
        login: '2'
        hmac:
            # Key used to compute the hmac hash, provided by Paybox
            key: '0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF'
            algorithm:      sha512 # signature algorithm
            signature_name: Sign   # customize the signature parameter name

        currencies:                # Optionnal parameters, this is the default value
            - '978'                # EUR

routing.yml:

# Lexik Paybox Bundle
lexik_paybox:
    resource: '@LexikPayboxBundle/Resources/config/routing.yml'


lexik_paybox_sample_return:
    path:     /payment/return/{status}
    defaults: { _controller: LexikPayboxBundle:Sample:return, status: error }
    requirements:
        status: success|canceled|denied

PaymentController.php:

<?php

namespace Modules\ReservationBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

class PaymentController extends Controller {
    /**
     * Sample action to call a payment.
     * It create the form to submit with all parameters.
     * @Route("/paiemant", name="paiemant")
     */
    public function callAction()
    {
        $paybox = $this->get('lexik_paybox.request_handler');
        $paybox->setParameters(array(
            'PBX_CMD'          => 'CMD'.time(),
            'PBX_DEVISE'       => '978',
            'PBX_SITE'          => '1999888',
            'PBX_IDENTIFIANT'   => '107904482',
            'PBX_RANG'          => '32',
            'PBX_PORTEUR'      => 'test@paybox.com',
            'PBX_RETOUR'       => 'Mt:M;Ref:R;Auto:A;Erreur:E',
            'PBX_TOTAL'        => '1000',
            'PBX_TYPEPAIEMENT' => 'CARTE',
            'PBX_TYPECARTE'    => 'CB',
            'PBX_EFFECTUE'     => $this->generateUrl('lexik_paybox_sample_return', array('status' => 'success'), UrlGeneratorInterface::ABSOLUTE_URL),
            'PBX_REFUSE'       => $this->generateUrl('lexik_paybox_sample_return', array('status' => 'denied'), UrlGeneratorInterface::ABSOLUTE_URL),
            'PBX_ANNULE'       => $this->generateUrl('lexik_paybox_sample_return', array('status' => 'canceled'), UrlGeneratorInterface::ABSOLUTE_URL),
            'PBX_RUF1'         => 'POST',
            'PBX_REPONDRE_A'   => $this->generateUrl('lexik_paybox_ipn', array('time' => time()), UrlGeneratorInterface::ABSOLUTE_URL),

//            'PBX_TOTAL'         => '1000',
//            'PBX_DEVISE'        => '978',
//            'PBX_CMD'           => 'CMD'.time(),
//            'PBX_PORTEUR'       => 'test@paybox.com',
//            'PBX_RETOUR'        => 'Mt:M;Ref:R;Auto:A;Erreur:E',
        ));

        return $this->render(
            'LexikPayboxBundle:Sample:index.html.twig',
            array(
                'url'  => $paybox->getUrl(),
                'form' => $paybox->getForm()->createView(),
            )
        );
    }

    /**
     * Sample action of a confirmation payment page on witch the user is sent
     * after he seizes his payment informations on the Paybox's platform.
     * This action must only containts presentation logic.
     */
    public function responseAction($status)
    {
        return $this->render(
            'LexikPayboxBundle:Sample:return.html.twig',
            array(
                'status'     => $status,
                'parameters' => $this->getRequest()->query,
            )
        );
    }
}

【问题讨论】:

    标签: php symfony payment paybox


    【解决方案1】:

    由于以下解决了我的问题,我分享它。这不是真正的答案,但可能对其他人有所帮助..

    问题是在请求中没有找到服务器。结果,loadHTML 在空字符串上失败。

    由于在查看服务器并检查它们是否正确时出现此错误,所以我只是删除检查并直接传递 URL。

    所以控制器变成了:

    public function callAction(){
    
            // Server URL
            $PAYBOX_DOMAIN_SERVER = "preprod-tpeweb.paybox.com";
            $paybox_url = "https://".$PAYBOX_DOMAIN_SERVER."/cgi/MYchoix_pagepaiement.cgi";
    
            $paybox = $this->get('lexik_paybox.request_handler');
            $paybox->setParameters(array(
                'PBX_SITE'          => "1999888",
                'PBX_RANG'          => "32",
                'PBX_IDENTIFIANT'   => "110647233",
                'PBX_TOTAL'         => "999",
                'PBX_DEVISE'        => "978",
                'PBX_CMD'           => "TEST Paybox".mktime(),
                'PBX_PORTEUR'       => "test@paybox.com",
                'PBX_RETOUR'        => "Mt:M;Ref:R;Auto:A;Erreur:E",
                'PBX_HASH'          => "SHA512",
    
    //            'PBX_TYPEPAIEMENT' => 'CARTE',
    //            'PBX_TYPECARTE'    => 'CB',
    
                'PBX_EFFECTUE'     => $this->generateUrl('lexik_paybox_sample_return', array('status' => 'success'), UrlGeneratorInterface::ABSOLUTE_URL),
                'PBX_REFUSE'       => $this->generateUrl('lexik_paybox_sample_return', array('status' => 'denied'), UrlGeneratorInterface::ABSOLUTE_URL),
                'PBX_ANNULE'       => $this->generateUrl('lexik_paybox_sample_return', array('status' => 'canceled'), UrlGeneratorInterface::ABSOLUTE_URL),
                'PBX_RUF1'         => 'POST',
                'PBX_REPONDRE_A'   => $this->generateUrl('lexik_paybox_ipn', array('time' => time()), UrlGeneratorInterface::ABSOLUTE_URL),
            ));
    
            return $this->render(
                'LexikPayboxBundle:Sample:index.html.twig',
                array(
                    'url'  => $paybox_url, //$paybox->getUrl(),
                    'form' => $paybox->getForm()->createView(),
                )
            );
    }
    

    您仍然可以通过以下方式检查服务器 url 是否有效:

    public function checkServer($url){
        $doc = new \DOMDocument();
        $doc->loadHTML($url);
        $element = $doc->getElementById('server_status');
    
        if (!$element || 'OK' != $element->textContent) {
            throw new RuntimeException('No server available.');
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 2014-06-15
      相关资源
      最近更新 更多