【发布时间】:2017-07-11 04:13:30
【问题描述】:
当我运行脚本时,它会在数据库中存储空白。我哪里错了。下面是php脚本:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$request= <<<XML
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:c2b="http://cps.huawei.com/cpsinterface/c2bpayment">
<soapenv:Header/>
<soapenv:Body>
<c2b:C2BPaymentValidationRequest>
<TransactionType>PayBill</TransactionType>
<TransID>1234560000007031</TransID>
<TransTime>20140227082020</TransTime>
<TransAmount>123.00</TransAmount>
<BusinessShortCode>12345</BusinessShortCode>
<BillRefNumber></BillRefNumber>
<InvoiceNumber></InvoiceNumber>
<MSISDN>254722703614</MSISDN>
<KYCInfo>
<KYCName>[Personal Details][First Name]</KYCName>
<KYCValue>Hoiyor</KYCValue>
</KYCInfo>
<KYCInfo>
<KYCName>[Personal Details][Middle Name]</KYCName>
<KYCValue>G</KYCValue>
</KYCInfo>
<KYCInfo>
<KYCName>[Personal Details][Last Name]</KYCName>
<KYCValue>Chen</KYCValue>
</KYCInfo>
</c2b:C2BPaymentValidationRequest>
</soapenv:Body>
</soapenv:Envelope>
XML;
//clean the soap input received from Mpesa so that you can parse it as raw XML
$clean_xml = str_replace(['soapenv:','c2b:' ],'', $request);
$xml = simplexml_load_string($clean_xml);
//you can extract any payment details using the below code
$server = '';
$user = '';
$pass = '';
$db = '';
foreach ($xml as $key => $cur)
{
//VALUES
$AccountNo = $cur->BillRefNumber;
$TransAmount = $cur->TransAmount;
$TransID = $cur->TransID;
$KYCInfo = $cur->KYCInfo;
$MSISDN = $cur->MSISDN;
//SAVE TO DATABASE
$link= mysql_connect($server,$user,$pass) or die (mysql_error());
$conn= mysql_select_db($db) or die (mysql_error($link));
$query = "INSERT INTO c2b(TransID,MSISDN,BillRefNumber,KYCInfo,Amount) VALUES('$TransID','$MSISDN','$AccountNo','$KYCInfo','$TransAmount')";
if (!mysql_query($query))
{
die('Error: ' . mysql_error());
}
else
{
echo "New Records added successfully ! <br /><br />";
}
}
?>
我怀疑错误在于使用 str_ireplace 函数解析 xml 数据。我查看了 PHP 文档,似乎我已经按照书本完成了所有工作。
【问题讨论】:
-
出于许多原因,您不应再使用 mysql_* 函数。如果您从教程中复制了此代码,那么寻找另一个可能是个好主意。
-
您考虑过看看生成的 SQL 代码吗?
-
我想我之前的评论不清楚。在
$query = ...行之后添加var_dump($query);,然后按Ctrl+U 以查看原始输出。 -
@ÁlvaroGonzález 这是我得到的答案
string(82) "INSERT INTO c2b(TransID,MSISDN,BillRefNumber,KYCInfo,Amount) VALUES('','','','','')" -
瞧!您刚刚从调查中丢弃了一半的代码;-)
标签: php mysql xml-parsing