#解决中文乱码
#encoding=utf-8
import datetime
#连接数据库postgresql
import psycopg2
import urllib2
import json
#全局变量
global id
global TokenId
global DataTime
#静态变量
#企也ID

CORPID = 'wxa128d---------255a4'
#权限密钥
SECRET = 'khDQAN----------BlNhhH8ej5gnTHn_X2R7ff39MdEWmjekkyyPtGOb5sfGOOgnk'
url= ("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s"%(CORPID,SECRET))
#获取Token
def http_get(url):
ret=urllib2.urlopen(url).readline()
token=json.loads(ret)["access_token"]
return token
def connectSQL():
   
conn=psycopg2.connect(database="test",password="shanghai",user="postgres",host="localhost",posrt="5432")
     cur=conn.cursor()

#插入数据
def insert_Token(TokenId,d1):
connectSQL()
sql="insert into Token VALUES (TokenId,d1)"
cur=conn.cursor()
try:
# 执行SQL语句
cur.execute(sql)
conn.commit()
except:
# 发生错误时回滚
conn.rollback()
#关闭数据库
conn.close()


#查询数据库(只查询一行数据)
def selectPostgreSQL():
 connectSQL()
#创建Token数据表
#cur.execute("CREATE TABLE Token(id serial PRIMARY KEY ,TokenId VARCHAR ,DataTime VARCHAR );")
#查询数据库的时间和Token值
sql = "SELECT * FROM Token where id=max(id)"
try:
# 执行SQL语句
cur.execute(sql)
# 获取所有记录列表
results = cur.fetchall()
for row in results:
id=row[0]
TokenId = row[1]
DataTime = row[2]
except:
print "Error: unable to fecth data"
conn.close()
selectPostgreSQL()
#先判断数据库是否有Token值,有的话取出来用,没有的话,重新生成,插入数据库
if not TokenId.strip():
print TokenId
#判断是否失效(现在的时间-去数据库的时间>7200S说明失效)
#获取当前时间
d1= datetime.datetime.now()
d2=datetime.datetime.strptime(DataTime,'%Y-%m-%d %H:%M:%S')
secs=(d1-d2).seconds
#比较当前时间和数据库时间差值是否大于7200S
if secs>=7200:
print("失效,重新获取Token")
#获取Token放入数据库中
TokenId=http_get(url)
insert_Token(TokenId,d1)
# 生成一个Token,插入数据库
#如果失效就重新生成
else:
#没有失效就直接用
TokenId=TokenId
else:
print("重新获取Token。。")
TokenId= http_get(url)
d1=datetime.datetime.now()
insert_Token(TokenId,d1)