2010-07-16 6 views
0

PHP를 사용하여 XML을 지불 게이트웨이에 게시하는 데 문제가 있습니다. 여기 https://dev.psigate.com:8645/Messenger/AMMessengerPHP를 사용하여 SSL을 통해 XML을 게시하는 문제

코드 : 내가 어떤 출력에게 바로 메시지를 얻을하지 않습니다

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; 
    } 
} 

:

는 게이트웨이 (PSiGate가)에 XML을 게시하려면이 샌드 박스의 URL을 제공한다 "출력이 있어야한다 "스크립트는 약 45 초 동안 실행됩니다. 그래서 뭔가를하고 있다고 생각합니다.

답변

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; 
    } 
} 
+0

나는 (이) SSL을 필요는 fsockopen 생각하지 않는다 : // 내가 잘못된 경우 정정 해줘 .. 헤더에 있어야합니다. – Mikey1980

+1

호스트 이름 OpenSSL 지원으로 컴파일 한 경우 TCP/IP를 통한 SSL 또는 TLS 클라이언트 연결을 사용하여 원격 호스트에 연결하려면 호스트 이름에 ssl : // 또는 tls : // 접두사를 붙일 수 있습니다. – nathan

+0

어쨌든 감사하지만 주사위를 쓰지 말고 .. 대신 cURL을 사용합니다. – Mikey1980

관련 문제