Commit edfdd733 by dong

fix

parent 095d4236
...@@ -58,7 +58,6 @@ class IndustryChain1(db.Model): ...@@ -58,7 +58,6 @@ class IndustryChain1(db.Model):
enterprise_num = db.Column(db.Integer, comment='相关全企业表数量') enterprise_num = db.Column(db.Integer, comment='相关全企业表数量')
# 全国企业 # 全国企业
class Enterprise(db.Model): class Enterprise(db.Model):
__tablename__ = "enterprise" __tablename__ = "enterprise"
...@@ -115,9 +114,9 @@ class Enterprise(db.Model): ...@@ -115,9 +114,9 @@ class Enterprise(db.Model):
parti_year = db.Column(db.Integer, doc='高新企业注册年份', comment='高新企业注册年份') # 高新企业注册年份 parti_year = db.Column(db.Integer, doc='高新企业注册年份', comment='高新企业注册年份') # 高新企业注册年份
tbe = db.Column(db.String(32), doc='是否科技型中小企业', comment='是否科技型中小企业') # 是否科技型中小企业 tbe = db.Column(db.String(32), doc='是否科技型中小企业', comment='是否科技型中小企业') # 是否科技型中小企业
tbe_sjmy = db.Column(db.String(32), doc='是否为省级民营科技企业', comment='是否为省级民营科技企业') # 省级民营科技企业 tbe_sjmy = db.Column(db.String(32), doc='是否为省级民营科技企业', comment='是否为省级民营科技企业') # 省级民营科技企业
zjtg = db.Column(db.String(32), doc='是否为专精特新企业', comment='是否为专精特新企业') # 山西专精特工企业 zjtx = db.Column(db.String(32), doc='是否为专精特新企业', comment='是否为专精特新企业') # 山西专精特工企业
zjtg_gjjxjr = db.Column(db.String(32), doc='是否为国家级专精特新小巨人企业', comment='是否为国家级专精特新小巨人企业') # 国家级专精特新小巨人企业 zjtx_gjjxjr = db.Column(db.String(32), doc='是否为国家级专精特新小巨人企业', comment='是否为国家级专精特新小巨人企业') # 国家级专精特新小巨人企业
zjtg_sjxjr = db.Column(db.String(32), doc='是否为省级专精特新小巨人企业', comment='是否为省级专精特新小巨人企业') # 省级专精特新小巨人企业 zjtx_sjxjr = db.Column(db.String(32), doc='是否为省级专精特新小巨人企业', comment='是否为省级专精特新小巨人企业') # 省级专精特新小巨人企业
fianacing = db.Column(db.String(32), doc='是否为有融资企业', comment='是否为有融资企业') # 是否为有融资企业 fianacing = db.Column(db.String(32), doc='是否为有融资企业', comment='是否为有融资企业') # 是否为有融资企业
fianacing_rounds = db.Column(db.String(32), doc='融资轮次', comment='融资轮次') # 融资轮次 fianacing_rounds = db.Column(db.String(32), doc='融资轮次', comment='融资轮次') # 融资轮次
roundid = db.Column(db.Integer, index=True, roundid = db.Column(db.Integer, index=True,
...@@ -234,9 +233,9 @@ class Company(db.Model): ...@@ -234,9 +233,9 @@ class Company(db.Model):
company_info = db.Column(db.Text, doc='公司简介', comment='公司简介') # 公司简介 company_info = db.Column(db.Text, doc='公司简介', comment='公司简介') # 公司简介
sxmon = db.Column(db.String(32), doc='是否山西民营100强', comment='是否山西民营100强') # 是否山西民营100强(2019年) sxmon = db.Column(db.String(32), doc='是否山西民营100强', comment='是否山西民营100强') # 是否山西民营100强(2019年)
zjtg = db.Column(db.String(32), doc='是否为山西专精特新企业', comment='是否为山西专精特新企业') # 山西专精特工企业 zjtx = db.Column(db.String(32), doc='是否为山西专精特新企业', comment='是否为山西专精特新企业') # 山西专精特工企业
zjtg_gjjxjr = db.Column(db.String(32), doc='是否为国家级专精特新小巨人企业', comment='是否为国家级专精特新小巨人企业') # 国家级专精特新小巨人企业 zjtx_gjjxjr = db.Column(db.String(32), doc='是否为国家级专精特新小巨人企业', comment='是否为国家级专精特新小巨人企业') # 国家级专精特新小巨人企业
zjtg_sjxjr = db.Column(db.String(32), doc='是否为省级专精特新小巨人企业', comment='是否为省级专精特新小巨人企业') # 省级专精特新小巨人企业 zjtx_sjxjr = db.Column(db.String(32), doc='是否为省级专精特新小巨人企业', comment='是否为省级专精特新小巨人企业') # 省级专精特新小巨人企业
unicorn = db.Column(db.String(32), doc='独角兽企业', comment='独角兽企业') # 独角兽企业 unicorn = db.Column(db.String(32), doc='独角兽企业', comment='独角兽企业') # 独角兽企业
dengl = db.Column(db.String(32), doc='瞪羚', comment='瞪羚') # 瞪羚 dengl = db.Column(db.String(32), doc='瞪羚', comment='瞪羚') # 瞪羚
hncode = db.Column(db.String(32), doc='高企证书编号', comment='高企证书编号') # 高企证书编号 hncode = db.Column(db.String(32), doc='高企证书编号', comment='高企证书编号') # 高企证书编号
......
alembic==1.3.2
alibabacloud-credentials==0.1.4
alibabacloud-endpoint-util==0.0.3
alibabacloud-openapi-util==0.1.4
alibabacloud-tea==0.2.6
alibabacloud-tea-openapi==0.2.5
alibabacloud-tea-util==0.3.4
alibabacloud-vod20170321==2.0.2
aliyun-python-sdk-core==2.13.31
aliyun-python-sdk-core-v3==2.13.11
aliyun-python-sdk-dysmsapi==1.0.0
aliyun-python-sdk-vod==2.15.12
asn1crypto==0.24.0
attrs==19.1.0
Automat==0.7.0
blinker==1.4
boto==2.49.0
boto3==1.12.39
botocore==1.15.39
cachelib==0.1.1
certifi==2019.11.28
cffi==1.12.3
chardet==3.0.4
Click==7.0
constantly==15.1.0
cryptography==3.4.7
cssselect==1.1.0
docker==4.4.4
docutils==0.15.2
elasticsearch==7.12.0
english==2020.7.0
filetype==1.0.7
Flask==1.1.1
Flask-Cors==3.0.10
Flask-Mail==0.9.1
Flask-Migrate==2.7.0
Flask-QiniuStorage==0.9.5
Flask-Script==2.0.6
Flask-Session==0.3.2
Flask-SQLAlchemy==2.5.1
Flask-WTF==0.14.3
hyperlink==19.0.0
idna==2.8
incremental==17.5.0
itsdangerous==1.1.0
Jinja2==2.10.1
jmespath==0.9.5
lazy-object-proxy==1.4.2
lxml==4.4.2
Mako==1.1.0
MarkupSafe==1.1.1
monotonic==1.5
neotime==1.7.4
numpy==1.18.0
packaging==20.9
pandas==1.1.0
pansi==2020.7.3
parsel==1.5.2
prompt-toolkit==2.0.10
py2neo==4.3.0
pyasn1==0.4.7
pyasn1-modules==0.2.6
pycparser==2.19
PyDispatcher==2.0.5
Pygments==2.3.1
PyHamcrest==1.9.0
PyMySQL==1.0.2
pyOpenSSL==19.0.0
pyparsing==2.4.7
python-dateutil==2.8.1
python-editor==1.0.4
pytz==2019.2
pywin32==227
qiniu==7.3.0
queuelib==1.5.0
redis==3.3.8
requests==2.22.0
s3transfer==0.3.3
scipy==1.4.1
Scrapy==1.7.3
service-identity==18.1.0
six==1.15.0
smart-open==1.11.1
soupsieve==1.9.5
SQLAlchemy==1.3.12
sqlparse==0.3.0
Twisted==19.7.0
typed-ast==1.4.0
urllib3==1.24.3
w3lib==1.21.0
wcwidth==0.1.7
websocket-client==0.58.0
Werkzeug==0.16.0
wrapt==1.11.2
WTForms==2.3.3
xlrd==1.2.0
XlsxWriter==1.3.8
xlwt==1.3.0
zope.interface==4.6.0
alembic==1.7.4
aliyun-python-sdk-core==2.13.35
aliyun-python-sdk-kms==2.15.0
aliyun-python-sdk-vod==2.15.12
altgraph==0.16.1
amqp==5.1.1
APScheduler==3.9.1
asgiref==3.4.1
asn1crypto==0.24.0
atomicwrites==1.4.0
attrs==21.2.0
Automat==20.2.0
backports.csv==1.0.7
backports.zoneinfo==0.2.1
billiard==3.6.4.0
blinker==1.4
buildozer==0.39
cached-property==1.5.2
cachelib==0.4.1
celery==5.0.5
certifi==2018.8.24
cffi==1.15.0
chardet==3.0.4
click==7.1.2
click-didyoumean==0.3.0
click-plugins==1.1.1
click-repl==0.3.0
colorama==0.4.1
constantly==15.1.0
construct==2.5.3
coreapi==2.3.3
coreschema==0.0.4
cpca==0.5.5
crcmod==1.7
cryptography==35.0.0
cssselect==1.0.3
curve==0.1.0
cycler==0.10.0
Cython==0.29.13
dataclasses==0.8
defusedxml==0.6.0
diff-match-patch==20181111
distlib==0.3.7
Django==2.2.16
django-ckeditor==5.8.0
django-comment-migrate==0.1.5
django-cors-headers==2.5.3
django-crispy-forms==1.7.2
django-crontab==0.7.1
django-filter==2.1.0
django-formtools==2.1
django-import-export==1.2.0
django-js-asset==1.2.2
django-ranged-response==0.2.0
django-redis==4.10.0
django-reversion==3.0.4
django-timezone-field==4.2.3
djangorestframework==3.12.2
djangorestframework-jwt==1.11.0
dnspython==1.16.0
docker==5.0.3
document==1.0
docutils==0.15.2
docx==0.2.4
echarts==0.0.0
elasticsearch==7.15.1
english==2020.7.0
et-xmlfile==1.0.1
excel2json==1.0.1
fdfs-client-py==1.2.6
filelock==3.4.1
filetype==1.0.8
Flask==0.10.1
Flask-APScheduler==1.12.3
Flask-Cors==3.0.10
Flask-Docs==0.5.8
Flask-Mail==0.9.1
Flask-Migrate==2.7.0
Flask-QiniuStorage==0.9.5
Flask-Script==2.0.6
Flask-Session==0.4.0
Flask-SQLAlchemy==2.5.1
Flask-WTF==1.0.0
fsspec==2022.1.0
future==0.17.1
geographiclib==1.52
geopy==2.2.0
gevent==22.10.2
greenlet==2.0.2
haystack==0.42
httplib2==0.12.3
hyperlink==18.0.0
idna==2.7
importlib-metadata==4.8.3
importlib-resources==5.4.0
incremental==17.5.0
inflection==0.5.1
iniconfig==1.1.1
interchange==2021.0.3
itsdangerous==0.24
itypes==1.1.0
jdcal==1.4.1
Jinja2==2.10
jmespath==0.10.0
Kivy==1.11.1
kivy-deps.angle==0.1.9
kivy-deps.glew==0.1.12
kivy-deps.gstreamer==0.1.17
kivy-deps.sdl2==0.1.22
Kivy-examples==1.11.1
Kivy-Garden==0.1.4
kiwisolver==1.1.0
kombu==5.1.0
line==0.8.2
lxml==4.4.2
macholib==1.11
Mako==1.1.5
Markdown==3.3.4
MarkupSafe==1.0
matplotlib==3.1.2
mongoengine==0.24.2
monotonic==1.6
more-itertools==7.2.0
mutagen==1.42.0
mysql==0.0.2
mysqlclient @ file:///C:/Users/zy130/Downloads/mysqlclient-1.4.6-cp36-cp36m-win32.whl
Naked==0.1.31
ndg-httpsclient==0.5.1
neo4j-driver==1.6.2
neotime==1.0.0
nodejs==0.1.1
numpy==1.17.4
odfpy==1.4.0
opencv-python==4.5.3.56
openpyxl==2.6.3
optional-django==0.1.0
oss2==2.15.0
packaging==21.0
pandas==1.1.5
pansi==2020.7.3
pbr==4.2.0
pefile==2019.4.18
peppercorn==0.6
pexpect==4.7.0
Pillow==8.1.0
platformdirs==2.4.0
pluggy==1.0.0
prettytable==0.7.2
prompt-toolkit==3.0.36
psutil==5.8.0
psycopg2==2.8
ptyprocess==0.6.0
py==1.11.0
py2neo==4.1.1
pyahocorasick==1.4.4
pyasn1==0.4.4
pyasn1-modules==0.2.2
pycparser==2.19
pycryptodome==3.11.0
pydantic==1.9.2
PyDispatcher==2.0.5
pyecharts==1.2.0
pyecharts-jupyter-installer==0.0.3
Pygments==2.2.0
PyHamcrest==1.9.0
PyInstaller==3.4
PyJWT==1.7.1
pymongo==3.11.3
PyMySQL==0.9.3
pyOpenSSL==18.0.0
pyparsing==2.4.5
pypinyin==0.49.0
pypiwin32==223
pyquery==1.4.0
pytest==6.2.5
python-crontab==3.0.0
python-dateutil==2.8.1
python-docx==0.8.11
python-dotenv==0.20.0
python-ptrace==0.9.3
pytz==2021.1
pytz-deprecation-shim==0.1.0.post0
pywin32==227
pywin32-ctypes==0.2.0
PyYAML==5.1.2
qiniu==7.5.0
queuelib==1.5.0
redis==3.5.3
requests==2.19.1
rest-framework-auth0==0.5.0
rsa==4.0
ruamel.yaml==0.17.32
ruamel.yaml.clib==0.2.7
selenium==3.14.1
service-identity==17.0.0
sh==1.12.14
shellescape==3.8.1
six==1.15.0
SQLAlchemy==1.4.25
sqlparse==0.4.1
stevedore==1.29.0
tablib==0.13.0
thrift==0.11.0
toml==0.10.2
torch-vision==0.1.6.dev0
tqdm==4.32.1
Twisted==19.7.0
twisted-iocpsupport==1.0.2
typing-extensions==3.10.0.2
tzdata==2022.1
tzlocal==4.2
ua-parser==0.18.0
UNKNOWN==0.0.0
uritemplate==3.0.0
urllib3==1.22
user-agents==2.2.0
vine==5.0.0
virtualenv==20.17.1
virtualenv-clone==0.3.0
virtualenvwrapper==4.8.2
wcwidth==0.2.5
websocket-client==1.2.1
Werkzeug==0.14.1
win10toast==0.9
WTForms==3.0.0
xadmin-py3==2.0.4
xlrd==2.0.1
XlsxWriter==3.0.2
xlutils==2.0.0
xlwings==0.26.3
xlwt==1.3.0
xmltodict==0.13.0
zipp==3.6.0
zope.event==4.6
zope.interface==4.6.0
D:\program\Python36-32\python3.exe "D:\program\pycharm2021\pycharm2021\PyCharm 2021.1.3\plugins\python\helpers\pydev\pydevd.py" --multiproc --qt-support=auto --client 127.0.0.1 --port 54959 --file D:/中研项目代码/flask_jincheng/manager.py runserver --host=192.168.3.10 --port=5000
Connected to pydev debugger (build 211.7628.24)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta charset="utf-8"/>
<meta name="SiteName" content="&#26187;&#22478;&#24066;&#25237;&#36164;&#20419;&#36827;&#20013;&#24515;"/>
<meta name="SiteDomain" content="zsj.jcgov.gov.cn"/>
<meta name="SiteIDCode" content="1405000016"/>
<meta name="ColumnName" content="&#32508;&#21512;&#20449;&#24687;"/>
<meta name="ColumnType" content="&#32508;&#21512;&#20449;&#24687;"/>
<meta name="ArticleTitle" content="&#25171;&#36896;&#19987;&#19994;&#22242;&#38431; &#25552;&#21319;&#25307;&#21830;&#36136;&#25928; &#20197;&#39640;&#36136;&#37327;&#25307;&#21830;&#24178;&#37096;&#38431;&#20237;&#20419;&#26187;&#22478;&#39640;&#36136;&#37327;&#21457;&#23637;"/>
<meta name="PubDate" content="2023-03-24 14:50:00"/>
<meta name="ContentSource" content="&#26412;&#31449;&#32534;&#36753;"/>
<meta name="Keywords" content=""/>
<meta name="Author" content=""/>
<meta name="Description" content=""/>
<meta name="Url" content=""/>
<meta name="ColumnDescription" content="&#32508;&#21512;&#20449;&#24687;"/>
<meta name="ColumnKeywords" content="&#32508;&#21512;&#20449;&#24687;"/>
<title>&#26187;&#22478;&#24066;&#25237;&#36164;&#20419;&#36827;&#20013;&#24515;</title>
<link href="../../../images/css.css" rel="stylesheet" type="text/css"/>
<script type="text/JavaScript"> function MM_swapImgRestore() { var i,x,a=document.MM_sr; for(i=0;a&amp;&amp;i&lt;a.length&amp;&amp;(x=a[i])&amp;&amp;x.oSrc;i++) x.src=x.oSrc; } function MM_preloadImages() { var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i&lt;a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} } function MM_findObj(n, d) { var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))&gt;0&amp;&amp;parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&amp;&amp;d.all) x=d.all[n]; for (i=0;!x&amp;&amp;i&lt;d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&amp;&amp;d.layers&amp;&amp;i&lt;d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x &amp;&amp; d.getElementById) x=d.getElementById(n); return x; } function MM_swapImage() { var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i&lt;(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} } </script>
<style type="text/css">
.news_nr *{
font-size: 16px;
}
</style>
</head>
<body>
<script type="text/JavaScript"> function MM_preloadImages() { var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i&lt;a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} } </script>
<script> function closecd(id){ document.getElementById("cd_"+id).style.display = "none" ; } function showcd(id){ document.getElementById("cd_"+id).style.display = "block" ; } </script>
<table width="1000" border="0" align="center" cellpadding="0" cellspacing="0">
<tbody>
<tr style="position: relative;">
<td width="279"><a href="/"><img ignore="true" src="/images/logo.jpg" border="0"/></a></td>
<td width="721" align="right" valign="bottom">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="620" height="122">
<param name="movie" value="/images/top.swf"/>
<param name="quality" value="high"/>
<param name="wmode" value="transparent"/>
<embed src="/images/top.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="620" height="122" ignore="true">
</embed></object>
</td>
<td class="wza">
<a href="javascript:void(0);" title="&#26080;&#38556;&#30861;" id="cniil_wza">&#26080;&#38556;&#30861;</a>
</td>
</tr>
</tbody>
</table>
<style type="text/css">
.nav_item_text{
position: absolute;
top: -23px;
left: 13px;
font-size: 16px;
color: white;
}
.relative{
position: relative;
}
</style>
<table width="100%" height="48" border="0" cellpadding="0" cellspacing="0" background="/images/menu_bg.gif" ignore="true">
<tbody>
<tr>
<td style="position: relative;">
<div style="position: relative; margin: 0px auto; width: 1000px; " align="left">
<div class="caidan">
<div id="cd_1" onmouseover="showcd(1)" onmouseout="closecd(1)" style="display: none;">
<div>
<div>
<a class="relative" href="http://zsj.jcgov.gov.cn/jcgk/">
<img ignore="true" src="/images/nav_item_active.png" border="0"/>
<span class="nav_item_text">&#24066;&#24773;&#31616;&#20171;</span>
</a>
</div>
<div class="dhlist dh_bg6">
<a href="http://zsj.jcgov.gov.cn/jcgk/jcsq/">&#26187;&#22478;&#24066;&#24773;</a>
<a href="http://zsj.jcgov.gov.cn/jcgk/jjsl/">&#32463;&#27982;&#23454;&#21147;</a>
<a href="http://zsj.jcgov.gov.cn/jcgk/fzgh/">&#21457;&#23637;&#35268;&#21010;</a>
</div>
</div>
</div>
<div id="cd_2" onmouseover="showcd(2)" onmouseout="closecd(2)" style="display: none;">
<div>
<div>
<a class="relative" href="http://zsj.jcgov.gov.cn/tzdx/">
<img ignore="true" src="/images/nav_item_active.png" border="0"/>
<span class="nav_item_text">&#25237;&#36164;&#23548;&#21521;</span>
</a>
</div>
<div class="dhlist dh_bg6">
<a href="http://zsj.jcgov.gov.cn/tzdx/tzys/">&#25237;&#36164;&#35201;&#32032;</a>
<a href="http://zsj.jcgov.gov.cn/tzdx/bszn/">&#21150;&#20107;&#25351;&#21335;</a>
<a href="http://zsj.jcgov.gov.cn/tzdx/fjxz/">&#38468;&#20214;&#19979;&#36733;</a>
</div>
</div>
</div>
<div id="cd_6" onmouseover="showcd(6)" onmouseout="closecd(6)">
<div>
<div>
<a class="relative" href="#">
<img ignore="true" src="/images/nav_item_active.png" border="0"/>
<span class="nav_item_text">&#21306;&#22495;&#25307;&#21830;</span>
</a>
</div>
<div class="dhlist dh_bg2">
<a href="http://www.qinshui.gov.cn/">&#27777;&#27700;</a>
<a href="http://www.lczf.gov.cn/">&#38517;&#24029;</a>
<a href="http://www.yczf.gov.cn/">&#38451;&#22478;</a>
<a href="http://www.sxgp.gov.cn/">&#39640;&#24179;</a>
<a href="http://www.zezhou.gov.cn/">&#27901;&#24030;</a>
<a href="http://www.jccq.gov.cn/mlhkt/">&#22478;&#21306;</a>
</div>
</div>
</div>
<!-- <div id="cd_7" onmouseover="showcd(7)" onmouseout="closecd(7)"> <div> <div><a href="http://zsj.jcgov.gov.cn/xmzt/1.html"><img IGNORE="true" src="/images/xldh_7.jpg" border="0" /></a></div> <div class="dhlist dh_bg6"> <a href="http://zsj.jcgov.gov.cn/xmzt/1.html">&#31614;&#32422;&#39033;&#30446;</a> <a href="http://zsj.jcgov.gov.cn/xmzt/2.html">&#33853;&#22320;&#39033;&#30446;</a> <a href="http://zsj.jcgov.gov.cn/xmzt/3.html">&#24320;&#24037;&#39033;&#30446;</a> </div> </div> </div> <div id="cd_8" onmouseover="showcd(8)" onmouseout="closecd(8)"> <div> <div><a href="http://zsj.jcgov.gov.cn/tzjy/jzxx.html"><img IGNORE="true" src="/images/xldh_8.jpg" border="0" /></a></div> <div class="dhlist dh_bg1"> <a href="http://zsj.jcgov.gov.cn/tzjy/jzxx.html">&#23616;&#38271;&#20449;&#31665;</a> </div> </div> </div> -->
<div id="cd_9" onmouseover="showcd(9)" onmouseout="closecd(9)">
<div>
<div>
<a class="relative" href="http://zsj.jcgov.gov.cn/jggk/">
<img ignore="true" src="/images/nav_item_active.png" border="0"/>
<span class="nav_item_text">&#26426;&#26500;&#27010;&#20917;</span>
</a>
</div>
<div class="dhlist dh_bg1">
<a href="http://zsj.jcgov.gov.cn/jggk/bmzz/">&#37096;&#38376;&#32844;&#36131;</a>
<a href="http://zsj.jcgov.gov.cn/jggk/ldxx/">&#39046;&#23548;&#20449;&#24687;</a>
<a href="http://zsj.jcgov.gov.cn/jggk/nsjg/">&#20869;&#35774;&#26426;&#26500;</a>
<a href="http://zsj.jcgov.gov.cn/jggk/lxwm/">&#32852;&#31995;&#25105;&#20204;</a>
</div>
</div>
</div>
</div>
</div>
<table width="1000" height="48" border="0" align="center" cellpadding="0" cellspacing="0" id="Table_01">
<tbody>
<tr>
<td>
<img ignore="true" src="/images/menu_01.jpg" width="10" height="48" alt=""/>
</td>
<td>
<a class="relative" href="/" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image15','','/images/nav_item_active_clean.png',1)">
<img ignore="true" src="/images/nav_item.png" name="Image15" width="90" height="48" border="0" id="Image15"/>
<span class="nav_item_text">&#32593;&#31449;&#39318;&#39029;</span>
</a>
</td>
<td>
<a class="relative" href="http://zsj.jcgov.gov.cn/jcgk/" onmouseover="showcd(1)" onmouseout="closecd(1)">
<img ignore="true" src="/images/nav_item.png" name="Image16" width="89" height="48" border="0" id="Image16"/>
<span class="nav_item_text">&#24066;&#24773;&#31616;&#20171;</span>
</a>
</td>
<td>
<a class="relative" href="http://zsj.jcgov.gov.cn/tzdx/" onmouseover="showcd(2)" onmouseout="closecd(2)">
<img ignore="true" src="/images/nav_item.png" name="Image17" width="89" height="48" border="0" id="Image17"/>
<span class="nav_item_text">&#25237;&#36164;&#23548;&#21521;</span>
</a>
</td>
<td>
<a class="relative" href="http://zsj.jcgov.gov.cn/jggk/" onmouseover="showcd(9)" onmouseout="closecd(9)">
<img ignore="true" src="/images/nav_item.png" name="Image25" width="89" height="48" border="0" id="Image25"/>
<span class="nav_item_text">&#26426;&#26500;&#27010;&#20917;</span>
</a>
</td>
<td>
<a class="relative" href="http://zsj.jcgov.gov.cn/xmtj/" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image18','','/images/nav_item_active_clean.png',1)">
<img ignore="true" src="/images/nav_item.png" name="Image18" width="89" height="48" border="0" id="Image18"/>
<span class="nav_item_text">&#39033;&#30446;&#25512;&#20171;</span>
</a>
</td>
<td>
<a class="relative" href="http://zsj.jcgov.gov.cn/sjtb/sjtb/" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image20','','/images/nav_item_active_clean.png',1)">
<img ignore="true" src="/images/nav_item.png" name="Image20" width="90" height="48" border="0" id="Image20"/>
<span class="nav_item_text">&#25968;&#25454;&#36890;&#25253;</span>
</a>
</td>
<td>
<a class="relative" href="/" onmouseover="showcd(6)" onmouseout="closecd(6)">
<img ignore="true" src="/images/nav_item.png" name="Image21" width="88" height="48" border="0" id="Image21"/>
<span class="nav_item_text">&#21306;&#22495;&#25307;&#21830;</span>
</a>
</td>
<td>
<a class="relative" href="http://zsj.jcgov.gov.cn/hdzx/" target="_blank" onmouseover="MM_swapImage('Image23','','/images/nav_item_active_clean.png',1)" onmouseout="MM_swapImgRestore()">
<img ignore="true" src="/images/nav_item.png" name="Image23" width="90" height="48" border="0" id="Image23"/>
<span class="nav_item_text">&#20114;&#21160;&#20013;&#24515;</span>
</a>
</td>
<td>
<a class="relative" href="http://zsj.ddo.cn/xxsj" target="_blank" onmouseover="MM_swapImage('Image24','','/images/nav_item_active_clean.png',1)" onmouseout="MM_swapImgRestore()">
<img ignore="true" src="/images/nav_item.png" name="Image24" width="88" height="48" border="0" id="Image24"/>
<span class="nav_item_text">&#20449;&#24687;&#25910;&#38598;</span>
</a>
<a class="relative" href="http://jc.sxzwfw.gov.cn/icity/icity/departmental_matters" target="_blank" onmouseover="MM_swapImage('Image24','','/images/nav_item_active_clean.png',1)" onmouseout="MM_swapImgRestore()">
<img ignore="true" src="/images/nav_item.png" name="Image24" width="88" height="48" border="0" id="Image24"/>
<span class="nav_item_text">&#25919;&#21153;&#26381;&#21153;</span>
</a>
</td>
<td>
<img ignore="true" src="/images/menu_13.jpg" width="10" height="48" alt=""/>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table width="1000" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="margin-top:10px;">
<tbody>
<tr>
<td valign="top" style="padding:10px;">
<div class="location2">
&#24403;&#21069;&#20301;&#32622;&#65306;<a href="../../../" title="&#39318;&#39029;" class="CurrChnlCls">&#39318;&#39029;</a>&#160;&gt;&gt;&#160;<a href="../../" title="&#26032;&#38395;&#21160;&#24577;" class="CurrChnlCls">&#26032;&#38395;&#21160;&#24577;</a>&#160;&gt;&gt;&#160;<a href="../" title="&#32508;&#21512;&#20449;&#24687;" class="CurrChnlCls">&#32508;&#21512;&#20449;&#24687;</a>
</div>
<div class="showCon">
<h1>
&#25171;&#36896;&#19987;&#19994;&#22242;&#38431; &#25552;&#21319;&#25307;&#21830;&#36136;&#25928; &#20197;&#39640;&#36136;&#37327;&#25307;&#21830;&#24178;&#37096;&#38431;&#20237;&#20419;&#26187;&#22478;&#39640;&#36136;&#37327;&#21457;&#23637;
</h1>
<div style="text-align:center;" class="xxly">
&#26469;&#28304;&#65306;&#26412;&#31449;&#32534;&#36753;
&#21457;&#24067;&#26102;&#38388;&#65306;2023-03-24
</div>
</div>
<div class="showCon">
<article id="zoom">
<div class="showConA news_nr">
<div class="view TRS_UEDITOR trs_paper_default trs_web">
<p style="margin: 0px; text-align: justify; line-height: 1.5em; text-indent: 0em; -ms-text-autospace: ideograph-numeric; -ms-text-justify: inter-ideograph;"/>
<p style="margin: 0px; text-align: justify; text-indent: 0em; -ms-text-autospace: ideograph-numeric; -ms-text-justify: inter-ideograph;">
<span style="font-family: &#20223;&#23435;; font-size: 21px;">&#8194;<span style="font-family: &#20223;&#23435;; font-size: 20px;" data-index="7">&#8194;&#8194;&#20026;&#28145;&#20837;&#36143;&#24443;&#33853;&#23454;&#29579;&#38663;&#20070;&#35760;&#22312;&#8220;&#24066;&#31649;&#20027;&#35201;&#39046;&#23548;&#24178;&#37096;&#23398;&#20064;&#36143;&#24443;&#20826;&#30340;&#20108;&#21313;&#22823;&#31934;&#31070;&#19987;&#39064;&#30740;&#35752;&#29677;&#8221;&#19978;&#20851;&#20110;&#25171;&#36896;&#8220;&#19977;&#26080;&#8221;&#8220;&#19977;&#21487;&#8221;&#33829;&#21830;&#29615;&#22659;&#30340;&#37325;&#35201;&#35762;&#35805;&#31934;&#31070;&#12290;&#24066;&#25237;&#36164;&#20419;&#36827;&#20013;&#24515;&#32858;&#28966;&#8220;&#24378;&#22522;&#30784;&#12289;&#22266;&#26681;&#26412;&#65292;&#34917;&#30701;&#26495;&#12289;&#20419;&#25552;&#21319;&#8221;&#30340;&#24635;&#20307;&#30446;&#26631;&#65292;&#32452;&#32455;&#24066;&#30452;&#30456;&#20851;&#37096;&#38376;&#21450;&#21439;&#65288;&#24066;&#12289;&#21306;&#65289;&#25307;&#21830;&#24178;&#37096;&#21442;&#21152;&#8220;&#26187;&#22478;&#24066;&#25307;&#21830;&#24341;&#36164;&#32032;&#36136;&#33021;&#21147;&#25552;&#21319;&#22521;&#35757;&#29677;&#8221;&#65292;&#30528;&#21147;&#25552;&#21319;&#25307;&#21830;&#24178;&#37096;&#32508;&#21512;&#33021;&#21147;&#21644;&#25307;&#21830;&#27700;&#24179;&#65292;&#20197;&#39640;&#36136;&#37327;&#20154;&#25165;&#38431;&#20237;&#24320;&#25299;&#25307;&#21830;&#24341;&#36164;&#26032;&#25104;&#25928;&#65292;&#25512;&#21160;&#26187;&#22478;&#39640;&#36136;&#37327;&#12289;&#36328;&#36234;&#24335;&#21457;&#23637;&#36808;&#19978;&#26032;&#21488;&#38454;&#12290;<br/>&#8194;&#8194;&#8194;&#8194;&#22521;&#35757;&#29677;&#20110;3&#26376;22&#26085;&#22312;&#26477;&#24030;&#25289;&#24320;&#24119;&#24149;&#65292;&#36992;&#35831;&#19994;&#20869;5&#21517;&#30693;&#21517;&#19987;&#23478;&#23398;&#32773;&#65292;&#37325;&#28857;&#22260;&#32469;&#25307;&#21830;&#39033;&#30446;&#20449;&#24687;&#25366;&#25496;&#12289;&#39033;&#30446;&#31574;&#21010;&#21253;&#35013;&#12289;&#25512;&#20171;&#23454;&#21153;&#20132;&#27969;&#31561;&#26041;&#38754;&#20869;&#23481;&#65292;&#36827;&#34892;&#20026;&#26399;3&#22825;&#30340;&#25480;&#35838;&#12290;&#27492;&#27425;&#22521;&#35757;&#19968;&#25913;&#20256;&#32479;&#35838;&#22530;&#8220;&#35762;&#29702;&#35770;&#8221;&#20026;&#20027;&#30340;&#21333;&#19968;&#24418;&#24335;&#65292;&#35774;&#32622;&#19987;&#39064;&#30740;&#35752;&#12289;&#32463;&#39564;&#20132;&#27969;&#12289;&#23454;&#21153;&#35299;&#26512;&#12289;&#22478;&#24066;&#36335;&#28436;&#12289;&#29616;&#22330;&#25945;&#23398;&#31561;&#8220;&#22810;&#26679;&#21270;&#8221;&#23454;&#36341;&#29615;&#33410;&#65292;&#36890;&#36807;&#8220;&#35762;&#23398;&#12289;&#30740;&#23398;&#12289;&#36187;&#23398;&#12289;&#26194;&#23398;&#8221;&#31561;&#24418;&#24335;&#65292;&#24403;&#38754;&#20256;&#25480;&#32463;&#39564;&#12289;&#29616;&#22330;&#31572;&#30097;&#35299;&#24785;&#12289;&#30331;&#21488;&#20132;&#27969;&#27604;&#27494;&#12289;&#23454;&#22320;&#36208;&#35775;&#23454;&#36341;&#65292;&#33829;&#36896;&#20102;&#35265;&#36132;&#24605;&#40784;&#12289;&#27604;&#23398;&#36214;&#36229;&#30340;&#27987;&#21402;&#27675;&#22260;&#65292;&#26377;&#25928;&#25552;&#21319;&#20102;&#22521;&#35757;&#30340;&#38024;&#23545;&#24615;&#21644;&#23454;&#25928;&#24615;&#12290;<br/>&#8194;&#8194;&#8194;&#8194;&#36890;&#36807;&#19977;&#22825;&#30340;&#22521;&#35757;&#65292;&#21442;&#35757;&#23398;&#21592;&#19968;&#33268;&#34920;&#31034;&#65292;&#20540;&#27492;&#36716;&#22411;&#21457;&#23637;&#30340;&#20851;&#38190;&#20043;&#38469;&#65292;&#22521;&#35757;&#29677;&#20030;&#21150;&#27491;&#24403;&#20854;&#26102;&#65292;&#20869;&#23481;&#32039;&#36319;&#28526;&#27969;&#12289;&#30452;&#22868;&#20027;&#39064;&#65292;&#24418;&#24335;&#20016;&#23500;&#26032;&#39062;&#12289;&#23507;&#25945;&#20110;&#20048;&#65292;&#35753;&#22823;&#23478;&#20174;&#35299;&#35835;&#25919;&#31574;&#31934;&#31070;&#65292;&#25512;&#21160;&#25442;&#20301;&#24605;&#32771;&#12289;&#20102;&#35299;&#20225;&#19994;&#38656;&#27714;&#12289;&#25299;&#23485;&#25307;&#21830;&#28192;&#36947;&#12289;&#23547;&#27714;&#36164;&#37329;&#25903;&#25345;&#12289;&#24378;&#21270;&#22478;&#24066;&#26631;&#31614;&#12289;&#21152;&#28145;&#21697;&#29260;&#21360;&#35760;&#20013;&#23398;&#21040;&#20102;&#35768;&#22810;&#26032;&#30693;&#35782;&#12289;&#33719;&#24471;&#20102;&#26032;&#24605;&#36335;&#12289;&#26032;&#26041;&#27861;&#65292;&#21487;&#35859;&#33719;&#30410;&#21290;&#27973;&#12290;<br/>&#8194;&#8194;&#8194;&#36890;&#36807;&#22521;&#35757;&#65292;&#22823;&#23478;&#35748;&#20026;&#20316;&#20026;&#25307;&#21830;&#20154;&#21592;&#65292;&#22521;&#35757;&#24212;&#24403;&#24120;&#25235;&#24120;&#26032;&#12289;&#25193;&#22823;&#33539;&#22260;&#12289;&#25552;&#39640;&#39057;&#27425;&#65292;&#20026;&#20805;&#20998;&#25552;&#39640;&#25307;&#21830;&#24178;&#37096;&#38431;&#20237;&#30340;&#20010;&#20154;&#32508;&#21512;&#32032;&#36136;&#12289;&#25307;&#21830;&#24341;&#36164;&#33021;&#21147;&#12289;&#25512;&#20171;&#20132;&#27969;&#27700;&#24179;&#25171;&#19979;&#26681;&#22522;&#65292;&#20026;&#25512;&#21160;&#39640;&#36136;&#37327;&#21457;&#23637;&#21402;&#26893;&#20154;&#25165;&#27779;&#22303;&#12290;</span></span></p><p/></div>
</div>
</article>
</div>
<script> function doZoom(size) { document.getElementById('zoom').style.fontSize = size + 'px' } </script>
</td>
</tr>
</tbody>
</table>
<table width="1000" border="0" align="center" cellpadding="0" cellspacing="0" style="margin-top:12px;">
<tbody>
<tr>
<td>
<a href="http://zsj.jcgov.gov.cn/yqlj/yqlj/">
<img ignore="true" src="/images/index_yqlj.jpg" width="1000" height="42" border="0"/>
</a>
</td>
</tr>
<tr>
<td height="90" valign="top" class="index_news_bor">
<div class="di_yqlj">
<a href="http://www.jcnews.com.cn/">&#26187;&#22478;&#26032;&#38395;&#32593;</a>
<a href="http://www.jcgov.gov.cn/">&#26187;&#22478;&#24066;&#20154;&#27665;&#25919;&#24220;</a>
<a href="http://www.shanxiinvest.com/">&#23665;&#35199;&#30465;&#25237;&#36164;&#20419;&#36827;&#23616;</a>
<a href="http://www.ccpit-sx.org/">&#23665;&#35199;&#30465;&#36152;&#20419;&#20250;</a>
<a href="http://www.zhaoshang-sh.com/">&#19978;&#28023;&#25307;&#21830;&#32593;</a>
<a href="http://www.zhaoshang.net/">&#20013;&#22269;&#25307;&#21830;&#32593;</a>
<a href="http://www.cnipai.com/">&#20013;&#22269;&#22253;&#21306;&#25307;&#21830;&#32593;</a>
<a href="http://www.jrj.com.cn/">&#37329;&#34701;&#30028;</a>
<a href="http://hzjl.tj.gov.cn/">&#22825;&#27941;&#24066;&#21512;&#20316;&#20132;&#27969;&#21150;</a>
<a href="http://opinion.people.com.cn/">&#20154;&#27665;&#32593;&#35266;&#28857;&#39057;&#36947;</a>
</div>
</td>
</tr>
</tbody>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="di_copy">
<tbody>
<tr>
<td height="160" align="center">
<a href="/">&#32593;&#31449;&#39318;&#39029;</a>
| <a href="http://zsj.jcgov.gov.cn/jcgk/">&#24066;&#24773;&#31616;&#20171;</a>
| <a href="http://zsj.jcgov.gov.cn/tzdx/">&#25237;&#36164;&#23548;&#21521;</a>
| <a href="http://zsj.jcgov.gov.cn/jggk/">&#26426;&#26500;&#27010;&#20917;</a>
| <a href="http://zsj.jcgov.gov.cn/xmtj/">&#39033;&#30446;&#25512;&#20171;</a>
| <a href="http://zsj.jcgov.gov.cn/sjtb/sjtb/">&#25968;&#25454;&#36890;&#25253;</a>
| <a href="http://zsj.jcgov.gov.cn/hdzx/">&#20114;&#21160;&#20013;&#24515;</a>
| <a href="http://zsj.jcgov.gov.cn/jggk/lxwm/">&#32852;&#31995;&#25105;&#20204;</a>
| <a href="http://zsj.jcgov.gov.cn/wzdt/">&#32593;&#31449;&#22320;&#22270;</a>
<br/>
&#26187;&#22478;&#24066;&#25237;&#36164;&#20419;&#36827;&#20013;&#24515; &#29256;&#26435;&#25152;&#26377; &#22320;&#22336;&#65306;&#26187;&#22478;&#24066;&#22478;&#21306;&#27901;&#24030;&#36335;1019&#21495;<br/>
&#22791;&#26696;&#24207;&#21495;&#65306;<a href="http://beian.miit.gov.cn/">&#26187;ICP&#22791;05001036&#21495;</a>
<a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=14050002000705">
<img ignore="true" src="/images/ghs.png"/>
<span style="height:20px;line-height:20px;color:#666666;">&#26187;&#20844;&#32593;&#23433;&#22791; 14050002000705&#21495;</span>
</a>
&#32593;&#31449;&#26631;&#35782;&#30721;:1405000016
<br/>
<table width="200" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="140"><script id="_jiucuo_" sitecode="1405000016" src="https://zfwzgl.www.gov.cn/exposure/jiucuo.js" ignore="true"/></td>
<td align="center" valign="middle">
<span id="_ideConac">
<a href="http://bszs.conac.cn/sitename?method=show&amp;id=0A65DF4FAC04654FE053022819AC9EA5" target="_blank">
<img id="imgConac" vspace="0" hspace="0" border="0" ignore="true" src="/images/blue.png" data-bd-imgshare-binded="1"/>
</a>
</span>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<script type="text/javascript" src="./images/security.js"/>
<script id="_trs_ta_js" src="//ta.trs.cn/c/js/ta.js?mpid=4622" async="async" defer="defer"/>
<script defer="defer" async="" type="text/javascript" src="https://api.govwza.cn/cniil/assist.js?sid=1406&amp;pos=left" ignore="true"/>
</body>
</html>
import os
import os
import json
import base64
import requests
import hashlib
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5
class Signature:
'''
爱城市网扫码登录
https://open.icity24.cn/
'''
def __init__(self, params):
# self.url = "https://auth.icity24.cn/icity/auth2.0/token"
self.params = params
self.privetkey_file_path = os.path.dirname(os.path.dirname(__file__)) + "/utils/json/ty_rsa"
self.privetkey = self.read_privet_key()
self.unsign_data = self.generate_sign(self.params)
# 读取私钥
def read_privet_key(self):
with open(self.privetkey_file_path, mode="r", encoding="utf-8") as f:
privetkey = "".join(f.readlines()[1:-1])
privetkey = privetkey.encode(encoding='utf-8')
return privetkey
# HASH-sha256
def generate_sign(self, param):
'''生成hash'''
# 按ASCII拼接字符串
stringA = "&".join([f"{k}={param[k]}" for k in sorted(param)])
# SHA256加密
hash_sha256 = hashlib.sha256(stringA.encode('utf8')).hexdigest()
return hash_sha256
# 生成签名
def gen_sign(self, secret=None):
"""
生成签名:是直接读取私钥的方式和未加签的数据
:return: 签名数据
"""
rsaKey = RSA.importKey(base64.b64decode(self.privetkey), passphrase=secret)
signer = Signature_pkcs1_v1_5.new(rsaKey)
digest = SHA256.new()
digest.update(self.unsign_data.encode('utf8'))
sign = signer.sign(digest)
signature = base64.b64encode(sign)
return signature.decode()
'''1、获取token'''
appid = "fea79d4c-9906-408c-86a5-8a092fda49b3"
code = "c417598b-5892-4217-81be-c3b6080e9fa1"
# code换取token
params = {
'appid': appid, # 爱城市网appID
'code': code, # 授权成功后产生的code
'grant_type': "authorization_code"
}
# 获取签名sign
s = Signature(params)
sign_value = s.gen_sign()
params["sign"] = sign_value
# 认证获取token
resp = requests.post(url="https://auth.icity24.cn/icity/auth2.0/token", data=params)
resp = json.loads(resp.text)
token = resp["token"]
'''2、token获取baseinfo'''
params = {
'appid': appid, # 爱城市网appID
'auth_token': token, # token
}
# 获取新签名sign
s = Signature(params)
sign_value = s.gen_sign()
params["sign"] = sign_value
# 获取基本信息
resp = requests.post(url="https://auth.icity24.cn/icity/auth2.0/get_base_info", data=params)
resp = json.loads(resp.text)
mobile_phon = resp["mobile_phon"] # 手机号
import os
import os
import json
import base64
import requests
import hashlib
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5
"""
function 2:
openssl genrsa -out ./myPrivateKey.pem -passout pass:"密码" -des3 2048
openssl rsa -pubout -in ./myPrivateKey.pem -passin pass:"密码" -out ./myPublicKey.pem
"""
def gen_sig_(unsign_data, secret):
"""
两种方式生成签名:
这是第一种
1. 打开文件方式,见所有被注释的部分,文件为.pem
2. passphrase 的参数为文件加密的密码
:return: 签名数据
"""
path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
doc = os.path.join(path, 'myPrivateKey.pem')
with open(doc) as pk:
key_data = pk.read()
rsaKey = RSA.importKey(key_data, passphrase="密码")
signer = Signature_pkcs1_v1_5.new(rsaKey)
digest = SHA256.new()
digest.update(unsign_data.encode('utf8'))
sign = signer.sign(digest)
signature = base64.b64encode(sign)
print(signature)
return signature
def verify_sign_(data, sign, secret):
"""
读取公钥文件,验签
"""
path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
doc = os.path.join(path, 'myPrivateKey.pem')
with open(doc) as pk:
key_data = pk.read()
rsaKey = RSA.importKey(key_data, passphrase=b'mima')
verifier = Signature_pkcs1_v1_5.new(rsaKey)
digest = SHA256.new()
digest.update(data.encode('utf8'))
is_verify = verifier.verify(digest, base64.b64decode(sign))
print(is_verify)
return is_verify
def gen_sign(private_key, unsign_data, secret):
"""
两种方式生成签名:
1. 是直接读取私钥的方式和未加签的数据
:return: 签名数据
"""
rsaKey = RSA.importKey(base64.b64decode(private_key), passphrase=secret)
signer = Signature_pkcs1_v1_5.new(rsaKey)
digest = SHA256.new()
digest.update(unsign_data.encode('utf8'))
sign = signer.sign(digest)
signature = base64.b64encode(sign)
return signature.decode()
def verify_sign(pubkey, data, sign, secret):
"""
直接传公钥方式
"""
rsaKey = RSA.importKey(base64.b64decode(pubkey), passphrase=secret)
verifier = Signature_pkcs1_v1_5.new(rsaKey)
digest = SHA256.new()
digest.update(data.encode('utf8'))
is_verify = verifier.verify(digest, base64.b64decode(sign))
print(is_verify)
return is_verify
def generate_sign(param):
'''生成hash'''
stringA = "&".join([f"{k}={param[k]}" for k in sorted(param)])
# SHA256加密
hash_sha256 = hashlib.sha256(stringA.encode('utf8')).hexdigest()
return hash_sha256
if __name__ == '__main__':
# 读取私钥
with open("ty_rsa", mode="r", encoding="utf-8") as f:
privetkey = "".join(f.readlines()[1:-1])
privetkey = privetkey.encode(encoding='utf-8')
# 生成hash
params = {
'appid': "fea79d4c-9906-408c-86a5-8a092fda49b3", # 爱城市网appID
'code': "c417598b-5892-4217-81be-c3b6080e9fa1", # 授权成功后产生的code
'grant_type': "authorization_code"
}
hash_value = generate_sign(params)
# 签名
sign_value = gen_sign(privetkey, hash_value, None)
params["sign"] = sign_value
# 换取token
resp = requests.post(url="https://auth.icity24.cn/icity/auth2.0/token", data=params)
resp = json.loads(resp.text)
print(resp)
if resp["code"] != 1000:
print("验证失败")
-----BEGIN PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
MIICWgIBAAKBgQCbhcu70wIoXnVhhGimrJWaQ1y5M3F8oDM6maLSjiVmaN0Kc7AN
EFF+jOtiN3C0xNxyaAINxi0J53Az1ezYIsa83vfZT0J0W53LtDXmfJQkuTFF333Z
PFZheRQqDrH08mDEL2S/aLgll1GyrKYP8IEO39xvkEuoAHK1Qcsjb4VQiQIDAQAB
An8m4UwNqLLhZLvzpSaEhKDh7/U+V54HigVEoSQTf3XaJF0eP83DdlDpUlGGPFXw
20ZBU78vsluQHkvuqYyMfCUyrrTgZYCCUgguWt0nbdc8YcFKiXn2P8ki5pEzt4mV
UwGoWIB7WQ4wVscghwE+6uFhi+0IzW3C2eigg3jqDIUBAkEAwCuda9LRlZIn2PDQ
CvEB574BNcU3vvaRemK5WnZ/Iep23ENf0nyE2CLgELxcu4aY6vZSNvrUD2T9+Gub
PYd8HwJBAM8t/3nsA3vhok8XDUWoee18k36mopZiRT/hB5FGQl4aX+p+EDAVeytQ
9WNim4R5RD+rym92ktJfzZj50hxBnlcCQCPZfxqYT6T5iRl9gzInV9WlqpAfZJDp
aqZMOIvZw0nOdbINl5iqxhWUG/zDRwFs0KY0oY3EKT9d9cscN++4kL0CQQC33Ll6
SSL6YM67Y9jKde7m/QSkhFuMHGAahalCmtixTLTMlN3m3ll1op5zegJMOZaA7wNz
kgZQnucGGMcHfpB3AkAr249EUriJXa8MfzolpCq2aWD974vFOINgz7GMj+B/a0fO
jzQ9j/fWp7330spy1lllWuVSYyA2OuhiH7HZHSSg
-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu8FSZc7KcJcHXXaUIkFBj59q8
SdFZ6lYwROzPpNh5dxNa0/Umcxfk7Wg/vHDmxN/4Nk/KzpuQjUhUYl8ot15ZQbEt
/0kmjlBtZQk5lno/6FxnRlK+OtqW3uCG6nPLTZNGOfzQsaSioXg5OfK3a1bIGXXX
NTSlC+xC0iGfury6sQIDAQAB
-----END PUBLIC KEY-----
# 爱城市网app,PC网站扫码登录指南
# 爱城市网app,PC网站扫码登录指南
''''''
'''1、app扫码授权'''
# 1、 打开认证界面(扫码界面),第三方需要在PC网站拼接地址,打开扫码页面。可以使用ifream形式,并自定义样式
# 具体请求如下:
# url(GET) https://new3.icity24.cn/platformcenter/scan-code-pc/index.html
# 参数
# 名字 类型 是否必需 最大长度 描述 示例
# app_id String 是 32 爱城市网分配给第三方应用的AppId fea79d4c-9906-408c-86a5-8a092fda49b3
# redirect_uri String 是 - 授权成功后回调页面,需转义,此url的域名必须和约定2中的一致 https://www.baidu.com?XXX=XXX
# scope String 是 - 接口权限值,多个以","分隔 base_info,auth_user
# Result 备注 用户授权成功后会跳转至开发者定义的回调页面,爱城市会在回调页面地址后面
# 拼接app_id,code,open_id,scope等参数。若用户取消授权,将关闭认证页面。
# 示例:https://auth.icity24.cn/icity/auth2.0/authorize?app_id=7f4ba7d2-0c44-4c65-866d-7f5e754360a3&redirect_uri=http%3A%2F%2Ftyzhaoshanggraph.industrychain.online&scope=base_info,auth_user
'''2、code -换取-> token'''
# 应用在拿到code之后应尽快去爱城市授权中心换取token, code过期时间为五分钟,过期将不可在用,且一个code只能使用一次。
# url(POST) https://auth.icity24.cn/icity/auth2.0/token
# 名字 类型 是否必需 最大长度 描述 示例
# app_id String 是 32 爱城市网分配给第三方应用的AppId fea79d4c-9906-408c-86a5-8a092fda49b3
# code String 是 32 授权成功后产生的code c417598b-5892-4217-81be-c3b6080e9fa1
# grant_type String 是 - authorization_code或者refresh_token,其中authorization_code代表使用code获取,refresh_token代表使用refresh_token authorization_code
# refresh_token String 是 - 当token过期时可用refresh_token刷新获取新token c417598b-5892-4217-81be-c3b6080e9fa1
# sign String 是 - 签名,具体签名规则见附录 VJMIgEqAIe6928LVvKC8VFHHZhmW0WHVfjqTZpN8H5fhOlB+raGnMZGfRfPhv+LfJ236mq/lCSKIS14uS0cc7PvBFLlX0ks//aLdPySzsdsziWWPsPh9Jt2Wu/Z/yrCRjK1Ev4PVbXmOw2PDvWti2e0pO0mscgOiwPTHKgAaL84=
# 签名算法
import hashlib
def generate_sign(param):
'''生成hash'''
stringA = "&".join([f"{k}={param[k]}" for k in sorted(param)])
# SHA256加密
hash_sha256 = hashlib.sha256(stringA.encode('utf8')).hexdigest()
return hash_sha256
params = {
'appid': "fea79d4c-9906-408c-86a5-8a092fda49b3", # 爱城市网appID
'code': "c417598b-5892-4217-81be-c3b6080e9fa1", # 授权成功后产生的code
'grant_type': "authorization_code"
}
print(generate_sign(params))
# RSASSA-PKCS1-V1_5-SIGN使用私钥对hash签名
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment