Worldpay Direct XML PHP集成

问题描述 投票:0回答:2

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

我的问题是,在发送我的XML时,我似乎无法通过Worldpay进行身份验证 - 我已使用正确的商家代码替换了MYMERCHANTCODE。这是我正在使用的代码 - 它基于Worldpay's example

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>[email protected]</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()));

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

<!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>

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

非常感谢

更新:

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

$dest='https://MERCHANTID:[email protected]/jsp/merchant/xml/paymentService.jsp';

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

php xml worldpay
2个回答
5
投票

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

$dest='https://MERCHANTID:[email protected]/jsp/merchant/xml/paymentService.jsp';

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


1
投票

C#worldpay xml api请求获取重定向的URL *****************

我浪费了大量的时间来使用xml集成worldpay以获取以下网址和最后GOT IT。!!!!!!!!!!!!

发送XML消息的测试URL是:https://secure-test.worldpay.com/jsp/merchant/xml/paymentService.jsp

发送XML消息的实时URL是:https://secure.worldpay.com/jsp/merchant/xml/paymentService.jsp

你需要做的就是验证是获取新用户名或MerchantCode或Xml用户名和XML密码

var uri =“https://secure.worldpay.com/jsp/merchant/xml/paymentService.jsp”;

            var orderCode = (DateTime.Now.ToString("ddMMyyyyHHmmssff"));

            var sw = new StringWriterWithEncoding(_encoding);
            var xtw = new XmlTextWriter(sw);
            xtw.WriteDocType("paymentService", "-//Worldpay//DTD Worldpay PaymentService v1//EN", "http://dtd.worldpay.com/paymentService_v1.dtd",null);
            xtw.WriteStartElement("paymentService");
            xtw.WriteAttributeString("version", "1.4");
            xtw.WriteAttributeString("merchantCode",MerchantCode);
            xtw.WriteStartElement("submit");
            xtw.WriteStartElement("order");
            xtw.WriteAttributeString("orderCode", orderCode);
            xtw.WriteAttributeString("installationId",installationId);
            xtw.WriteElementString("description",eventPaymentDetails.ECommerceGatewayReference + " - " + paymentDetails.ContactDetails.FirstName + " "+ paymentDetails.ContactDetails.LastName);
            xtw.WriteStartElement("amount");
            xtw.WriteAttributeString("currencyCode",CurrencyCode);
            xtw.WriteAttributeString("exponent","2");
            xtw.WriteAttributeString("value", amount);
            xtw.WriteEndElement(); //end amount
            xtw.WriteStartElement("paymentMethodMask");
            xtw.WriteStartElement("include");
            xtw.WriteAttributeString("code","ALL");
            xtw.WriteEndElement();  // end include
            xtw.WriteEndElement();  // end paymentMethodMask
            xtw.WriteStartElement("shopper");
            xtw.WriteElementString("shopperEmailAddress", paymentDetails.ContactDetails.EmailAddress);
            xtw.WriteEndElement();  // end shopper


            xtw.WriteStartElement("billingAddress");

            xtw.WriteStartElement("address");
            xtw.WriteElementString("address1", .AddressLineOne);
            xtw.WriteElementString("postalCode", AddressPostcode);
            xtw.WriteElementString("city", .AddressCity);
            xtw.WriteElementString("countryCode", paymentDetails.ContactDetails.AddressCountryTwoLetterCode);
            xtw.WriteEndElement();  // end address 

            xtw.WriteEndElement();  // end billingAddress

            xtw.WriteEndElement(); //end order
            xtw.WriteEndElement(); //end submit

            xtw.WriteEndElement(); //end payment service
            xtw.Close();

            // Send the Xml message to PXPost
            var wrq = WebRequest.Create(uri);
            wrq.Method = "POST";
            wrq.ContentType = "text/xml";
            var authString = _settings.XmlUserName + ":" + _settings.XmlPassword;
            var auth = Convert.ToBase64String(Encoding.UTF8.GetBytes(authString));
           wrq.Headers.Add("Authorization","Basic "+ auth);
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            var xmldata = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + sw.ToString();
            byte[] b = Encoding.UTF8.GetBytes(xmldata);
            wrq.ContentLength = b.Length;
            using (Stream s = wrq.GetRequestStream())
            {
                s.Write(b, 0, b.Length);

            }


            // Check the response
            using (var wrs = (HttpWebResponse) wrq.GetResponse())
            {

                if (wrs != null)
                {
                    var sr = new StreamReader(wrs.GetResponseStream());
                    var xd = new XmlDocument();
                    var responseText = sr.ReadToEnd().Trim();
                    xd.LoadXml(responseText);

} }

希望这可以帮助。谢谢

© www.soinside.com 2019 - 2024. All rights reserved.