From 2b184bd48d1cf3c3da51cab91d56f2a6f974a648 Mon Sep 17 00:00:00 2001 From: wanghongjun <1445693971@qq,com> Date: Tue, 29 Oct 2024 14:37:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=B7=B1=E5=9C=B3=E7=A8=8E?= =?UTF-8?q?=E5=8A=A1=E6=8E=A5=E5=8F=A313?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/service/webService/ChinaTaxes.php | 118 +++++++++++++++++++------- 1 file changed, 87 insertions(+), 31 deletions(-) diff --git a/app/service/webService/ChinaTaxes.php b/app/service/webService/ChinaTaxes.php index b3069e3..7df9866 100644 --- a/app/service/webService/ChinaTaxes.php +++ b/app/service/webService/ChinaTaxes.php @@ -2,8 +2,6 @@ namespace app\service\webService; -use app\util\NewSm4; -use app\util\Sm4; use fast\FuncException; class ChinaTaxes @@ -127,18 +125,12 @@ class ChinaTaxes 'my' => $this->my, //密钥,数字签名校验和资格校验 'mxGrid' => $this->mxGrid($mxGrid) ]; - dump($body); + //dump($body); $param = $this->getParamData('SSGZ_GZPT_SZQKL_WTDZDRJK', $body); - dump($param); - // dump($param);exit; - $json_str = '{ "reqId": "'.md5(time() . rand(000,999)) - .'", "sid": "'.'SSGZ_GZPT_SZQKL_WTDZDRJK' - .'", "channelId":"'.$this->channelId - .'", "accessToken":"'.$this->accessToken - .'", "timestamp":"'.time() - .'", "data": { "bizXml": "H4sIAAAAAAAAAO1Xy27bRhT9FUN7SzMcipIMm4FkyS4VU6pEyQ9tComkRVJ8yaNE5KyyCdoUQR5o{r}{n}UMBIujAKNEEfyCJp6yZA+jOWXP1Fhw+JDIKmboGu6gXFc88992pmeDgkN294lrl2Wz3BumNvZWAW{r}{n}ZNZUW3YU3R5uZbqdnfViZg1P+rbSNx1b3cr4Ks7c4DelXuvmXrUnfSpVAACwp7uVPlY5tq2Ob6l4{r}{n}Upmu0b423rAxs5XRJhN3I5ebTqdZWdPt/qTvZYfO7axs5xQaYFeVcxl+k2o38EAmple1eN3G6slk{r}{n}M/ceGUmOTTzgj+JUGMSlrqzxy4oQh3CE8XjMM4CB6wCtAxgrIjqRkJUEpSUkklg+r/p1bbAr6029{r}{n}LnSJABu6gAW7nZe3BU4YuYf72/VSlopuyahOjqwhFQp5sdMCYlWcijVYaXR7n4ijnUqz1tL3tuuu{r}{n}jMSgWacLG0IbOgE36tuaIxiOLnbK/qq2Wo4OMgINMgx0RNnd8ZWdtjs46Ab/E3DmwGp3+wfQDOsN{r}{n}Wq+DaVMCRNwuew3i0FpnKkp00NY+Gwxa7BwxjWqXiB3BF6WpLqPKuOfTyRg1/biVNcd95RhJ5Qrb{r}{n}2uv3JK97oBNr0FVvjvWjeq+GnHz+sMl8JhFHiNaLrlG0Vt7uia4sL4roYWO/uafjScQMFGLjEzzQ{r}{n}+BJkWYAAEMv5apU9rLEo6pMoUgWWzF/89s3i3enswe/zs8cX51/NXr28fPLz7KdHF2+//+PsBf2d{r}{n}nb6YP7u3OH00u/vj7OF5uhstD5sRQ7N4yDIsQrBUKAKWgYVCnomkYTL2GDFCxzErvyyZMD80NGWM{r}{n}CQ1hnosECRUqNJ8iVIJxeRhGI8CeFdQBuGwdM3HWXWU5lCjclIKEOJcOAmxg36DDKRVZlEXxUoZc{r}{n}NCMTLu+NAAXAp7dYzEUwRApJ2AiH0EhY4z0tTIvjzoa1UkcwQK6WopdBOCBsWB5ZzSkJl8JUMgnj{r}{n}iAzMJJUEH/ruyk5ErQaofNyJizffXT5/Obv/ZvbtD4u7Ty7OXy/unM9f3buS+1CBgUwJlqg3GFAs{r}{n}ccvt5tp91+6j+2CthjpXdd+7X+enDy/fnl0+fzz/8s6V3McxAFFb0esE6IkpFvPX7vtfu+/jXpt/{r}{n}8Xr+9efzX57+9cMUAQ4xoaGonVgW/lfbGVdcPqf/jaEK1Pf/3FAck4fXbkp5J3rRi1/wcn/7FcD/{r}{n}CZ2KPLlgDAAA"}}'; - dump($json_str); - return $this->json_curl($json_str); + //dump($param); + dump($param);exit; + + die; } /** @@ -425,26 +417,13 @@ xmlns:ns2="http://www.chinatax.gov.cn/dataspec/">'; } } - // dump($xml2); - - //$sm4 = new NewSm4(); - $sm4 = new Sm4(); - if ($type == 2) { - //return $start1 . base64_encode(gzencode($xml2)) . $end; - // $aa = base64_encode(gzencode($xml2)); - // return $start1.$xml2.$end; - - dump($xml2); - $gzencode = gzencode($xml2); - $sm4Code = $sm4->encrypt($this->my, $gzencode); - return $start . $sm4Code . $end; + $xml2 = $this->enCompressXml($xml2); + return $start.$xml2.$end; } - dump($xml); - $gzencode = gzencode($xml); - $sm4Code = $sm4->encrypt($this->my, $gzencode); - return $start . $sm4Code . $end; + $xml = $this->enCompressXml($xml); + return $start.$xml.$end; } /** @@ -502,4 +481,81 @@ xmlns:ns2="http://www.chinatax.gov.cn/dataspec/">'; return json_decode($response, true); } -} \ No newline at end of file + + protected function demo() + { + $json_str = '{ "reqId": "'.md5(time() . rand(000,999)) + .'", "sid": "'.'SSGZ_GZPT_SZQKL_WTDZDRJK' + .'", "channelId":"'.$this->channelId + .'", "accessToken":"'.$this->accessToken + .'", "timestamp":"'.time() + .'", "data": { "bizXml": "H4sIAAAAAAAAAO1Xy27bRhT9FUN7SzMcipIMm4FkyS4VU6pEyQ9tComkRVJ8yaNE5KyyCdoUQR5o{r}{n}UMBIujAKNEEfyCJp6yZA+jOWXP1Fhw+JDIKmboGu6gXFc88992pmeDgkN294lrl2Wz3BumNvZWAW{r}{n}ZNZUW3YU3R5uZbqdnfViZg1P+rbSNx1b3cr4Ks7c4DelXuvmXrUnfSpVAACwp7uVPlY5tq2Ob6l4{r}{n}Upmu0b423rAxs5XRJhN3I5ebTqdZWdPt/qTvZYfO7axs5xQaYFeVcxl+k2o38EAmple1eN3G6slk{r}{n}M/ceGUmOTTzgj+JUGMSlrqzxy4oQh3CE8XjMM4CB6wCtAxgrIjqRkJUEpSUkklg+r/p1bbAr6029{r}{n}LnSJABu6gAW7nZe3BU4YuYf72/VSlopuyahOjqwhFQp5sdMCYlWcijVYaXR7n4ijnUqz1tL3tuuu{r}{n}jMSgWacLG0IbOgE36tuaIxiOLnbK/qq2Wo4OMgINMgx0RNnd8ZWdtjs46Ab/E3DmwGp3+wfQDOsN{r}{n}Wq+DaVMCRNwuew3i0FpnKkp00NY+Gwxa7BwxjWqXiB3BF6WpLqPKuOfTyRg1/biVNcd95RhJ5Qrb{r}{n}2uv3JK97oBNr0FVvjvWjeq+GnHz+sMl8JhFHiNaLrlG0Vt7uia4sL4roYWO/uafjScQMFGLjEzzQ{r}{n}+BJkWYAAEMv5apU9rLEo6pMoUgWWzF/89s3i3enswe/zs8cX51/NXr28fPLz7KdHF2+//+PsBf2d{r}{n}nb6YP7u3OH00u/vj7OF5uhstD5sRQ7N4yDIsQrBUKAKWgYVCnomkYTL2GDFCxzErvyyZMD80NGWM{r}{n}CQ1hnosECRUqNJ8iVIJxeRhGI8CeFdQBuGwdM3HWXWU5lCjclIKEOJcOAmxg36DDKRVZlEXxUoZc{r}{n}NCMTLu+NAAXAp7dYzEUwRApJ2AiH0EhY4z0tTIvjzoa1UkcwQK6WopdBOCBsWB5ZzSkJl8JUMgnj{r}{n}iAzMJJUEH/ruyk5ErQaofNyJizffXT5/Obv/ZvbtD4u7Ty7OXy/unM9f3buS+1CBgUwJlqg3GFAs{r}{n}ccvt5tp91+6j+2CthjpXdd+7X+enDy/fnl0+fzz/8s6V3McxAFFb0esE6IkpFvPX7vtfu+/jXpt/{r}{n}8Xr+9efzX57+9cMUAQ4xoaGonVgW/lfbGVdcPqf/jaEK1Pf/3FAck4fXbkp5J3rRi1/wcn/7FcD/{r}{n}CZ2KPLlgDAAA"}}'; + dump($json_str); + + $xmlData = $this->json_curl($json_str); + $dom = new \DOMDocument(); + $dom->loadXML($xmlData['result']); + $output = $this->xmlToArray($dom->documentElement); + + $data = $output['SZQKLDZSPSB0001ZipBase64ResponsBw']; + + dump($data); + $gzdecode = $this->deCompressXml($data); + dump($gzdecode); + exit(); + } + + protected function xmlDom($json_str) + { + $xmlData = $this->json_curl($json_str); + $dom = new \DOMDocument(); + $dom->loadXML($xmlData['result']); + return $this->xmlToArray($dom->documentElement); + } + + /** + * 加密 + * @param $str + * @return array|string|string[] + */ + protected function enCompressXml($str) + { + $gzencode = gzencode($str); + $baseStr = base64_encode($gzencode); + return str_replace(array("\n", "\r"), array('{n}', '{r}'), $baseStr); + } + + /** + * 解密 + * @param $str + * @return false|string + */ + protected function deCompressXml($str) + { + $repStr = str_replace(array('{n}', '{r}'), array("\n", "\r"), $str); + $baseStr = base64_decode($repStr); + return gzdecode($baseStr); + } + + /** + * + * @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; + } +}