使用PHP和直接XML方法的WorldPay支付集成

使用PHP和直接XML方法的WorldPay支付集成,php,payment-gateway,worldpay,Php,Payment Gateway,Worldpay,我一直在尝试使用PHP为我的客户使用WorldPay设置支付网关,但我无法从WorldPay服务器获得任何响应。从哪里可以获得XML密码?与登录密码相同吗 下面是我用来从WorldPay server获取响应的XML规范 $xml='<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE paymentService PUBLIC "-//WorldPay/DTD WorldPay PaymentService v1//EN" "htt

我一直在尝试使用PHP为我的客户使用WorldPay设置支付网关,但我无法从WorldPay服务器获得任何响应。从哪里可以获得XML密码?与登录密码相同吗

下面是我用来从WorldPay server获取响应的XML规范

$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="MERCHANTCODE">
    <submit>
        <order orderCode="T0211011" installationId="111111">
            <description>20 English Roses from MYMERCHANT Webshops</description>
            <amount value="100" currencyCode="GBP" exponent="2"/>
            <orderContent>
                <![CDATA[
                    <center>
                        <table>
                                <tr><td bgcolor="#ffff00">Your Internet Order:</td><td colspan="2" bgcolor="#ffff00" align="right">T0211010</td></tr>
                                <tr><td bgcolor="#ffff00" colspan="3">Your billing address:</td></tr>
                                <tr><td colspan="3">Mr. J. Shopper<br><br>27b ParkView Mansions<br>47 Queensbridge Road<br>Chesterton<br>Cambridge<br>CB9 4BQ<br>United Kingdom</td></tr>
                                <tr><td colspan="3">&nbsp;</td></tr>
                                <tr><td bgcolor="#ffff00" colspan="3">Your shipping address:</td></tr>
                                <tr><td colspan="3">Mr.J. Shopper<br>47A Queensbridge Road<br>Cambridge<br>CB9 4BQ<br>UK</td></tr>
                                <tr><td colspan="3">&nbsp;</td></tr>
                                <tr><td bgcolor="#ffff00" colspan="3">Our contact information:</td></tr>
                                <tr><td colspan="3">MYMERCHANT Webshops International<br>461 Merchant Street <br>Merchant Town<br>ZZ1 1ZZ<br>UK <br>mymerchant@webshops.int<br>01234 567 890</td></tr>
                                <tr><td colspan="3">&nbsp;</td></tr>
                                <tr><td bgcolor="#c0c0c0" colspan="3">Billing notice:</td></tr>
                                <tr><td colspan="3">Your payment will be handled by WorldPay<br>This name may appear on your bank statement<br>http://www.worldpay.com</td></tr>
                        </table>
                    </center>
]]>
            </orderContent>
            <paymentDetails>
                <VISA-SSL>
                    <cardNumber>4444333322221111</cardNumber>
                    <expiryDate>
                        <date month="09" year="2019"/>
                    </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="213.137.19.45" id="0215ui8ib1" />
            </paymentDetails>
            <shopper>
                <shopperEmailAddress>jshopper@myprovider.int</shopperEmailAddress>
                <browser> 
                    <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>
            <shippingAddress>
                <address>
                    <firstName>John</firstName>
                    <lastName>Shopper</lastName>
                    <address1>27b ParkView Mansions</address1>
                    <address2>47 Queensbridge Rd</address2>
                    <address3>Chesterton</address3>
                    <postalCode>CB94BQ</postalCode>
                    <countryCode>GB</countryCode>
                    <telephoneNumber>01234567890</telephoneNumber>
                </address>
            </shippingAddress>
        </order>
    </submit>
</paymentService>';
我使用了PHP curl函数从服务器获取响应

$ch = curl_init ($url);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$xml);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_NOPROGRESS, 0);
    $result = curl_exec ($ch); 
    if ( $result == false )
    {
    echo "fasle";
    }
    else    
    {   
    print_r($result);
    echo $result;
    }

只有Woldpay可以为您提供XML密码,在证明站点符合pcidss之前,您不能拥有XML密码。有一种方法可以在不使用XML的情况下实现该功能。我建议的技术已经过验证,我已经在我的网站上实现了它

远程捕获

<html>

<body>

<h1>Post-authorise a pre-authorised transaction</h1>

<br>This allows you to complete only those transactions you consider appropriate.

<form action="https://secure.worldpay.com/wcc/itransaction"; method="post">

<input type="hidden" name="instId" value="XXXXX">

<input type="hidden" name="op" value="postAuth-full">

<input type="hidden" name="authPW" value="YYYYY">

<input type="hidden" name="authMode" value="O">

<br>Enter the transaction ID to complete:

<input type="text" name="transId" value="" size="10">

<input type="submit" name="postAuth" value="Capture">

</form>

</body>

</html>

对预先授权的交易进行后授权
这允许你只完成那些你认为合适的事务。

输入要完成的事务ID:
远程退款

<html>

<body>

<h1>Issuing a full or partial refund</h1>

<p>This allows individual transactions to be refunded either fully or in part. Partial refunds must be issued in the currency the shopper originally used to pay.

<form action="https://secure.worldpay.com/wcc/itransaction"; method="post">

<input type="hidden" name="authPW" value="YYYYY">

<input type="hidden" name="instId" value="XXXXX">

<input type="hidden" name="cartId" value="Refund">

<p>Refund type:

<select name="op">

<option value="refund-full">Full</option>

<option value="refund-partial">Partial</option>

</select>

<p>Enter the Transaction ID to refund:

<input type="text" name="transId" value="" size="10">

<p>Enter the amount (partial refund only):

<input type="text" name="amount" value="" size="10">

<p>Enter the currency (partial refund only):

<input type="text" name="currency" value="" size="3">

<input type="submit" name="refund" value="Issue Refund">

</form>

</body>

</html> 

全额或部分退款
这使得个人交易可以全额或部分退款。部分退款必须以购物者最初支付的货币发放。
退款类型:
满满的
部分的
输入要退款的交易ID:
输入金额(仅部分退款):
输入货币(仅部分退款):

我希望这对您有所帮助。

我认为您需要花一些时间阅读Worldpay文档。如果您有正确的凭据,您应该能够从服务器获得响应。你是否以正确的方式进行这件事是另一回事。处理信用卡数据是一项严肃的工作。如果你不确定自己在做什么,最终可能会被支付卡公司罚款。如果有疑问,请付钱给真正了解他们的人。谢谢。但是我花了大量的时间阅读关于XML直接方法的文档。此外,我一直在使用WorldPay的测试环境来测试支付网关。在这里,我编写了非常简单的表单集成来通过WorldPay接收支付。
<html>

<body>

<h1>Issuing a full or partial refund</h1>

<p>This allows individual transactions to be refunded either fully or in part. Partial refunds must be issued in the currency the shopper originally used to pay.

<form action="https://secure.worldpay.com/wcc/itransaction"; method="post">

<input type="hidden" name="authPW" value="YYYYY">

<input type="hidden" name="instId" value="XXXXX">

<input type="hidden" name="cartId" value="Refund">

<p>Refund type:

<select name="op">

<option value="refund-full">Full</option>

<option value="refund-partial">Partial</option>

</select>

<p>Enter the Transaction ID to refund:

<input type="text" name="transId" value="" size="10">

<p>Enter the amount (partial refund only):

<input type="text" name="amount" value="" size="10">

<p>Enter the currency (partial refund only):

<input type="text" name="currency" value="" size="3">

<input type="submit" name="refund" value="Issue Refund">

</form>

</body>

</html>