使用PHP在SSL上发布XML的问题

时间:2010-07-16 17:25:16

标签: php xml

我无法使用PHP将XML发布到支付网关。

网关(PSiGate)将此沙箱网址提供给POST XML:https://dev.psigate.com:8645/Messenger/AMMessenger

这里是代码:

if (isset($_POST) && $_GET['task'] == 'new') {
    $dealer = new Dealer($USER->getDealerId());
    $contact = $dealer->getContact();
    // new PSiGate Account
    $xml  = '<?XML version="1.0"?>';
    $xml .= "<Request>\n";
    $xml .= "   <CID>10000001</CID>\n";
    $xml .= "   <UsertID>teststore</UserID>\n";
    $xml .= "   <Password>testpass</Password>\n";  
    $xml .= "   <Action>AMA01</Action>\n";  
    $xml .= "   <Account>\n";
    $xml .= "       <AccountID>".$USER->getDealerId()."</AccountID>\n";
    $xml .= "       <Name>".$contact->getFirstname()." ".$contact->getFirstname()."</Name>\n";
    $xml .= "       <Company>".$contact->getCompany()."</Company>\n";
    $xml .= "       <Address1>".$contact->getAddressLine1()."</Address1>\n";
    $xml .= "       <Address2>".$contact->getAddressLine2()."</Address2>\n";
    $xml .= "       <City>".$contact->getCity()."</City>\n";
    $xml .= "       <Province>".$contact->getProvince()."</Province>\n";
    $xml .= "       <Postalcode>".$contact->getPostalCode(TRUE)."</Postalcode>\n";
    $xml .= "       <Country>".$contact->getCountry()."</Country>\n";
    $xml .= "       <Phone>".$contact->getWorkPhone(TRUE)." EXT. ".$contact->getWorkPhoneExt()."</Phone>\n";
    $xml .= "       <Fax>".$contact->getFaxPhone(TRUE)."</Fax>\n";
    $xml .= "       <Email>".$contact->getEmail()."</Email>\n";
    $xml .= "       <CardInfo>\n";
    $xml .= "           <CardHolder>".$_POST['Bname']."</CardHolder>\n";
    $xml .= "           <CardNumber>".$_POST['CardNumber']."</CardNumber>\n";
    $xml .= "           <CardExpMonth>".$_POST['CardExpMonth']."</CardExpMonth>\n";
    $xml .= "           <CardExpYear>".$_POST['CardExpYear']."</CardExpYear>\n";
    $xml .= "       </CardInfo>\n";
    $xml .= "   </Account>\n";
    $xml .= "</Request>\n";
    $fp = fsockopen("dev.psigate.com", 8645, $errno, $errstr, 30);
    if (!$fp)    {
        echo 'Failed to open connection.';
    } else {
        $contentlength = strlen($xml);
        $out  = "POST /Messenger/AMMessenger HTTP/1.0\r\n";
        $out .= "Host: ssl://dev.psigate.com\r\n";
        $out .= "Connection: Keep-Alive\r\n";
        $out .= "Content-type: application/x-www-form-urlencoded\r\n";
        $out .= "Content-length: $contentlength\r\n\r\n";
        $out .= "XML=$xml";
        fwrite($fp, $out);
        while (!feof($fp)) {
            $theOutput .= fgets($fp, 128);
        }
        fclose($fp);
        echo "there should be output";       
        echo $theOutput;
    } 
}

我没有得到任何输出信息:“应该有输出”,脚本运行大约45秒左右我相信它正在做某事......很多!

1 个答案:

答案 0 :(得分:1)

尝试:

<?php
if (isset($_POST) && $_GET['task'] == 'new') {
    $dealer = new Dealer($USER->getDealerId());
    $contact = $dealer->getContact();
    // new PSiGate Account
    $xml  = '<?XML version="1.0"?>' . "\n";
    $xml .= "<Request>\n";
    $xml .= "   <CID>10000001</CID>\n";
    $xml .= "   <UsertID>teststore</UserID>\n";
    $xml .= "   <Password>testpass</Password>\n";  
    $xml .= "   <Action>AMA01</Action>\n";  
    $xml .= "   <Account>\n";
    $xml .= "       <AccountID>".$USER->getDealerId()."</AccountID>\n";
    $xml .= "       <Name>".$contact->getFirstname()." ".$contact->getFirstname()."</Name>\n";
    $xml .= "       <Company>".$contact->getCompany()."</Company>\n";
    $xml .= "       <Address1>".$contact->getAddressLine1()."</Address1>\n";
    $xml .= "       <Address2>".$contact->getAddressLine2()."</Address2>\n";
    $xml .= "       <City>".$contact->getCity()."</City>\n";
    $xml .= "       <Province>".$contact->getProvince()."</Province>\n";
    $xml .= "       <Postalcode>".$contact->getPostalCode(TRUE)."</Postalcode>\n";
    $xml .= "       <Country>".$contact->getCountry()."</Country>\n";
    $xml .= "       <Phone>".$contact->getWorkPhone(TRUE)." EXT. ".$contact->getWorkPhoneExt()."</Phone>\n";
    $xml .= "       <Fax>".$contact->getFaxPhone(TRUE)."</Fax>\n";
    $xml .= "       <Email>".$contact->getEmail()."</Email>\n";
    $xml .= "       <CardInfo>\n";
    $xml .= "           <CardHolder>".$_POST['Bname']."</CardHolder>\n";
    $xml .= "           <CardNumber>".$_POST['CardNumber']."</CardNumber>\n";
    $xml .= "           <CardExpMonth>".$_POST['CardExpMonth']."</CardExpMonth>\n";
    $xml .= "           <CardExpYear>".$_POST['CardExpYear']."</CardExpYear>\n";
    $xml .= "       </CardInfo>\n";
    $xml .= "   </Account>\n";
    $xml .= "</Request>\n";
    $fp = fsockopen("ssl://dev.psigate.com", 8645, $errno, $errstr, 30);
    if (!$fp)    {
        echo 'Failed to open connection.';
    } else {
        $contentlength = strlen($xml);
        $out  = "POST /Messenger/AMMessenger HTTP/1.1\r\n";
        $out .= "Host: dev.psigate.com\r\n";
        $out .= "Connection: close\r\n";
        $out .= "Content-type: application/x-www-form-urlencoded\r\n";
        $out .= "Content-length: $contentlength\r\n\r\n";
        $out .= "XML=$xml";
        fwrite($fp, $out);
        while (!feof($fp)) {
            $theOutput .= fgets($fp, 128);
        }
        fclose($fp);
        echo "there should be output";       
        echo $theOutput;
    } 
}