首页 > 解决方案 > DOMDocument::loadXML():作为输入 CURL 提供的空字符串

问题描述

我正在使用 CURL 发送 XML 数据。我在尝试将我的 XML 消息发送到相反的 URL 时在某处出错。但我无法捕捉到他在哪里。我正在使用 Laravel 5。

这是我的功能线

public function paymentConfirm(Request $request)
    {
        if (!session()->has('reservation'))
        {
            return view('frontend.error');
        }
        $reservation_data = session()->get('reservation');
        $amount = number_format($reservation_data['payable_amount'], 2);
        $card_num = str_replace(' ', '', $request->cardnumber);
        $expiry = $request->expiry;
        $cvv = str_replace(' ', '', $request->cvv);

                $mpiServiceUrl=   "https://example.com/MPIAPI/MPI_Enrollment.aspx";
                $sonKullanmaTarihi = $request->expiry;
                $karttipi = 200;
                
                $taksitSayisi="";
                $kartTipi = "BrandName";
                $islemNumarasi =  uniqid().'-'.uniqid(); 
                $uyeIsyeriNumarasi = "XXXX";
                $uyeIsYeriSifresi = "XXX";
                $SuccessURL = "https://www.example.com/payment/success";      
                $FailureURL = "https://www.example.com/payment/failure";
               
                $ch = curl_init();
                curl_setopt($ch,CURLOPT_URL,$mpiServiceUrl);
                curl_setopt($ch,CURLOPT_POST,TRUE);    
                curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
                curl_setopt($ch,CURLOPT_HTTPHEADER,array("Content-Type"=>"application/x-www-form-urlencoded"));
                curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
                curl_setopt($ch,CURLOPT_POSTFIELDS,"Pan=".$card_num."&ExpiryDate=$sonKullanmaTarihi&PurchaseAmount=".$amount."&Currency=949&BrandName=$kartTipi&VerifyEnrollmentRequestId=$islemNumarasi&SessionInfo=&MerchantId=".$uyeIsyeriNumarasi."&MerchantPassword=".$uyeIsYeriSifresi."&SuccessUrl=$SuccessURL&FailureUrl=$FailureURL&InstallmentCount=$taksitSayisi");
                $resultXml = curl_exec($ch);    
                curl_close($ch);        
                $result = $this->SonucuOku3d($resultXml);
if($result["Status"]=="Y") {
            ?>

我的课

class PaymentController extends Controller
{

    public function SonucuOku3d($result)
    {
        $resultDocument = new \DOMDocument();
        $resultDocument->loadXML($result);

        $statusNode = $resultDocument->getElementsByTagName("Status")->item(0);
        $status = "";
        if( $statusNode != null )
            $status = $statusNode->nodeValue;

        $PAReqNode = $resultDocument->getElementsByTagName("PaReq")->item(0);
        $PaReq = "";
        if( $PAReqNode != null )
            $PaReq = $PAReqNode->nodeValue;

        $ACSUrlNode = $resultDocument->getElementsByTagName("ACSUrl")->item(0);
        $ACSUrl = "";
        if( $ACSUrlNode != null )
            $ACSUrl = $ACSUrlNode->nodeValue;

        $TermUrlNode = $resultDocument->getElementsByTagName("TermUrl")->item(0);
        $TermUrl = "";
        if( $TermUrlNode != null )
            $TermUrl = $TermUrlNode->nodeValue;

        $MDNode = $resultDocument->getElementsByTagName("MD")->item(0);
        $MD = "";
        if( $MDNode != null )
            $MD = $MDNode->nodeValue;

        $messageErrorCodeNode = $resultDocument->getElementsByTagName("MessageErrorCode")->item(0);
        $messageErrorCode = "";
        if( $messageErrorCodeNode != null )
            $messageErrorCode = $messageErrorCodeNode->nodeValue;

        $result = array
        (
            "Status"=>$status,
            "PaReq"=>$PaReq,
            "ACSUrl"=>$ACSUrl,
            "TermUrl"=>$TermUrl,
            "MerchantData"=>$MD ,
            "MessageErrorCode"=>$messageErrorCode
        );
        return $result;
    }

我应该更改哪一行来解决这个错误?我想我在 ResultXML 部分犯了一个错误。谢谢您的帮助。

标签: phpcurl

解决方案


推荐阅读