You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
272 lines
6.4 KiB
272 lines
6.4 KiB
<?php
|
|
|
|
namespace app\service\webService;
|
|
|
|
use fast\FuncException;
|
|
|
|
class FeeService
|
|
{
|
|
|
|
protected $wsdl;
|
|
protected $port;
|
|
protected $pucode;
|
|
|
|
const ONE_KEY = 'SOAP-ENV:Body';
|
|
|
|
public function __construct($pucode)
|
|
{
|
|
$this->wsdl = env('wsdl.soap_url');
|
|
$this->port = env('wsdl.soap_port');
|
|
$this->pucode = $pucode;
|
|
}
|
|
|
|
/**
|
|
* 查询用户数量
|
|
* @return mixed
|
|
* @throws FuncException
|
|
*/
|
|
public function getUserTotal()
|
|
{
|
|
|
|
$arr = ['pucode' => $this->pucode];
|
|
|
|
$method = 'GetUserTotal';
|
|
|
|
$res = $this->curl($method, $this->xml_str($arr));
|
|
|
|
$key = 'NS1:' . $method . 'Response';
|
|
$this->dataValidate($res, $key);
|
|
|
|
return $res[$key];
|
|
}
|
|
|
|
|
|
/**
|
|
* 查询用户基本信息
|
|
* @return mixed
|
|
* @throws FuncException
|
|
*/
|
|
public function getUsers(): array
|
|
{
|
|
$arr = ['pucode' => $this->pucode];
|
|
|
|
$method = 'GetUsers';
|
|
|
|
$res = $this->curl($method, $this->xml_str($arr));
|
|
|
|
$key = 'NS1:GetUsersResponse';
|
|
$this->dataValidate($res, $key);
|
|
|
|
$key2 = 'NS2:TUserInfo';
|
|
$this->dataValidate($res[$key], $key2, 2);
|
|
|
|
return $res[$key][$key2];
|
|
}
|
|
|
|
/**
|
|
* 查询用户表资料
|
|
* @return mixed
|
|
* @throws FuncException
|
|
*/
|
|
public function getWaterMeters()
|
|
{
|
|
|
|
$arr = ['userCode' => $this->pucode];
|
|
|
|
$method = 'GetWaterMeters';
|
|
|
|
$res = $this->curl($method, $this->xml_str($arr));
|
|
|
|
$key = 'NS1:GetWaterMetersResponse';
|
|
$this->dataValidate($res, $key);
|
|
|
|
$key2 = 'NS2:TWaterMeter';
|
|
$this->dataValidate($res[$key], $key2, 2);
|
|
|
|
return $res[$key][$key2];
|
|
}
|
|
|
|
/**
|
|
* 查询用户抄表信息
|
|
* @param $param ['startCostYearMonth' => '2024-01','endCostYearMonth' => '2024-02']
|
|
* @throws FuncException
|
|
*/
|
|
public function getReadingDetail(array $param = [])
|
|
{
|
|
|
|
$arr = ['userCode' => $this->pucode];
|
|
|
|
if ($param) {
|
|
$arr = array_merge($arr, $param);
|
|
}
|
|
|
|
$method = 'GetReadingDetail';
|
|
|
|
$res = $this->curl($method, $this->xml_str($arr));
|
|
|
|
$key = 'NS1:GetReadingDetailResponse';
|
|
$this->dataValidate($res, $key);
|
|
|
|
$key2 = 'NS2:TUserReading';
|
|
$this->dataValidate($res[$key], $key2, 2);
|
|
|
|
return $res[$key][$key2];
|
|
}
|
|
|
|
/**
|
|
* 查询用户费用信息
|
|
* @param $param ['startCostYearMonth' => '2024-01','endCostYearMonth' => '2024-02','PaymentStatus' => '0']
|
|
* PaymentStatus 0:所有 1:未缴 2:已缴 5:部分缴
|
|
* @throws FuncException
|
|
*/
|
|
public function getComputeDetail(array $param = [])
|
|
{
|
|
|
|
$arr = ['userCode' => $this->pucode];
|
|
|
|
if ($param) {
|
|
$arr = array_merge($arr, $param);
|
|
}
|
|
|
|
$method = 'GetComputeDetail';
|
|
|
|
$res = $this->curl($method, $this->xml_str($arr));
|
|
|
|
$key = 'NS1:GetComputeDetailResponse';
|
|
$this->dataValidate($res, $key);
|
|
|
|
$key2 = 'NS2:TComputeDetail';
|
|
$this->dataValidate($res[$key], $key2, 2);
|
|
|
|
return $res[$key][$key2];
|
|
}
|
|
|
|
protected function xml_str($arr): string
|
|
{
|
|
$xml_arr = [];
|
|
|
|
foreach ($arr as $key => $value) {
|
|
$xml_arr[] = "<{$key}>" . $value . "</{$key}>";
|
|
}
|
|
|
|
return implode("\r\n", $xml_arr);
|
|
}
|
|
|
|
/**
|
|
* POST 调用xml接口
|
|
* @param $method
|
|
* @param $xml_filed
|
|
* @return array
|
|
* @throws FuncException
|
|
*/
|
|
protected function curl($method, $xml_filed): array
|
|
{
|
|
$xml = <<<XML
|
|
<?xml version="1.0"?>
|
|
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
|
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
|
|
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http:schemas.xmlsoap.org/soap/encoding/">
|
|
<NS1:{$method} xmlns:NS1="urn:FeeServiceIntf-IFeeService">
|
|
{$xml_filed}
|
|
</NS1:{$method}>
|
|
</SOAP-ENV:Body>
|
|
</SOAP-ENV:Envelope>
|
|
XML;
|
|
|
|
$wsdl = 'http://120.234.15.170:4000/FeeService.dll/soap/IFeeService';
|
|
|
|
// 初始化cURL会话
|
|
$ch = curl_init();
|
|
|
|
// 设置cURL选项
|
|
curl_setopt($ch, CURLOPT_URL, $wsdl); // 目标URL
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回结果而不是输出
|
|
curl_setopt($ch, CURLOPT_POST, true); // 发送POST请求
|
|
|
|
// 设置POST字段
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); // 设置HTTP头
|
|
|
|
// 执行cURL会话
|
|
$response = curl_exec($ch);
|
|
|
|
// 检查是否有错误发生
|
|
if (curl_errno($ch)) {
|
|
throw new FuncException('cURL error: ' . curl_error($ch));
|
|
}
|
|
|
|
// 关闭cURL会话
|
|
curl_close($ch);
|
|
|
|
$array = $this->getXmlDom($response);
|
|
|
|
return $this->curlValidate($array);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param $response
|
|
* @return array
|
|
*/
|
|
protected function getXmlDom($response): array
|
|
{
|
|
$dom = new \DOMDocument();
|
|
$dom->loadXML($response);
|
|
|
|
return $this->xmlToArray($dom->documentElement);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param $node
|
|
* @return array|mixed
|
|
*/
|
|
protected function xmlToArray($node)
|
|
{
|
|
$output = [];
|
|
|
|
if ($node->hasChildNodes()) {
|
|
foreach ($node->childNodes as $child) {
|
|
if ($child->nodeType === XML_ELEMENT_NODE) {
|
|
$output[$child->nodeName] = $this->xmlToArray($child);
|
|
} elseif ($child->nodeType === XML_TEXT_NODE) {
|
|
$output = $child->nodeValue;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param $array
|
|
* @return mixed
|
|
* @throws FuncException
|
|
*/
|
|
protected function curlValidate($array)
|
|
{
|
|
|
|
if (!isset($array[self::ONE_KEY])) {
|
|
throw new FuncException('数据获取失败 -0');
|
|
}
|
|
|
|
return $array[self::ONE_KEY];
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param $data
|
|
* @param $key
|
|
* @param int $level
|
|
* @throws FuncException
|
|
*/
|
|
public function dataValidate($data, $key, int $level = 1)
|
|
{
|
|
if (!isset($data[$key])) {
|
|
throw new FuncException("数据获取失败 -{$level}");
|
|
}
|
|
}
|
|
}
|