当simplexml载入数据提示非utf-8时的处理

232 篇文章 0 订阅
140 篇文章 1 订阅

因使用的是前置机监听的服务(这里是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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值