Worldpay Direct XML PHP集成

Sam*_*ron 0 php xml worldpay

我正在编写一个PHP脚本来获取我的网站上的信用卡和客户详细信息,将这些详细信息无形地发送到Worldpay的服务器进行处理,然后根据响应(付费,失败等)采取行动.

我的问题是,在发送我的XML时,我似乎无法通过Worldpay进行身份验证 - 我已MYMERCHANTCODE用适当的商家代码替换.这是我正在使用的代码 - 它基于Worldpay的示例:

require_once 'HTTP/Request.php';

$xml='<?xml version="1.0"? encoding="UTF-8"?>
<!DOCTYPE paymentService PUBLIC "-//WorldPay//DTD WorldPay PaymentService v1//EN""http://dtd.worldpay.com/paymentService_v1.dtd">
<paymentService version="1.4" merchantCode="MYMERCHANTCODE">
    <submit>
        <order orderCode="T0211010">

              <description>20 Tulip Bulbs from MYMERCHANT Webshops</description>

              <amount value="2600" currencyCode="EUR" exponent="2"/>

              <paymentDetails>
                  <VISA-SSL>
                      <cardNumber>4444333322221111</cardNumber>
                      <expiryDate>
                          <date month="09" year="2009"/>
                      </expiryDate>
                      <cardHolderName>J. Shopper</cardHolderName>
                      <cvc>123</cvc>
                      <cardAddress>
                          <address>
                               <street>47A Queensbridge Rd</street>
                               <postalCode>CB94BQ</postalCode>
                               <countryCode>GB</countryCode>
                          </address>
                      </cardAddress>
                   </VISA-SSL>
                   <session shopperIPAddress="123.123.123.123" id="0215ui8ib1" />
              </paymentDetails>

              <shopper>
                  <shopperEmailAddress>jshopper@myprovider.int</shopperEmailAddress>
                  <browser> [This example uses firefox 3.5.5 to demonstrate]
                       <acceptHeader>text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</acceptHeader>
                       <userAgentHeader>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)</userAgentHeader>
                   </browser>
               </shopper>

        </order>
   </submit>
</paymentService>';

$dest='https://secure-test.wp3.rbsworldpay.com/jsp/merchant/xml/paymentService.jsp'; //for sandbox
//$dest='https://secure.wp3.rbsworldpay.com/jsp/merchant/xml/paymentService.jsp' //for production

$req =& new HTTP_Request($dest);
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addHeader('Connection', 'keep-alive');
$req->addRawPostData($xml);
$req->sendRequest();
$req->getResponseBody();
echo nl2br(htmlentities($req->getResponseBody()));
Run Code Online (Sandbox Code Playgroud)

当我运行它时,这是输出:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Authorization Required</title>
</head><body>
<h1>Authorization Required</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?文档说要为您的Worldpay帐户添加您的IP地址,我认为我已经正确完成了.

非常感谢

更新:

我刚刚意识到如果我在URL之前添加商家ID和xml密码,例如:

$dest='https://MERCHANTID:PASSWORD@secure-test.wp3.rbsworldpay.com/jsp/merchant/xml/paymentService.jsp';

然后它会进行身份验证,因此我将回答我自己的问题.

Sam*_*ron 5

我意识到如果我在URL之前添加我的商家ID和xml密码,例如:

$dest='https://MERCHANTID:PASSWORD@secure-test.wp3.rbsworldpay.com/jsp/merchant/xml/paymentService.jsp';
Run Code Online (Sandbox Code Playgroud)

然后验证.希望这会节省一些时间,因为我在文档中找不到这个.