api_DZFPKJ & api_DZFPCX(get_AES_url代码优化)
通过AES加密网站的接口来传值,不需要手动加密字符串后复制过来传值。
#coding:utf-8
import requests
import re
def get_aes_url(key, text):
url = 'http://www.ssleye.com/des/web_aes_encrypt'
header = {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
payload = {
"text": text,
"encode_flag": "utf8",
"key": key,
"iv": "",
"mode": "ECB",
"padding": "pkcs5",
"out_mode": "base64"
}
r = requests.post(url=url, headers=header, data=payload)
result = r.text
aa = re.findall("<pre>(.+?)</pre>", result)
bb = str(aa[0])
return bb if __name__ == '__main__':
# key = 'WuMlCJRN8zO886dw'
# 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>'
# aa = get_aes_url(key, text)
# print(aa)
# print(type(aa))
pass
api_DZFPKJ 代码如下:
#coding:utf-8
from get_AES_url import get_aes_url
from get_urlencode import jm_urlencode
from get_Base64 import str_base64
from get_Sha1 import hash_hmac
from hashlib import sha1
import requests
import time
#定义参数
host = "http://test2.51fapiaonb.cn:4011/DZFP_Four"
data_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
nsrsbh = "" #这里填需要查询的纳税人识别号
DDLSH_str1 = ""
DDLSH_str2 = ""
DDLSH = DDLSH_str1 + DDLSH_str2
ddh = ""
date = "2018-07-20"
KPLX = "" #1 蓝票 2 红票
YFP_DM = ""
YFP_HM = ""
SGBZ = "" #传空
YHZCBS = "" #优惠标识
LSLBS = "" #0税率标志
ZZSTSGL = "" #内容
SPBM = "" #免税 4030000000000000000 不征收 6010000000000000000
#所有商品行数据
KPHJJE = "0.1"
HJBHSJE = "0.1"
HJSE = ""
#单个商品行数据
XMJE = "0.1"
SL = ""
SE = ""
#发票开具信息
mxs = "<FPKJXX_XMXX>" + \
"<XMMC><![CDATA[1]]></XMMC>" + \
"<XMDW></XMDW>" + \
"<GGXH></GGXH>" + \
"<XMSL>0</XMSL>" + \
"<HSBZ>0</HSBZ>" + \
"<XMDJ>0</XMDJ>" + \
"<FPHXZ>0</FPHXZ>" + \
"<SPBM>" + SPBM + "</SPBM>" + \
"<ZXBM></ZXBM>" + \
"<YHZCBS>" + YHZCBS + "</YHZCBS>" + \
"<LSLBS>" + LSLBS + "</LSLBS>" + \
"<ZZSTSGL>" + ZZSTSGL + "</ZZSTSGL>" + \
"<XMJE>" + XMJE + "</XMJE>" + \
"<SL>" + SL + "</SL>" + \
"<SE>" + SE + "</SE>" + \
"<KCE></KCE>" + \
"<KCQHSJE></KCQHSJE>" + \
"</FPKJXX_XMXX>" #电子发票外部API-DZFPKJ(电子发票开具)
original_content = "<REQUEST_FPKJXX>" + \
"<FPKJXX_FPTXX>" + \
"<NSRSBH>" + nsrsbh + "</NSRSBH>" + \
"<NSRMC>航信培训企业</NSRMC>" + \
"<DDLSH>" + DDLSH + "</DDLSH>" + \
"<DDH>" + ddh + "</DDH>" + \
"<DDDATE>" + date + "</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>" + KPLX + "</KPLX>" + \
"<YFP_DM>" + YFP_DM + "</YFP_DM>" + \
"<YFP_HM>" + YFP_HM + "</YFP_HM>" + \
"<KPHJJE>" + KPHJJE + "</KPHJJE>" + \
"<HJBHSJE>" + HJBHSJE + "</HJBHSJE>" + \
"<HJSE>" + HJSE + "</HJSE>" + \
"<BZ><![CDATA[公共能耗费,面积]]></BZ>" + \
"<BB></BB>" + \
"<WB></WB>" + \
"<FPZL></FPZL>" + \
"<SGBZ>" + SGBZ + "</SGBZ>" + \
"</FPKJXX_FPTXX>" + \
"<FPKJXX_XMXXS>" + \
mxs + \
"</FPKJXX_XMXXS>" + \
"</REQUEST_FPKJXX>"
#AES密钥
key = 'WuMlCJRN8zO886dw'
# print(original_content)
''' AES加密算法的网站:http://www.ssleye.com/aes_cipher.html
AES加密(加解密算法/工作模式/填充方式:AES/ECB/PKCS5Padding;测试环境key值:WuMlCJRN8zO886dw
'''
#初始数据original_content进行AES和Base64加密后,得到original_content_Aes
original_content_Aes_Base64 = get_aes_url(key, original_content) #通用报文初始数据(DZFPCX发票查询)
original_data = '<?xml version=\"1.0\" encoding=\"utf-8\"?>' + \
"<interface>" + \
"<globalInfo>" + \
"<version>4.0</version>" + \
"<interfaceCode>DZFPKJ</interfaceCode>" + \
"<token>{}</token>".format(nsrsbh) + \
"<requestTime>{}</requestTime>".format(data_time) + \
"</globalInfo>" + \
"<Data>" + \
"<content>{}</content>".format(original_content_Aes_Base64) + \
"</Data>" + \
"</interface>" #通用报文原始数据original_data进行Base64加密后,得到RequestParam,再进行urlencode解码
RequestParam_Base64 = str_base64(original_data)
# print("通用报文进行Base64加密后:\n", RequestParam_Base64)
RequestParam_Base64_Urlencode = jm_urlencode(RequestParam_Base64)
# print("通用报文进行Base64和Urlencode加密后:\n", RequestParam_Base64_Urlencode) #RequestParam通过HMAC-SHA1加密,得到Signature
Signature = hash_hmac('I7GBo4w9E6dmGlLVJMaVtXrhbNqp4KBh', RequestParam_Base64, sha1)
# print("通用报文进行Base64和Hash_hmac加密后:\n", Signature) #请求体data构建
RequestParam = RequestParam_Base64_Urlencode
data = "RequestParam=" + RequestParam + "&Signature=" + Signature
result = requests.post(url=host, params=data)
# print(result.url)
print('订单流水号为:\n{}'.format(DDLSH))
print('发票查询返回报文为:\n{}'.format(result.text))
api_DZFPKJ_QDFP 代码如下:
#coding:utf-8
from get_AES_url import get_aes_url
from get_urlencode import jm_urlencode
from get_Base64 import str_base64
from get_Sha1 import hash_hmac
from hashlib import sha1
import requests
import time
#定义参数
host = "http://test2.51fapiaonb.cn:4011/DZFP_Four"
data_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
nsrsbh = "" #这里填需要查询的纳税人识别号
DDLSH_str1 = ""
DDLSH_str2 = ""
DDLSH = DDLSH_str1 + DDLSH_str2
ddh = ""
date = "2018-07-20"
KPLX = "" #1 蓝票 2 红票
YFP_DM = ""
YFP_HM = ""
SGBZ = "" #传空
YHZCBS = "" #优惠标识
LSLBS = "" #0税率标志
ZZSTSGL = "" #内容
SPBM = "" #免税 4030000000000000000 不征收 6010000000000000000
#所有商品行数据
KPHJJE = "1.0"
HJBHSJE = "1.0"
HJSE = ""
#单个商品行数据
XMJE = "0.1"
SL = ""
SE = ""
#发票开具信息
mxs = "<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_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_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_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_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_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_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_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_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_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>" #电子发票外部API-DZFPKJ(电子发票开具)
original_content = "<REQUEST_FPKJXX>" + \
"<FPKJXX_FPTXX>" + \
"<NSRSBH>" + nsrsbh + "</NSRSBH>" + \
"<NSRMC>航信培训企业</NSRMC>" + \
"<DDLSH>" + DDLSH + "</DDLSH>" + \
"<DDH>" + ddh + "</DDH>" + \
"<DDDATE>" + date + "</DDDATE>" + \
"<BMB_BBH>13.0</BMB_BBH>" + \
"<XHF_DZ><![CDATA[222]]></XHF_DZ>" + \
"<XHF_DH><![CDATA[222]]></XHF_DH>" + \
"<XHF_YHZH><![CDATA[222]]></XHF_YHZH>" + \
"<GHFMC><![CDATA[22 2]]></GHFMC>" + \
"<GHF_NSRSBH><![CDATA[330203999999018]]></GHF_NSRSBH>" + \
"<GHF_DZ><![CDATA[地址]]></GHF_DZ>" + \
"<GHF_GDDH><![CDATA[电话]]></GHF_GDDH>" + \
"<GHF_SJ>17871838087</GHF_SJ>" + \
"<GHF_EMAIL><![CDATA[zxy@ms.whb.ac.cn]]></GHF_EMAIL>" + \
"<GHF_YHZH><![CDATA[yhzh]]></GHF_YHZH>" + \
"<KPLY>999</KPLY>" + \
"<KPY>综合服务公共能耗</KPY>" + \
"<SKY>日常维修综合服务</SKY>" + \
"<FHR>车位管理综合面积</FHR>" + \
"<KPLX>" + KPLX + "</KPLX>" + \
"<YFP_DM>" + YFP_DM + "</YFP_DM>" + \
"<YFP_HM>" + YFP_HM + "</YFP_HM>" + \
"<KPHJJE>" + KPHJJE + "</KPHJJE>" + \
"<HJBHSJE>" + HJBHSJE + "</HJBHSJE>" + \
"<HJSE>" + HJSE + "</HJSE>" + \
"<BZ><![CDATA[公共能耗费,面积]]></BZ>" + \
"<BB></BB>" + \
"<WB></WB>" + \
"<FPZL></FPZL>" + \
"<SGBZ>" + SGBZ + "</SGBZ>" + \
"</FPKJXX_FPTXX>" + \
"<FPKJXX_XMXXS>" + \
mxs + \
"</FPKJXX_XMXXS>" + \
"</REQUEST_FPKJXX>"
#AES密钥
key = 'WuMlCJRN8zO886dw'
# print(original_content)
''' AES加密算法的网站:http://www.ssleye.com/aes_cipher.html
AES加密(加解密算法/工作模式/填充方式:AES/ECB/PKCS5Padding;测试环境key值:WuMlCJRN8zO886dw
'''
#初始数据original_content进行AES和Base64加密后,得到original_content_Aes
original_content_Aes_Base64 = get_aes_url(key, original_content) #通用报文初始数据(DZFPCX发票查询)
original_data = '<?xml version=\"1.0\" encoding=\"utf-8\"?>' + \
"<interface>" + \
"<globalInfo>" + \
"<version>4.0</version>" + \
"<interfaceCode>DZFPKJ</interfaceCode>" + \
"<token>{}</token>".format(nsrsbh) + \
"<requestTime>{}</requestTime>".format(data_time) + \
"</globalInfo>" + \
"<Data>" + \
"<content>{}</content>".format(original_content_Aes_Base64) + \
"</Data>" + \
"</interface>" #通用报文原始数据original_data进行Base64加密后,得到RequestParam,再进行urlencode解码
RequestParam_Base64 = str_base64(original_data)
# print("通用报文进行Base64加密后:\n", RequestParam_Base64)
RequestParam_Base64_Urlencode = jm_urlencode(RequestParam_Base64)
# print("通用报文进行Base64和Urlencode加密后:\n", RequestParam_Base64_Urlencode) #RequestParam通过HMAC-SHA1加密,得到Signature
Signature = hash_hmac('I7GBo4w9E6dmGlLVJMaVtXrhbNqp4KBh', RequestParam_Base64, sha1)
# print("通用报文进行Base64和Hash_hmac加密后:\n", Signature) #请求体data构建
RequestParam = RequestParam_Base64_Urlencode
data = "RequestParam=" + RequestParam + "&Signature=" + Signature
result = requests.post(url=host, params=data)
# print(result.url)
print('发票查询ddlsh为:\n{}'.format(DDLSH))
print('发票查询返回报文为:\n{}'.format(result.text))
api_DZFPCX 代码如下:
#coding:utf-8
from get_AES_url import get_aes_url
from get_urlencode import jm_urlencode
from get_Base64 import str_base64
from get_Sha1 import hash_hmac
from hashlib import sha1
import requests
import time
#定义参数
host = "http://test2.51fapiaonb.cn:4011/DZFP_Four"
data_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
nsrsbh = "" #这里填需要查询的纳税人识别号
# #电子发票外部API-DZFPCX(电子发票查询)
ddlsh = "" #这里填写发票对应的订单流水号
original_content = "<FPXX>" + \
"<NSRSBH>{}</NSRSBH>".format(nsrsbh) + \
"<DDLSH>{}</DDLSH>".format(ddlsh) + "</FPXX>" #AES密钥
key = 'WuMlCJRN8zO886dw'
#初始数据original_content进行AES和Base64加密后,得到original_content_Aes_Base64
original_content_Aes_Base64 = get_aes_url(key, original_content)
# print("content进行AES和Base64加密后:\n", original_content_Aes_Base64) # #通用报文初始数据(DZFPCX发票查询)
original_data = '<?xml version=\"1.0\" encoding=\"utf-8\"?>' + \
"<interface>" + \
"<globalInfo>" + \
"<version>4.1</version>" + \
"<interfaceCode>DZFPCX</interfaceCode>" + \
"<token>" + nsrsbh + "</token>" + \
"<requestTime>" + data_time + "</requestTime>" + \
"</globalInfo>" + \
"<Data>" + \
"<content>" + original_content_Aes_Base64 + "</content>" + \
"</Data>" + \
"</interface>" #通用报文原始数据original_data进行Base64加密后,得到RequestParam,再进行urlencode解码
RequestParam_Base64 = str_base64(original_data)
# print("通用报文进行Base64加密后:\n", RequestParam_Base64)
RequestParam_Base64_Urlencode = jm_urlencode(RequestParam_Base64)
# print("通用报文进行Base64和Urlencode加密后:\n", RequestParam_Base64_Urlencode) #RequestParam通过HMAC-SHA1加密,得到Signature
Signature = hash_hmac('I7GBo4w9E6dmGlLVJMaVtXrhbNqp4KBh', RequestParam_Base64, sha1)
# print("通用报文进行Base64和Hash_hmac加密后:\n", Signature) #请求体data构建
RequestParam = RequestParam_Base64_Urlencode
# url = host + "?RequestParam=" + RequestParam + "&Signature=" + Signature
data = "RequestParam=" + RequestParam + "&Signature=" + Signature
result = requests.post(url=host, params=data)
# print(result.url) #打印请求url
# print(RequestParam)
# print(Signature)
print('发票查询返回报文为:\n{}'.format(result.text))
api_DZFPKJ & api_DZFPCX(get_AES_url代码优化)的更多相关文章
- api_DZFPKJ & api_DZFPCX
AES加密算法的网站:http://www.ssleye.com/aes_cipher.html """ AES加密(加解密算法/工作模式/填充方式:AES/ECB/PK ...
- PHP代码优化
1 代码优化 1 尽量静态化 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显. 其实静态方法和 ...
- 跟Unity3D学代码优化
今天我们来聊聊如何跟Unity学代码优化,准确地说,是通过学习Unity的IL2CPP技术的优化策略,应用到我们的日常逻辑开发中. 做过Unity开发的同学想必对IL2CPP都很清楚,简单地说,IL2 ...
- 记录一次bug解决过程:else未补全导致数据泄露和代码优化
一.总结 快捷键ctrl + alt + 四个方向键 --> 倒置屏幕 未补全else逻辑,倒置查询数据泄露 空指针是最容易犯的错误,数据的空指针,可以普遍采用三目运算符来解决 SVN冲突解决关 ...
- 【Java】记录一次代码优化
前不久的项目时间紧张,为了尽快完成原型开发,写了一段效率相当低的代码. 最近几天闲下来,主动把之前的代码优化了一下:) 标签:Java.Mybatis.MySQL 概况:本地系统从另外一个系统得到 ...
- Java代码优化(长期更新)
前言 2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化.在修改之前,我的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸 ...
- 微信扫描打开APP下载链接提示代码优化
上一次我发了一篇文章叫“微信打开网址添加在浏览器中打开提示”,里面我发出来了三个代码,分别是纯JS.js+html.jQuery+HTML代码.今天来一个简化版带可以关闭的按钮操作.使用的是纯JS+H ...
- 微信扫描打开APP下载链接提示代码优化(转)
上一次我发了一篇文章叫“微信打开网址添加在浏览器中打开提示”,里面我发出来了三个代码,分别是纯JS.js+html.jQuery+HTML代码.今天来一个简化版带可以关闭的按钮操作.使用的是纯JS+H ...
- [转]SqlSever2005 一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】一周搞定
对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感 谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当 ...
随机推荐
- 【codeforces】Codeforces Round #606 E. Two Fairs——图论
题目链接 题意 给你一张无向图,求出有多少对点对(x, y)满足从点x到点y的所有路径必同时经过点a和点b 分析 单点 首先考虑假如点a和点b是同一个点的情况 我从任意的一点出发,把所有与点a/b相连 ...
- 爬虫&Selenium&ChromeDriver
一.Selenium selenium是什么 Selenium [1] 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, ...
- 基于 HTML5 WebGL 的故宫人流量动态监控系统
前言 在当代社会,故宫已经成为一个具有多元意义的文化符号,在历史.艺术.文化等不同领域发挥着重要的作用,在国际上也成为能够代表中国文化甚至中国形象的国际符号.近几年故宫的观众接待量逐年递增,年接待量已 ...
- Vue组件通信方式全面详解
vue组件通信方式全面详解 众所周知,Vue主要思想就是组件化开发.因为,在实际的项目开发中,肯定会以组件的开发模式进行.形如页面和页面之间需要通信一样,Vue 组件和组件之间肯定也需要互通有无.共享 ...
- SVN钩子HOOK设置自动备份,服务本地可以看到所有更新内容。
可以实现SVN本机备份.或者其他备份.关键是可以保持有一份最新的SVN文件可以查看. 实现SVN与WEB同步,可以CO一个出来,也可以直接用自动更新web目录的方法,我们要在svn版本库中配置钩子来实 ...
- [vijos1144]小胖守皇宫<树形dp>
题目链接:https://vijos.org/p/1144 woc我竟然A了,这道经典的树形dp或者说是树形dp的入门题我终于过了,虽然之前做过一些树形dp的题,但是这题开始还是一脸懵逼,dp方程如何 ...
- Activiti网关--排他网关
排他网关 1.什么是排他网关 排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策. 当流程执行到这个网关,所有分支都会判断条件是否为true,如果为 true 则执行该分 ...
- 【Java技术系列】爱情36技之Bug大战
1. 鲁迅先生说:程序员,天不怕地不怕,就怕小虫儿爬呀爬,爬呀爬. 随着时间的推移,鲁迅先生又说:真正勇猛的程序员,敢于让虫子面对惨淡的虫生. 虫子在程序员心中是啥东西?虫子的学名为 Bug,是多少入 ...
- 数据挖掘-K-近邻算法
数据挖掘-K-近邻算法 目录 数据挖掘-K-近邻算法 1. K-近邻算法概述 1.1 K-近邻算法介绍 1.1.1 KNN算法作用 1.1.2 KNN 算法思想 1.1.3 KNN算法特点 1.2 K ...
- 定位 iframe
定位iframe # 1.有id,并且唯一,直接写id driver.switch_to_frame("x-URS-iframe") driver.switch_to.frame( ...