|
|
@ -109,50 +109,101 @@ class ChinaTaxes |
|
|
*/ |
|
|
*/ |
|
|
public function savingDetailedData(): array |
|
|
public function savingDetailedData(): array |
|
|
{ |
|
|
{ |
|
|
$userName = !empty($this->puCodeUser['ContactName']) ? $this->puCodeUser['ContactName'] : $this->puCodeUser['UserName']; |
|
|
$puCodeUser = $this->puCodeUser; |
|
|
$zxbz1 = strpos($this->puCodeUser['WaterUsage'], '居民') !== false ? '0.59' : '0.27'; |
|
|
$mxGrid = []; |
|
|
$mxGrid = [ |
|
|
foreach ($puCodeUser as $data) { |
|
|
'bdznsrsbh' => $this->puCodeUser['bdznsrsbh'],// 被代征纳税人识别号 * |
|
|
$userName = !empty($data['ContactName']) ? $data['ContactName'] |
|
|
'bdznsrmc' => $userName,// 被代征纳税人名称 * |
|
|
: $data['UserName']; |
|
|
'gjhdqszDm' => '156',// 国家或地区数字代码 |
|
|
$zxbz1 = strpos($data['WaterUsage'], '居民') !== false ? '0.59' |
|
|
'sfzjlxDm' => '201',// 身份证件类型代码 |
|
|
: '0.27'; |
|
|
'zjhm' => !empty($this->puCodeUser['CertificateCode']) ? $this->puCodeUser['CertificateCode'] : '',// 证件号码 * |
|
|
$mxGrid[] = [ |
|
|
'hyDm' => '6490',// 行业代码 |
|
|
'bdznsrsbh' => $data['bdznsrsbh'], |
|
|
'zsxmDm' => '30433',// 征收项目代码 |
|
|
// 被代征纳税人识别号 * |
|
|
'zspmDm' => '304331300',// 征收品目代码 |
|
|
'bdznsrmc' => $userName, |
|
|
'zszmDm' => '',// 征收子目代码 |
|
|
// 被代征纳税人名称 * |
|
|
'jsyj' => $this->puCodeUser['jsyj'],// 计税依据,保留两位小数 |
|
|
'gjhdqszDm' => '156', |
|
|
'sl1' => '',// 税率,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
// 国家或地区数字代码 |
|
|
'ynse' => '',// 应纳税额,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
'sfzjlxDm' => '201', |
|
|
'ydzse' => '',// 应代征税额,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
// 身份证件类型代码 |
|
|
'yjse' => '',// 已缴税额,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
'zjhm' => !empty($data['CertificateCode']) |
|
|
'ydzse1' => '',// 已代征税额,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
? $data['CertificateCode'] : '', |
|
|
'jmse' => '',// 减免税额,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
// 证件号码 * |
|
|
'phjmse' => '',// 增值税小规模纳税人减征额 |
|
|
'hyDm' => '6490', |
|
|
'phjzbl' => '',// 增值税小规模纳税人减征比例 |
|
|
// 行业代码 |
|
|
'phjmxzDm' => '',// 增值税小规模纳税人减免性质代码 |
|
|
'zsxmDm' => '30433', |
|
|
'ssjmxzDm' => '',// 税收减免性质代码 |
|
|
// 征收项目代码 |
|
|
'wszmkjbz' => 'Y',// 完税证明开具标志为 Y 开具,N不开具 |
|
|
'zspmDm' => '304331300', |
|
|
'xmmc' => $this->puCodeUser['project_name'],// 项目名称 |
|
|
// 征收品目代码 |
|
|
'xmbm' => substr(time(),1, 9),// 项目编码 |
|
|
'zszmDm' => '', |
|
|
'username' => $userName,// 用户名称(同一个批次,同一个用户编号下,值相同) |
|
|
// 征收子目代码 |
|
|
'nbyhbm' => $this->puCodeUser['UserCode'],// 用户编号 |
|
|
'jsyj' => $data['jsyj'], |
|
|
'jldwmc' => '立方米',// 单位 |
|
|
// 计税依据,保留两位小数 |
|
|
'sl' => $this->puCodeUser['WaterQty'] ?? '',// 数量 |
|
|
'sl1' => '', |
|
|
'zxbz1' => $zxbz1,// 标准 |
|
|
// 税率,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
'skyhmc' => !empty($this->puCodeUser['BankName']) ? $this->puCodeUser['BankName'] : '',// 托收银行(同一个批次,同一个用户编号下,值相同) |
|
|
'ynse' => '', |
|
|
'yhzh' => !empty($this->puCodeUser['BankAccountCode']) ? $this->puCodeUser['BankAccountCode'] : '',// 银行账号(同一个批次,同一个用户编号下,值相同) |
|
|
// 应纳税额,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
'zsfsmc' => $this->puCodeUser['zsfsmc'],// 缴费方式(同一个批次,同一个用户编号下,值相同) |
|
|
'ydzse' => '', |
|
|
'tjsd' => $this->puCodeUser['ThisLastReadingTime'],// 收费时段(同一个批次,同一个用户编号下,值相同) |
|
|
// 应代征税额,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
'jfyj1' => $this->puCodeUser['jsyj'],// 计费依据(同一个批次,同一个用户编号下,值相同) |
|
|
'yjse' => '', |
|
|
'yhje' => '0.00',// 优惠金额 |
|
|
// 已缴税额,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
'hjje' => $this->puCodeUser['jsyj'],// 合计金额 |
|
|
'ydzse1' => '', |
|
|
'jfrq' => $this->puCodeUser['jfrq'],// 缴费时间(同一个批次,同一个用户编号下,值相同) |
|
|
// 已代征税额,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
'lxfs' => !empty($this->puCodeUser['CellPhone']) ? $this->puCodeUser['CellPhone'] : '',// 联系方式(同一个批次,同一个用户编号下,值相同) |
|
|
'jmse' => '', |
|
|
'lxdz' => !empty($this->puCodeUser['WaterUseAddress']) ? $this->puCodeUser['WaterUseAddress'] : '',// 送票地址(同一个批次,同一个用户编号下,值相同) |
|
|
// 减免税额,可手工填写,不填则默认系统自动计算,保留两位小数 |
|
|
'remark' => '无',// 备注(同一个批次,同一个用户编号下,值相同) |
|
|
'phjmse' => '', |
|
|
'bz' => '',// 备注信息(同一个批次,同一个用户编号下,值相同) |
|
|
// 增值税小规模纳税人减征额 |
|
|
]; |
|
|
'phjzbl' => '', |
|
|
|
|
|
// 增值税小规模纳税人减征比例 |
|
|
|
|
|
'phjmxzDm' => '', |
|
|
|
|
|
// 增值税小规模纳税人减免性质代码 |
|
|
|
|
|
'ssjmxzDm' => '', |
|
|
|
|
|
// 税收减免性质代码 |
|
|
|
|
|
'wszmkjbz' => 'Y', |
|
|
|
|
|
// 完税证明开具标志为 Y 开具,N不开具 |
|
|
|
|
|
'xmmc' => $data['project_name'], |
|
|
|
|
|
// 项目名称 |
|
|
|
|
|
'xmbm' => substr(time(), 1, 9), |
|
|
|
|
|
// 项目编码 |
|
|
|
|
|
'username' => $userName, |
|
|
|
|
|
// 用户名称(同一个批次,同一个用户编号下,值相同) |
|
|
|
|
|
'nbyhbm' => $data['UserCode'], |
|
|
|
|
|
// 用户编号 |
|
|
|
|
|
'jldwmc' => '立方米', |
|
|
|
|
|
// 单位 |
|
|
|
|
|
'sl' => $data['WaterQty'] ?? '', |
|
|
|
|
|
// 数量 |
|
|
|
|
|
'zxbz1' => $zxbz1, |
|
|
|
|
|
// 标准 |
|
|
|
|
|
'skyhmc' => !empty($data['BankName']) ? $data['BankName'] |
|
|
|
|
|
: '', |
|
|
|
|
|
// 托收银行(同一个批次,同一个用户编号下,值相同) |
|
|
|
|
|
'yhzh' => !empty($data['BankAccountCode']) |
|
|
|
|
|
? $data['BankAccountCode'] : '', |
|
|
|
|
|
// 银行账号(同一个批次,同一个用户编号下,值相同) |
|
|
|
|
|
'zsfsmc' => $data['zsfsmc'], |
|
|
|
|
|
// 缴费方式(同一个批次,同一个用户编号下,值相同) |
|
|
|
|
|
'tjsd' => $data['ThisLastReadingTime'], |
|
|
|
|
|
// 收费时段(同一个批次,同一个用户编号下,值相同) |
|
|
|
|
|
'jfyj1' => $data['jsyj'], |
|
|
|
|
|
// 计费依据(同一个批次,同一个用户编号下,值相同) |
|
|
|
|
|
'yhje' => '0.00', |
|
|
|
|
|
// 优惠金额 |
|
|
|
|
|
'hjje' => $data['jsyj'], |
|
|
|
|
|
// 合计金额 |
|
|
|
|
|
'jfrq' => $data['jfrq'], |
|
|
|
|
|
// 缴费时间(同一个批次,同一个用户编号下,值相同) |
|
|
|
|
|
'lxfs' => !empty($data['CellPhone']) ? $data['CellPhone'] |
|
|
|
|
|
: '', |
|
|
|
|
|
// 联系方式(同一个批次,同一个用户编号下,值相同) |
|
|
|
|
|
'lxdz' => !empty($data['WaterUseAddress']) |
|
|
|
|
|
? $data['WaterUseAddress'] : '', |
|
|
|
|
|
// 送票地址(同一个批次,同一个用户编号下,值相同) |
|
|
|
|
|
'remark' => '无', |
|
|
|
|
|
// 备注(同一个批次,同一个用户编号下,值相同) |
|
|
|
|
|
'bz' => '', |
|
|
|
|
|
// 备注信息(同一个批次,同一个用户编号下,值相同) |
|
|
|
|
|
]; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
$body = [ |
|
|
$body = [ |
|
|
'sbczlxDm' => 'insert', //申报操作类型代码,为”delete”,” insert” 或”update” |
|
|
'sbczlxDm' => 'insert', //申报操作类型代码,为”delete”,” insert” 或”update” |
|
|
@ -212,15 +263,18 @@ class ChinaTaxes |
|
|
$body = [ |
|
|
$body = [ |
|
|
'sbpch' => $sbpch, // 批次号,详见备注 |
|
|
'sbpch' => $sbpch, // 批次号,详见备注 |
|
|
'bdzmxGrid' => [ |
|
|
'bdzmxGrid' => [ |
|
|
'bdzmxlb' => [ |
|
|
'bdzmxlb' => [] |
|
|
'bdznsrsbh' => $bdznsrsbh, // 被代征人纳税人识别号 |
|
|
|
|
|
'yhbm' => $this->puCodeUser['UserCode'], // 用户编码 |
|
|
|
|
|
] |
|
|
|
|
|
], |
|
|
], |
|
|
'skssqq' => $this->invoiceIssuance['skssqq'], // 税款所属期起,格式,年-月-日 |
|
|
'skssqq' => $this->invoiceIssuance['skssqq'], // 税款所属期起,格式,年-月-日 |
|
|
'skssqz' => $this->invoiceIssuance['skssqz'], // 税款所属期止,格式,年-月-日 |
|
|
'skssqz' => $this->invoiceIssuance['skssqz'], // 税款所属期止,格式,年-月-日 |
|
|
'my' => $this->my // 密钥,数字签名校验和资格校验 |
|
|
'my' => $this->my // 密钥,数字签名校验和资格校验 |
|
|
]; |
|
|
]; |
|
|
|
|
|
foreach ($this->puCodeUser as $value) { |
|
|
|
|
|
$body['bdzmxGrid']['bdzmxlb'][] = [ |
|
|
|
|
|
'bdznsrsbh' => $bdznsrsbh, // 被代征人纳税人识别号 |
|
|
|
|
|
'yhbm' => $value['UserCode'] // 用户编码 |
|
|
|
|
|
]; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
$param = $this->getParamData('SSGZ_GZPT_PZ_SQKJDZJKPZ', $body); |
|
|
$param = $this->getParamData('SSGZ_GZPT_PZ_SQKJDZJKPZ', $body); |
|
|
|
|
|
|
|
|
@ -302,10 +356,10 @@ class ChinaTaxes |
|
|
'sfxxList' => [ |
|
|
'sfxxList' => [ |
|
|
'nsrlx' => '1' // 2 非自然人、1 自然人 |
|
|
'nsrlx' => '1' // 2 非自然人、1 自然人 |
|
|
], |
|
|
], |
|
|
'yhbh' => $this->puCodeUser['UserCode'], // 水司的用户编号 |
|
|
'yhbh' => $this->puCodeUser[0]['UserCode'], // 水司的用户编号 |
|
|
'nsrsbh' => $nsrsbh, // 传输类型为非自然人不可以为空 |
|
|
'nsrsbh' => $nsrsbh, // 传输类型为非自然人不可以为空 |
|
|
'nsrmc' => $this->puCodeUser['ContactName'], // 不可为空 |
|
|
'nsrmc' => $this->puCodeUser[0]['ContactName'], // 不可为空 |
|
|
'zjhm' => $this->puCodeUser['CertificateCode'], // 传输类型为自然人,不可以为空 |
|
|
'zjhm' => $this->puCodeUser[0]['CertificateCode'], // 传输类型为自然人,不可以为空 |
|
|
'zjlx' => '201', // 传输类型为自然人,不可以为空,添加证件类型代码 999 |
|
|
'zjlx' => '201', // 传输类型为自然人,不可以为空,添加证件类型代码 999 |
|
|
'gj' => '156', // 国籍 |
|
|
'gj' => '156', // 国籍 |
|
|
]; |
|
|
]; |
|
|
@ -331,17 +385,17 @@ class ChinaTaxes |
|
|
'gzxxList' => [ |
|
|
'gzxxList' => [ |
|
|
'gzxxVO' => [ |
|
|
'gzxxVO' => [ |
|
|
'nsrlx' => 1, // 2 非自然人、1 自然人 |
|
|
'nsrlx' => 1, // 2 非自然人、1 自然人 |
|
|
'yhbh' => $this->puCodeUser['UserCode'], // 水司的用户编号 |
|
|
'yhbh' => $this->puCodeUser[0]['UserCode'], // 水司的用户编号 |
|
|
'nsrsbh' => $nsrsbh, // 传输类型为单位不可以为空 |
|
|
'nsrsbh' => $nsrsbh, // 传输类型为单位不可以为空 |
|
|
'nsrmc' => $this->puCodeUser['ContactName'], // 不可为空 ? |
|
|
'nsrmc' => $this->puCodeUser[0]['ContactName'], // 不可为空 ? |
|
|
'zjhm' => $this->puCodeUser['CertificateCode'], // 传输类型为自然人,不可以为空 |
|
|
'zjhm' => $this->puCodeUser[0]['CertificateCode'], // 传输类型为自然人,不可以为空 |
|
|
'zjlx' => '201', // 传输类型为自然人,不可以为空,添加证件类型代码 999 |
|
|
'zjlx' => '201', // 传输类型为自然人,不可以为空,添加证件类型代码 999 |
|
|
'gj' => '156', // 国籍 |
|
|
'gj' => '156', // 国籍 |
|
|
'username' => $this->puCodeUser['UserName'], // 用户名称 |
|
|
'username' => $this->puCodeUser[0]['UserName'], // 用户名称 |
|
|
'skyhmc' => $this->puCodeUser['BankName'], // 托收银行 |
|
|
'skyhmc' => $this->puCodeUser[0]['BankName'], // 托收银行 |
|
|
'yhzh' => $this->puCodeUser['BankAccountCode'], // 银行账号 |
|
|
'yhzh' => $this->puCodeUser[0]['BankAccountCode'], // 银行账号 |
|
|
'lxdz' => $this->puCodeUser['MaillingAddress'], // 用户地址 |
|
|
'lxdz' => $this->puCodeUser[0]['MaillingAddress'], // 用户地址 |
|
|
'lxfs' => $this->puCodeUser['Telephone'], // 联系方式 |
|
|
'lxfs' => $this->puCodeUser[0]['Telephone'], // 联系方式 |
|
|
'sbpch' => $sbpch, // 申报批次号 |
|
|
'sbpch' => $sbpch, // 申报批次号 |
|
|
], |
|
|
], |
|
|
], |
|
|
], |
|
|
@ -531,17 +585,22 @@ xmlns:ns2="http://www.chinatax.gov.cn/dataspec/">'; |
|
|
* 循环处理bizXml数据 |
|
|
* 循环处理bizXml数据 |
|
|
* @param $body |
|
|
* @param $body |
|
|
* @param int $type |
|
|
* @param int $type |
|
|
|
|
|
* @param string $lastKey |
|
|
* @return string |
|
|
* @return string |
|
|
*/ |
|
|
*/ |
|
|
protected function bizXmlStr($body, int $type = 1): string |
|
|
protected function bizXmlStr($body, int $type = 1, string $lastKey = ''): string |
|
|
{ |
|
|
{ |
|
|
$xml = ''; |
|
|
$xml = ''; |
|
|
foreach ($body as $key => $value) { |
|
|
foreach ($body as $key => $value) { |
|
|
|
|
|
if (is_numeric($key) && !empty($lastKey)) { |
|
|
|
|
|
$xml .= $this->bizXmlStr($value, $type, $lastKey); |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
if (is_array($value)) { |
|
|
if (is_array($value)) { |
|
|
if ($type == 2) { |
|
|
if ($type == 2) { |
|
|
$xml .= "<ns2:{$key}>" . $this->bizXmlStr($value, $type) . "</ns2:{$key}>"; |
|
|
$xml .= "<ns2:{$key}>" . $this->bizXmlStr($value, $type, $key) . "</ns2:{$key}>"; |
|
|
} else { |
|
|
} else { |
|
|
$xml .= "<$key>" . $this->bizXmlStr($value, $type) . "</$key>"; |
|
|
$xml .= "<$key>" . $this->bizXmlStr($value, $type, $key) . "</$key>"; |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
if ($type == 2) { |
|
|
if ($type == 2) { |
|
|
@ -561,13 +620,17 @@ xmlns:ns2="http://www.chinatax.gov.cn/dataspec/">'; |
|
|
*/ |
|
|
*/ |
|
|
protected function mxGrid($mxGrid): string |
|
|
protected function mxGrid($mxGrid): string |
|
|
{ |
|
|
{ |
|
|
$xmlStr = '<ns2:sbMxsjVOList>'; |
|
|
$xmlStr = ''; |
|
|
|
|
|
foreach ($mxGrid as $data) { |
|
|
|
|
|
$xmlStr .= '<ns2:sbMxsjVOList>'; |
|
|
|
|
|
foreach ($data as $key => $value) { |
|
|
|
|
|
|
|
|
foreach ($mxGrid as $key => $value) { |
|
|
$xmlStr .= "<ns2:{$key}>" . $value . "</ns2:{$key}>"; |
|
|
$xmlStr .= "<ns2:{$key}>" . $value . "</ns2:{$key}>"; |
|
|
} |
|
|
|
|
|
$xmlStr .= '</ns2:sbMxsjVOList>'; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return $xmlStr . '</ns2:sbMxsjVOList>'; |
|
|
return $xmlStr; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
|