api_DZFPKJ & api_DZFPCX(get_AES_url代码优化)
通过AES加密网站的接口来传值,不需要手动加密字符串后复制过来传值。
1 #coding:utf-8 2 import requests 3 import re 4 def get_aes_url(key, text): 5 url = 'http://www.ssleye.com/des/web_aes_encrypt' 6 header = { 7 "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" 8 } 9 payload = { 10 "text": text, 11 "encode_flag": "utf8", 12 "key": key, 13 "iv": "", 14 "mode": "ECB", 15 "padding": "pkcs5", 16 "out_mode": "base64" 17 } 18 r = requests.post(url=url, headers=header, data=payload) 19 result = r.text 20 aa = re.findall("<pre>(.+?)</pre>", result) 21 bb = str(aa[0]) 22 return bb 23 24 if __name__ == '__main__': 25 # key = 'WuMlCJRN8zO886dw' 26 # text = '<REQUEST_FPKJXX><FPKJXX_FPTXX><NSRSBH>330201999999868</NSRSBH><NSRMC>航信培训企业</NSRMC><DDLSH>3302019999998682223</DDLSH><DDH></DDH><DDDATE>2018-07-20</DDDATE><BMB_BBH>13.0</BMB_BBH><XHF_DZ><![CDATA[宁波研发园]]></XHF_DZ><XHF_DH><![CDATA[88776655]]></XHF_DH><XHF_YHZH><![CDATA[中国银行6228480310540239016]]></XHF_YHZH><GHFMC><![CDATA[Nobita]]></GHFMC><GHF_NSRSBH><![CDATA[330203999999018]]></GHF_NSRSBH><GHF_DZ><![CDATA[宁波研发园]]></GHF_DZ><GHF_GDDH><![CDATA[55667788]]></GHF_GDDH><GHF_SJ>13867866196</GHF_SJ><GHF_EMAIL><![CDATA[364942727@qq.com]]></GHF_EMAIL><GHF_YHZH><![CDATA[光大银行6228480310540239018]]></GHF_YHZH><KPLY>999</KPLY><KPY>Nobita</KPY><SKY>Nobita</SKY><FHR>Nobita</FHR><KPLX>1</KPLX><YFP_DM></YFP_DM><YFP_HM></YFP_HM><KPHJJE>0.1</KPHJJE><HJBHSJE>0.1</HJBHSJE><HJSE>0</HJSE><BZ><![CDATA[公共能耗费,面积]]></BZ><BB></BB><WB></WB><FPZL></FPZL><SGBZ></SGBZ></FPKJXX_FPTXX><FPKJXX_XMXXS><FPKJXX_XMXX><XMMC><![CDATA[1]]></XMMC><XMDW></XMDW><GGXH></GGXH><XMSL>0</XMSL><HSBZ>0</HSBZ><XMDJ>0</XMDJ><FPHXZ>0</FPHXZ><SPBM>20300000</SPBM><ZXBM></ZXBM><YHZCBS>0</YHZCBS><LSLBS>3</LSLBS><ZZSTSGL></ZZSTSGL><XMJE>0.1</XMJE><SL>0</SL><SE>0</SE><KCE></KCE><KCQHSJE></KCQHSJE></FPKJXX_XMXX></FPKJXX_XMXXS></REQUEST_FPKJXX>' 27 # aa = get_aes_url(key, text) 28 # print(aa) 29 # print(type(aa)) 30 pass
api_DZFPKJ 代码如下:
1 #coding:utf-8 2 from get_AES_url import get_aes_url 3 from get_urlencode import jm_urlencode 4 from get_Base64 import str_base64 5 from get_Sha1 import hash_hmac 6 from hashlib import sha1 7 import requests 8 import time 9 #定义参数 10 host = "http://test2.51fapiaonb.cn:4011/DZFP_Four" 11 data_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) 12 nsrsbh = "330201999999868" #这里填需要查询的纳税人识别号 13 DDLSH_str1 = "3302019999998" 14 DDLSH_str2 = "684229" 15 DDLSH = DDLSH_str1 + DDLSH_str2 16 ddh = "" 17 date = "2018-07-20" 18 KPLX = "1" #1 蓝票 2 红票 19 YFP_DM = "" 20 YFP_HM = "" 21 SGBZ = "" #传空 22 YHZCBS = "0" #优惠标识 23 LSLBS = "3" #0税率标志 24 ZZSTSGL = "" #内容 25 SPBM = "20300000" #免税 4030000000000000000 不征收 6010000000000000000 26 #所有商品行数据 27 KPHJJE = "0.1" 28 HJBHSJE = "0.1" 29 HJSE = "0" 30 #单个商品行数据 31 XMJE = "0.1" 32 SL = "0" 33 SE = "0" 34 #发票开具信息 35 mxs = "<FPKJXX_XMXX>" + \ 36 "<XMMC><![CDATA[1]]></XMMC>" + \ 37 "<XMDW></XMDW>" + \ 38 "<GGXH></GGXH>" + \ 39 "<XMSL>0</XMSL>" + \ 40 "<HSBZ>0</HSBZ>" + \ 41 "<XMDJ>0</XMDJ>" + \ 42 "<FPHXZ>0</FPHXZ>" + \ 43 "<SPBM>" + SPBM + "</SPBM>" + \ 44 "<ZXBM></ZXBM>" + \ 45 "<YHZCBS>" + YHZCBS + "</YHZCBS>" + \ 46 "<LSLBS>" + LSLBS + "</LSLBS>" + \ 47 "<ZZSTSGL>" + ZZSTSGL + "</ZZSTSGL>" + \ 48 "<XMJE>" + XMJE + "</XMJE>" + \ 49 "<SL>" + SL + "</SL>" + \ 50 "<SE>" + SE + "</SE>" + \ 51 "<KCE></KCE>" + \ 52 "<KCQHSJE></KCQHSJE>" + \ 53 "</FPKJXX_XMXX>" 54 55 #电子发票外部API-DZFPKJ(电子发票开具) 56 original_content = "<REQUEST_FPKJXX>" + \ 57 "<FPKJXX_FPTXX>" + \ 58 "<NSRSBH>" + nsrsbh + "</NSRSBH>" + \ 59 "<NSRMC>航信培训企业</NSRMC>" + \ 60 "<DDLSH>" + DDLSH + "</DDLSH>" + \ 61 "<DDH>" + ddh + "</DDH>" + \ 62 "<DDDATE>" + date + "</DDDATE>" + \ 63 "<BMB_BBH>13.0</BMB_BBH>" + \ 64 "<XHF_DZ><![CDATA[宁波研发园]]></XHF_DZ>" + \ 65 "<XHF_DH><![CDATA[88776655]]></XHF_DH>" + \ 66 "<XHF_YHZH><![CDATA[中国银行6228480310540239016]]></XHF_YHZH>" + \ 67 "<GHFMC><![CDATA[Nobita]]></GHFMC>" + \ 68 "<GHF_NSRSBH><![CDATA[330203999999018]]></GHF_NSRSBH>" + \ 69 "<GHF_DZ><![CDATA[宁波研发园]]></GHF_DZ>" + \ 70 "<GHF_GDDH><![CDATA[55667788]]></GHF_GDDH>" + \ 71 "<GHF_SJ>13867866196</GHF_SJ>" + \ 72 "<GHF_EMAIL><![CDATA[364942727@qq.com]]></GHF_EMAIL>" + \ 73 "<GHF_YHZH><![CDATA[光大银行6228480310540239018]]></GHF_YHZH>" + \ 74 "<KPLY>999</KPLY>" + \ 75 "<KPY>Nobita</KPY>" + \ 76 "<SKY>Nobita</SKY>" + \ 77 "<FHR>Nobita</FHR>" + \ 78 "<KPLX>" + KPLX + "</KPLX>" + \ 79 "<YFP_DM>" + YFP_DM + "</YFP_DM>" + \ 80 "<YFP_HM>" + YFP_HM + "</YFP_HM>" + \ 81 "<KPHJJE>" + KPHJJE + "</KPHJJE>" + \ 82 "<HJBHSJE>" + HJBHSJE + "</HJBHSJE>" + \ 83 "<HJSE>" + HJSE + "</HJSE>" + \ 84 "<BZ><![CDATA[公共能耗费,面积]]></BZ>" + \ 85 "<BB></BB>" + \ 86 "<WB></WB>" + \ 87 "<FPZL></FPZL>" + \ 88 "<SGBZ>" + SGBZ + "</SGBZ>" + \ 89 "</FPKJXX_FPTXX>" + \ 90 "<FPKJXX_XMXXS>" + \ 91 mxs + \ 92 "</FPKJXX_XMXXS>" + \ 93 "</REQUEST_FPKJXX>" 94 #AES密钥 95 key = 'WuMlCJRN8zO886dw' 96 # print(original_content) 97 ''' AES加密算法的网站:http://www.ssleye.com/aes_cipher.html 98 AES加密(加解密算法/工作模式/填充方式:AES/ECB/PKCS5Padding;测试环境key值:WuMlCJRN8zO886dw 99 ''' 100 #初始数据original_content进行AES和Base64加密后,得到original_content_Aes 101 original_content_Aes_Base64 = get_aes_url(key, original_content) 102 103 #通用报文初始数据(DZFPCX发票查询) 104 original_data = '<?xml version=\"1.0\" encoding=\"utf-8\"?>' + \ 105 "<interface>" + \ 106 "<globalInfo>" + \ 107 "<version>4.0</version>" + \ 108 "<interfaceCode>DZFPKJ</interfaceCode>" + \ 109 "<token>{}</token>".format(nsrsbh) + \ 110 "<requestTime>{}</requestTime>".format(data_time) + \ 111 "</globalInfo>" + \ 112 "<Data>" + \ 113 "<content>{}</content>".format(original_content_Aes_Base64) + \ 114 "</Data>" + \ 115 "</interface>" 116 117 #通用报文原始数据original_data进行Base64加密后,得到RequestParam,再进行urlencode解码 118 RequestParam_Base64 = str_base64(original_data) 119 # print("通用报文进行Base64加密后:\n", RequestParam_Base64) 120 RequestParam_Base64_Urlencode = jm_urlencode(RequestParam_Base64) 121 # print("通用报文进行Base64和Urlencode加密后:\n", RequestParam_Base64_Urlencode) 122 123 #RequestParam通过HMAC-SHA1加密,得到Signature 124 Signature = hash_hmac('I7GBo4w9E6dmGlLVJMaVtXrhbNqp4KBh', RequestParam_Base64, sha1) 125 # print("通用报文进行Base64和Hash_hmac加密后:\n", Signature) 126 127 #请求体data构建 128 RequestParam = RequestParam_Base64_Urlencode 129 data = "RequestParam=" + RequestParam + "&Signature=" + Signature 130 result = requests.post(url=host, params=data) 131 # print(result.url) 132 print('订单流水号为:\n{}'.format(DDLSH)) 133 print('发票查询返回报文为:\n{}'.format(result.text))
api_DZFPKJ_QDFP 代码如下:
1 #coding:utf-8 2 from get_AES_url import get_aes_url 3 from get_urlencode import jm_urlencode 4 from get_Base64 import str_base64 5 from get_Sha1 import hash_hmac 6 from hashlib import sha1 7 import requests 8 import time 9 #定义参数 10 host = "http://test2.51fapiaonb.cn:4011/DZFP_Four" 11 data_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) 12 nsrsbh = "330201999999868" #这里填需要查询的纳税人识别号 13 DDLSH_str1 = "3302019999998" 14 DDLSH_str2 = "684229" 15 DDLSH = DDLSH_str1 + DDLSH_str2 16 ddh = "" 17 date = "2018-07-20" 18 KPLX = "1" #1 蓝票 2 红票 19 YFP_DM = "" 20 YFP_HM = "" 21 SGBZ = "" #传空 22 YHZCBS = "0" #优惠标识 23 LSLBS = "3" #0税率标志 24 ZZSTSGL = "" #内容 25 SPBM = "20300000" #免税 4030000000000000000 不征收 6010000000000000000 26 #所有商品行数据 27 KPHJJE = "1.0" 28 HJBHSJE = "1.0" 29 HJSE = "0" 30 #单个商品行数据 31 XMJE = "0.1" 32 SL = "0" 33 SE = "0" 34 #发票开具信息 35 mxs = "<FPKJXX_XMXX>" + \ 36 "<XMMC><![CDATA[1]]></XMMC>" + \ 37 "<XMDW></XMDW>" + \ 38 "<GGXH></GGXH>" + \ 39 "<XMSL>0</XMSL>" + \ 40 "<HSBZ>0</HSBZ>" + \ 41 "<XMDJ>0</XMDJ>" + \ 42 "<FPHXZ>0</FPHXZ>" + \ 43 "<SPBM>20300000</SPBM>" + \ 44 "<ZXBM></ZXBM>" + \ 45 "<YHZCBS>0</YHZCBS>" + \ 46 "<LSLBS>3</LSLBS>" + \ 47 "<ZZSTSGL></ZZSTSGL>" + \ 48 "<XMJE>0.1</XMJE>" + \ 49 "<SL>0</SL>" + \ 50 "<SE>0</SE>" + \ 51 "<KCE></KCE>" + \ 52 "<KCQHSJE></KCQHSJE>" + \ 53 "</FPKJXX_XMXX>" + \ 54 "<FPKJXX_XMXX>" + \ 55 "<XMMC><![CDATA[1]]></XMMC>" + \ 56 "<XMDW></XMDW>" + \ 57 "<GGXH></GGXH>" + \ 58 "<XMSL>0</XMSL>" + \ 59 "<HSBZ>0</HSBZ>" + \ 60 "<XMDJ>0</XMDJ>" + \ 61 "<FPHXZ>0</FPHXZ>" + \ 62 "<SPBM>20300000</SPBM>" + \ 63 "<ZXBM></ZXBM>" + \ 64 "<YHZCBS>0</YHZCBS>" + \ 65 "<LSLBS>3</LSLBS>" + \ 66 "<ZZSTSGL></ZZSTSGL>" + \ 67 "<XMJE>0.1</XMJE>" + \ 68 "<SL>0</SL>" + \ 69 "<SE>0</SE>" + \ 70 "<KCE></KCE>" + \ 71 "<KCQHSJE></KCQHSJE>" + \ 72 "</FPKJXX_XMXX>" + \ 73 "<FPKJXX_XMXX>" + \ 74 "<XMMC><![CDATA[1]]></XMMC>" + \ 75 "<XMDW></XMDW>" + \ 76 "<GGXH></GGXH>" + \ 77 "<XMSL>0</XMSL>" + \ 78 "<HSBZ>0</HSBZ>" + \ 79 "<XMDJ>0</XMDJ>" + \ 80 "<FPHXZ>0</FPHXZ>" + \ 81 "<SPBM>20300000</SPBM>" + \ 82 "<ZXBM></ZXBM>" + \ 83 "<YHZCBS>0</YHZCBS>" + \ 84 "<LSLBS>3</LSLBS>" + \ 85 "<ZZSTSGL></ZZSTSGL>" + \ 86 "<XMJE>0.1</XMJE>" + \ 87 "<SL>0</SL>" + \ 88 "<SE>0</SE>" + \ 89 "<KCE></KCE>" + \ 90 "<KCQHSJE></KCQHSJE>" + \ 91 "</FPKJXX_XMXX>" + \ 92 "<FPKJXX_XMXX>" + \ 93 "<XMMC><![CDATA[1]]></XMMC>" + \ 94 "<XMDW></XMDW>" + \ 95 "<GGXH></GGXH>" + \ 96 "<XMSL>0</XMSL>" + \ 97 "<HSBZ>0</HSBZ>" + \ 98 "<XMDJ>0</XMDJ>" + \ 99 "<FPHXZ>0</FPHXZ>" + \ 100 "<SPBM>20300000</SPBM>" + \ 101 "<ZXBM></ZXBM>" + \ 102 "<YHZCBS>0</YHZCBS>" + \ 103 "<LSLBS>3</LSLBS>" + \ 104 "<ZZSTSGL></ZZSTSGL>" + \ 105 "<XMJE>0.1</XMJE>" + \ 106 "<SL>0</SL>" + \ 107 "<SE>0</SE>" + \ 108 "<KCE></KCE>" + \ 109 "<KCQHSJE></KCQHSJE>" + \ 110 "</FPKJXX_XMXX>" + \ 111 "<FPKJXX_XMXX>" + \ 112 "<XMMC><![CDATA[1]]></XMMC>" + \ 113 "<XMDW></XMDW>" + \ 114 "<GGXH></GGXH>" + \ 115 "<XMSL>0</XMSL>" + \ 116 "<HSBZ>0</HSBZ>" + \ 117 "<XMDJ>0</XMDJ>" + \ 118 "<FPHXZ>0</FPHXZ>" + \ 119 "<SPBM>20300000</SPBM>" + \ 120 "<ZXBM></ZXBM>" + \ 121 "<YHZCBS>0</YHZCBS>" + \ 122 "<LSLBS>3</LSLBS>" + \ 123 "<ZZSTSGL></ZZSTSGL>" + \ 124 "<XMJE>0.1</XMJE>" + \ 125 "<SL>0</SL>" + \ 126 "<SE>0</SE>" + \ 127 "<KCE></KCE>" + \ 128 "<KCQHSJE></KCQHSJE>" + \ 129 "</FPKJXX_XMXX>" + \ 130 "<FPKJXX_XMXX>" + \ 131 "<XMMC><![CDATA[1]]></XMMC>" + \ 132 "<XMDW></XMDW>" + \ 133 "<GGXH></GGXH>" + \ 134 "<XMSL>0</XMSL>" + \ 135 "<HSBZ>0</HSBZ>" + \ 136 "<XMDJ>0</XMDJ>" + \ 137 "<FPHXZ>0</FPHXZ>" + \ 138 "<SPBM>20300000</SPBM>" + \ 139 "<ZXBM></ZXBM>" + \ 140 "<YHZCBS>0</YHZCBS>" + \ 141 "<LSLBS>3</LSLBS>" + \ 142 "<ZZSTSGL></ZZSTSGL>" + \ 143 "<XMJE>0.1</XMJE>" + \ 144 "<SL>0</SL>" + \ 145 "<SE>0</SE>" + \ 146 "<KCE></KCE>" + \ 147 "<KCQHSJE></KCQHSJE>" + \ 148 "</FPKJXX_XMXX>" + \ 149 "<FPKJXX_XMXX>" + \ 150 "<XMMC><![CDATA[1]]></XMMC>" + \ 151 "<XMDW></XMDW>" + \ 152 "<GGXH></GGXH>" + \ 153 "<XMSL>0</XMSL>" + \ 154 "<HSBZ>0</HSBZ>" + \ 155 "<XMDJ>0</XMDJ>" + \ 156 "<FPHXZ>0</FPHXZ>" + \ 157 "<SPBM>20300000</SPBM>" + \ 158 "<ZXBM></ZXBM>" + \ 159 "<YHZCBS>0</YHZCBS>" + \ 160 "<LSLBS>3</LSLBS>" + \ 161 "<ZZSTSGL></ZZSTSGL>" + \ 162 "<XMJE>0.1</XMJE>" + \ 163 "<SL>0</SL>" + \ 164 "<SE>0</SE>" + \ 165 "<KCE></KCE>" + \ 166 "<KCQHSJE></KCQHSJE>" + \ 167 "</FPKJXX_XMXX>" + \ 168 "<FPKJXX_XMXX>" + \ 169 "<XMMC><![CDATA[1]]></XMMC>" + \ 170 "<XMDW></XMDW>" + \ 171 "<GGXH></GGXH>" + \ 172 "<XMSL>0</XMSL>" + \ 173 "<HSBZ>0</HSBZ>" + \ 174 "<XMDJ>0</XMDJ>" + \ 175 "<FPHXZ>0</FPHXZ>" + \ 176 "<SPBM>20300000</SPBM>" + \ 177 "<ZXBM></ZXBM>" + \ 178 "<YHZCBS>0</YHZCBS>" + \ 179 "<LSLBS>3</LSLBS>" + \ 180 "<ZZSTSGL></ZZSTSGL>" + \ 181 "<XMJE>0.1</XMJE>" + \ 182 "<SL>0</SL>" + \ 183 "<SE>0</SE>" + \ 184 "<KCE></KCE>" + \ 185 "<KCQHSJE></KCQHSJE>" + \ 186 "</FPKJXX_XMXX>" + \ 187 "<FPKJXX_XMXX>" + \ 188 "<XMMC><![CDATA[1]]></XMMC>" + \ 189 "<XMDW></XMDW>" + \ 190 "<GGXH></GGXH>" + \ 191 "<XMSL>0</XMSL>" + \ 192 "<HSBZ>0</HSBZ>" + \ 193 "<XMDJ>0</XMDJ>" + \ 194 "<FPHXZ>0</FPHXZ>" + \ 195 "<SPBM>20300000</SPBM>" + \ 196 "<ZXBM></ZXBM>" + \ 197 "<YHZCBS>0</YHZCBS>" + \ 198 "<LSLBS>3</LSLBS>" + \ 199 "<ZZSTSGL></ZZSTSGL>" + \ 200 "<XMJE>0.1</XMJE>" + \ 201 "<SL>0</SL>" + \ 202 "<SE>0</SE>" + \ 203 "<KCE></KCE>" + \ 204 "<KCQHSJE></KCQHSJE>" + \ 205 "</FPKJXX_XMXX>" + \ 206 "<FPKJXX_XMXX>" + \ 207 "<XMMC><![CDATA[1]]></XMMC>" + \ 208 "<XMDW></XMDW>" + \ 209 "<GGXH></GGXH>" + \ 210 "<XMSL>0</XMSL>" + \ 211 "<HSBZ>0</HSBZ>" + \ 212 "<XMDJ>0</XMDJ>" + \ 213 "<FPHXZ>0</FPHXZ>" + \ 214 "<SPBM>20300000</SPBM>" + \ 215 "<ZXBM></ZXBM>" + \ 216 "<YHZCBS>0</YHZCBS>" + \ 217 "<LSLBS>3</LSLBS>" + \ 218 "<ZZSTSGL></ZZSTSGL>" + \ 219 "<XMJE>0.1</XMJE>" + \ 220 "<SL>0</SL>" + \ 221 "<SE>0</SE>" + \ 222 "<KCE></KCE>" + \ 223 "<KCQHSJE></KCQHSJE>" + \ 224 "</FPKJXX_XMXX>" 225 226 #电子发票外部API-DZFPKJ(电子发票开具) 227 original_content = "<REQUEST_FPKJXX>" + \ 228 "<FPKJXX_FPTXX>" + \ 229 "<NSRSBH>" + nsrsbh + "</NSRSBH>" + \ 230 "<NSRMC>航信培训企业</NSRMC>" + \ 231 "<DDLSH>" + DDLSH + "</DDLSH>" + \ 232 "<DDH>" + ddh + "</DDH>" + \ 233 "<DDDATE>" + date + "</DDDATE>" + \ 234 "<BMB_BBH>13.0</BMB_BBH>" + \ 235 "<XHF_DZ><![CDATA[222]]></XHF_DZ>" + \ 236 "<XHF_DH><![CDATA[222]]></XHF_DH>" + \ 237 "<XHF_YHZH><![CDATA[222]]></XHF_YHZH>" + \ 238 "<GHFMC><![CDATA[22 2]]></GHFMC>" + \ 239 "<GHF_NSRSBH><![CDATA[330203999999018]]></GHF_NSRSBH>" + \ 240 "<GHF_DZ><![CDATA[地址]]></GHF_DZ>" + \ 241 "<GHF_GDDH><![CDATA[电话]]></GHF_GDDH>" + \ 242 "<GHF_SJ>17871838087</GHF_SJ>" + \ 243 "<GHF_EMAIL><![CDATA[zxy@ms.whb.ac.cn]]></GHF_EMAIL>" + \ 244 "<GHF_YHZH><![CDATA[yhzh]]></GHF_YHZH>" + \ 245 "<KPLY>999</KPLY>" + \ 246 "<KPY>综合服务公共能耗</KPY>" + \ 247 "<SKY>日常维修综合服务</SKY>" + \ 248 "<FHR>车位管理综合面积</FHR>" + \ 249 "<KPLX>" + KPLX + "</KPLX>" + \ 250 "<YFP_DM>" + YFP_DM + "</YFP_DM>" + \ 251 "<YFP_HM>" + YFP_HM + "</YFP_HM>" + \ 252 "<KPHJJE>" + KPHJJE + "</KPHJJE>" + \ 253 "<HJBHSJE>" + HJBHSJE + "</HJBHSJE>" + \ 254 "<HJSE>" + HJSE + "</HJSE>" + \ 255 "<BZ><![CDATA[公共能耗费,面积]]></BZ>" + \ 256 "<BB></BB>" + \ 257 "<WB></WB>" + \ 258 "<FPZL></FPZL>" + \ 259 "<SGBZ>" + SGBZ + "</SGBZ>" + \ 260 "</FPKJXX_FPTXX>" + \ 261 "<FPKJXX_XMXXS>" + \ 262 mxs + \ 263 "</FPKJXX_XMXXS>" + \ 264 "</REQUEST_FPKJXX>" 265 #AES密钥 266 key = 'WuMlCJRN8zO886dw' 267 # print(original_content) 268 ''' AES加密算法的网站:http://www.ssleye.com/aes_cipher.html 269 AES加密(加解密算法/工作模式/填充方式:AES/ECB/PKCS5Padding;测试环境key值:WuMlCJRN8zO886dw 270 ''' 271 #初始数据original_content进行AES和Base64加密后,得到original_content_Aes 272 original_content_Aes_Base64 = get_aes_url(key, original_content) 273 274 #通用报文初始数据(DZFPCX发票查询) 275 original_data = '<?xml version=\"1.0\" encoding=\"utf-8\"?>' + \ 276 "<interface>" + \ 277 "<globalInfo>" + \ 278 "<version>4.0</version>" + \ 279 "<interfaceCode>DZFPKJ</interfaceCode>" + \ 280 "<token>{}</token>".format(nsrsbh) + \ 281 "<requestTime>{}</requestTime>".format(data_time) + \ 282 "</globalInfo>" + \ 283 "<Data>" + \ 284 "<content>{}</content>".format(original_content_Aes_Base64) + \ 285 "</Data>" + \ 286 "</interface>" 287 288 #通用报文原始数据original_data进行Base64加密后,得到RequestParam,再进行urlencode解码 289 RequestParam_Base64 = str_base64(original_data) 290 # print("通用报文进行Base64加密后:\n", RequestParam_Base64) 291 RequestParam_Base64_Urlencode = jm_urlencode(RequestParam_Base64) 292 # print("通用报文进行Base64和Urlencode加密后:\n", RequestParam_Base64_Urlencode) 293 294 #RequestParam通过HMAC-SHA1加密,得到Signature 295 Signature = hash_hmac('I7GBo4w9E6dmGlLVJMaVtXrhbNqp4KBh', RequestParam_Base64, sha1) 296 # print("通用报文进行Base64和Hash_hmac加密后:\n", Signature) 297 298 #请求体data构建 299 RequestParam = RequestParam_Base64_Urlencode 300 data = "RequestParam=" + RequestParam + "&Signature=" + Signature 301 result = requests.post(url=host, params=data) 302 # print(result.url) 303 print('发票查询ddlsh为:\n{}'.format(DDLSH)) 304 print('发票查询返回报文为:\n{}'.format(result.text))
api_DZFPCX 代码如下:
1 #coding:utf-8 2 from get_AES_url import get_aes_url 3 from get_urlencode import jm_urlencode 4 from get_Base64 import str_base64 5 from get_Sha1 import hash_hmac 6 from hashlib import sha1 7 import requests 8 import time 9 #定义参数 10 host = "http://test2.51fapiaonb.cn:4011/DZFP_Four" 11 data_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) 12 nsrsbh = "330201999999868" #这里填需要查询的纳税人识别号 13 # #电子发票外部API-DZFPCX(电子发票查询) 14 ddlsh = "3302019999998684229" #这里填写发票对应的订单流水号 15 original_content = "<FPXX>" + \ 16 "<NSRSBH>{}</NSRSBH>".format(nsrsbh) + \ 17 "<DDLSH>{}</DDLSH>".format(ddlsh) + "</FPXX>" 18 19 #AES密钥 20 key = 'WuMlCJRN8zO886dw' 21 #初始数据original_content进行AES和Base64加密后,得到original_content_Aes_Base64 22 original_content_Aes_Base64 = get_aes_url(key, original_content) 23 # print("content进行AES和Base64加密后:\n", original_content_Aes_Base64) 24 25 # #通用报文初始数据(DZFPCX发票查询) 26 original_data = '<?xml version=\"1.0\" encoding=\"utf-8\"?>' + \ 27 "<interface>" + \ 28 "<globalInfo>" + \ 29 "<version>4.1</version>" + \ 30 "<interfaceCode>DZFPCX</interfaceCode>" + \ 31 "<token>" + nsrsbh + "</token>" + \ 32 "<requestTime>" + data_time + "</requestTime>" + \ 33 "</globalInfo>" + \ 34 "<Data>" + \ 35 "<content>" + original_content_Aes_Base64 + "</content>" + \ 36 "</Data>" + \ 37 "</interface>" 38 39 #通用报文原始数据original_data进行Base64加密后,得到RequestParam,再进行urlencode解码 40 RequestParam_Base64 = str_base64(original_data) 41 # print("通用报文进行Base64加密后:\n", RequestParam_Base64) 42 RequestParam_Base64_Urlencode = jm_urlencode(RequestParam_Base64) 43 # print("通用报文进行Base64和Urlencode加密后:\n", RequestParam_Base64_Urlencode) 44 45 #RequestParam通过HMAC-SHA1加密,得到Signature 46 Signature = hash_hmac('I7GBo4w9E6dmGlLVJMaVtXrhbNqp4KBh', RequestParam_Base64, sha1) 47 # print("通用报文进行Base64和Hash_hmac加密后:\n", Signature) 48 49 #请求体data构建 50 RequestParam = RequestParam_Base64_Urlencode 51 # url = host + "?RequestParam=" + RequestParam + "&Signature=" + Signature 52 data = "RequestParam=" + RequestParam + "&Signature=" + Signature 53 result = requests.post(url=host, params=data) 54 # print(result.url) #打印请求url 55 # print(RequestParam) 56 # print(Signature) 57 print('发票查询返回报文为:\n{}'.format(result.text))