因使用的是前置机监听的服务(这里是8007端口),win环境,所以写成一个文件,没拆成类。
<?php
//引入数据库配置
require_once("mysql.class.new.php");
$db = new Dbc();
//请求的url,监听本地8007端口
$url = "http://127.0.0.1:8007";
//交易数据需要写入的表名
$table = "test"; //测试表
header('Content-type:text/html;charset=UTF-8');
error_reporting(E_ALL);
function getData($url, $page)
{
$req = '<?xml version="1.0" encoding="GBK"?>
<FOX>
<SIGNONMSGSRQV1>
<SONRQ>
<DTCLIENT>2010-10-8 10:00:56</DTCLIENT>
<CID>1100641347</CID>
<USERID>yqcs</USERID>
<USERPASS>a123456789</USERPASS>
<GENUSERKEY>Y</GENUSERKEY>
<APPID>XYFIB</APPID>
<APPVER>1000</APPVER>
</SONRQ>
</SIGNONMSGSRQV1>
<SECURITIES_MSGSRQV1>
<BALNTRADEINQUIRYTRNRQ>
<TRNUID>89221222</TRNUID>
<RQBODY>
<ACCTFROM>
<ACCTID>117010100100733866</ACCTID>
<NAME>test</NAME>
</ACCTFROM>
<INCTRAN>
<DTSTART>2020-09-12</DTSTART>
<DTEND>2020-11-15</DTEND>
<PAGE>' . $page . '</PAGE>
</INCTRAN>
</RQBODY>
</BALNTRADEINQUIRYTRNRQ>
</SECURITIES_MSGSRQV1>
</FOX>';
//header
$headers = array(
"Content-Type: application/x-fox",
"Content-Length: " . strlen($req) . "",
// "Accept: application/json",
);
$data = request($url, $req, $headers);
$data = str_replace('gb2312', 'UTF-8', $data);
$data = iconv('GBK', 'UTF-8', $data);
//$data = mb_convert_encoding($data,'utf-8');
$data = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
$data = json_encode($data);
$data = json_decode($data, true);
return $data;
}
$page = 1;
while (true) {
$data = getData($url, $page);
// file_put_contents('D:/xingye/datainer.txt', var_export($data, true));die;
if (0 == $data['SIGNONMSGSRSV1']['SONRS']['STATUS']['CODE'] && 0 == $data['SECURITIES_MSGSRSV1']['BALNTRADEINQUIRYTRNRS']['STATUS']['CODE']) {
$more = $data['SECURITIES_MSGSRSV1']['BALNTRADEINQUIRYTRNRS']['RSBODY']['@attributes']['MORE'] == 'Y' ? 1 : 0; //是否仍有下页
if (!isset($data['SECURITIES_MSGSRSV1']['BALNTRADEINQUIRYTRNRS']['RSBODY']['CONTENT']) || !$data['SECURITIES_MSGSRSV1']['BALNTRADEINQUIRYTRNRS']['RSBODY']['CONTENT']) {
echo '请求结束';
break;
}
$allData = $data['SECURITIES_MSGSRSV1']['BALNTRADEINQUIRYTRNRS']['RSBODY']['CONTENT'];
if (!$allData[0]) {
$allData = [$allData]; //避免对xml解析不一致,如果不是二维转为二维
}
foreach ($allData as $key => $val) {
$sql_sel = "select count(*) as num from {$table} where p_code='{$val['ATTACHINFO']}'";
$result_sel = $db->getOne($sql_sel);
if (!isset($result_sel['num']) || $result_sel['num'] == 0) {
//写入数据
$p_code = $val['ATTACHINFO']; //流水号
$amount_type = $val['TRNTYPE'] == 'DEBIT' ? 2 : 1; //2 借 1贷
$recipName = isset($val['CORRELATE_NAME']) ? $val['CORRELATE_NAME'] : ''; //汇款人姓名, 不一定存在
$time = date('Y-m-d H:i:s', strtotime($val['DTACCT'])); //交易发生时间
$p_money = $val['TRNAMT']; //交易金额
$recipAccNo = isset($val['CORRELATE_ACCTID']) ? $val['CORRELATE_ACCTID'] : ''; //汇款人账号,不一定存在
$sql_insert = "insert into $table(`p_code`,`amount_type`,`p_name`,`p_time`,`p_money`,`bank_id`,`bank_name`,`p_account`,`is_system_add`) values ('" . $p_code . "'," . $amount_type . ",'" . $recipName . "','" . $time . "','" . $p_money . "','13','兴业银行','" . $recipAccNo . "',1)";
// file_put_contents('D:/xingye/datain.txt', $sql_insert);
$r = $db->query($sql_insert);
echo $r . "\r\n";
} //endif
} //endforeach
if ($more) {
$page++;
} else {
echo '请求结束';
break;
}
// file_put_contents('D:/xingye/data.txt', var_export($allData, true));
} else {
echo '没有获取到数据';
break;
}
}
//发送请求
function request($url, $data = null, $header = null)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
if (!empty($data)) {
@curl_setopt($ch, CURLOPT_POST, true);
@curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
if (!empty($header)) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
$str = curl_exec($ch);
$err = curl_error($ch);
if ($err) {
return $err;
}
curl_close($ch);
return $str;
}