Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 收集表单数据,插入xml字段以发布到支付网关_Php_Xml - Fatal编程技术网

Php 收集表单数据,插入xml字段以发布到支付网关

Php 收集表单数据,插入xml字段以发布到支付网关,php,xml,Php,Xml,我需要从表单中获取支付信息并将其放在XML中,然后将其发布到支付网关服务器。我充其量只是个新手,我不知道最简单的方法是什么 通过在静态php文件上手动将信息输入XML,我成功地将信息发布到支付网关,因此我知道XML是正确的,对我来说唯一真正的问题是找到获取表单数据并将其放入XML的最简单方法 下面是php文件和XML的示例 <?php $TransactionId = intval( date(Yms). rand(1,9) . rand(0,9) . rand(0,9) . rand(

我需要从表单中获取支付信息并将其放在XML中,然后将其发布到支付网关服务器。我充其量只是个新手,我不知道最简单的方法是什么

通过在静态php文件上手动将信息输入XML,我成功地将信息发布到支付网关,因此我知道XML是正确的,对我来说唯一真正的问题是找到获取表单数据并将其放入XML的最简单方法

下面是php文件和XML的示例

<?php 
$TransactionId = intval( date(Yms). rand(1,9) . rand(0,9) . rand(0,9) . rand(0,9) . rand(0,9). rand(0,9) );

$MerchantId="111111";
$TerminalId="111111";
$ApiPassword="111111";
$private_key="asdfasghgfdhggdfgs";
$ApiPassword_encrypt=hash('sha256',$ApiPassword);   

$xmlReq='<?xml version="1.0" encoding="UTF-8" ?>
<TransactionRequest xmlns="https://test.processing.com/securePayments/direct/v1/processor.php">
<Language>ENG</Language>
<Credentials>
<MerchantId>'.$MerchantId.'</MerchantId>
<TerminalId>'.$TerminalId.'</TerminalId>
<TerminalPassword>'.$ApiPassword_encrypt.'</TerminalPassword>
</Credentials>
<TransactionType>LP001</TransactionType>
<TransactionId>'.$TransactionId.'</TransactionId>
<ReturnUrl page="http://www.website.net/response.php">
<Param>
<Key>inv</Key>
<Value>'.$TransactionId.'</Value>
</Param>        
</ReturnUrl>
<CurrencyCode>USD</CurrencyCode>
<TotalAmount>44450</TotalAmount>

<CardDetails>
<CardHolderName>John Smith</CardHolderName>
<CardNumber>4653111111111111</CardNumber>
<CardExpireMonth>01</CardExpireMonth>
<CardExpireYear>15</CardExpireYear>
<CardType>VI</CardType>
<CardSecurityCode>030</CardSecurityCode>
<CardIssuingBank>UNKNOWN</CardIssuingBank>
<CardIssueNumber></CardIssueNumber>
</CardDetails>
</TransactionRequest>';

$signature_key=trim($private_key.$ApiPassword.$TransactionId);
$signature=base64_encode(hash_hmac("sha256", trim($xmlReq), $signature_key, True));
$encodedMessage=base64_encode($xmlReq);

使用某种占位符标记静态xml,如
{{key}
。然后使用此函数填充xml:

<?php
function fill_template($tpl, $values = array()) {
    $find = array();
    preg_match_all("/\\{\\{([^}]+)\\}\\}/", $tpl, &$find);

    foreach ($find[1] as $x => $key) {
        $repl = '';
        if (isset($values[$key])) {
            $repl = $values[$key];
        }
        $tpl = str_replace($find[0][$x], $repl);
    }

    return $tpl;
}
?>
这可能不是最优雅的解决方案,但它应该会让你行动起来

(显然,您需要验证表单数据,并在必要时将其编码为正确的xml字符。)

<?php
$payment_map = array('MerchantId' => 'xxx', 'TerminalId' => 'xxx');
$payment_map = array_merge($payment_map, $_POST);
$xml_template = "your markedup xml";
$xml = fill_template($xml_template, $payment_map);
?>