コード例 #1
0
ファイル: wx_tool.py プロジェクト: defhook/flask-blog
def init_wechat_sdk():
    """
    初始化微信sdk
    :return: WechatBasic
    """
    access_token = db.get("wechat:access_token")
    jsapi_ticket = db.get("wechat:jsapi_ticket")
    token_expires_at = db.get("wechat:access_token_expires_at")
    ticket_expires_at = db.get("wechat:jsapi_ticket_expires_at")
    if all((access_token, jsapi_ticket, token_expires_at, ticket_expires_at)):
        wechat = WechatBasic(appid=app.config['APP_ID'],
                             appsecret=app.config['APP_SECRET'],
                             token=app.config['TOKEN'],
                             access_token=access_token,
                             access_token_expires_at=int(token_expires_at),
                             jsapi_ticket=jsapi_ticket,
                             jsapi_ticket_expires_at=int(ticket_expires_at))
    else:
        wechat = WechatBasic(appid=app.config['APP_ID'],
                             appsecret=app.config['APP_SECRET'],
                             token=app.config['TOKEN'])
        access_token = wechat.get_access_token()
        db.set("wechat:access_token", access_token['access_token'], 7000)
        db.set("wechat:access_token_expires_at",
                  access_token['access_token_expires_at'], 7000)
        jsapi_ticket = wechat.get_jsapi_ticket()
        db.set("wechat:jsapi_ticket", jsapi_ticket['jsapi_ticket'], 7000)
        db.set("wechat:jsapi_ticket_expires_at",
                  jsapi_ticket['jsapi_ticket_expires_at'], 7000)

    return wechat
コード例 #2
0
def getbasic():
    access_token = None
    access_token_expires_at = None

    accesstoken = db.session.query(AccessToken).order_by(
        AccessToken.id.desc()).first()

    if accesstoken is not None:
        access_token = accesstoken.accesstoken
        access_token_expires_at = accesstoken.expires

    conf = WechatConf(
        token=os.environ.get('WECHAT_TOKEN'),
        appid=os.getenv('appid') or 'wx2fa77d7048b61431',
        appsecret=os.getenv('appsecret') or 'd9dd89550c7c221d44ccd581a6558fd6',
        encrypt_mode='normal',
        access_token=access_token,
        access_token_expires_at=access_token_expires_at,
    )

    basic = WechatBasic(conf=conf)

    now = time()

    if access_token_expires_at - now < 60:
        token = basic.get_access_token()
        db.session.add(
            AccessToken(accesstoken=token['access_token'],
                        expires=token['access_token_expires_at']))

    return basic
コード例 #3
0
def init_wechat_sdk():
    """初始化微信 SDK"""
    access_token = redis.get("wechat:access_token")
    jsapi_ticket = redis.get("wechat:jsapi_ticket")
    token_expires_at = redis.get("wechat:access_token_expires_at")
    ticket_expires_at = redis.get("wechat:jsapi_ticket_expires_at")
    if access_token and jsapi_ticket and token_expires_at and ticket_expires_at:
        wechat = WechatBasic(appid=app.config['APP_ID'],
                             appsecret=app.config['APP_SECRET'],
                             token=app.config['TOKEN'],
                             access_token=access_token,
                             access_token_expires_at=int(token_expires_at),
                             jsapi_ticket=jsapi_ticket,
                             jsapi_ticket_expires_at=int(ticket_expires_at))
    else:
        wechat = WechatBasic(appid=app.config['APP_ID'],
                             appsecret=app.config['APP_SECRET'],
                             token=app.config['TOKEN'])
        access_token = wechat.get_access_token()
        redis.set("wechat:access_token", access_token['access_token'], 7000)
        redis.set("wechat:access_token_expires_at",
                  access_token['access_token_expires_at'], 7000)
        jsapi_ticket = wechat.get_jsapi_ticket()
        redis.set("wechat:jsapi_ticket", jsapi_ticket['jsapi_ticket'], 7000)
        redis.set("wechat:jsapi_ticket_expires_at",
                  jsapi_ticket['jsapi_ticket_expires_at'], 7000)

    return wechat
コード例 #4
0
ファイル: token_tool.py プロジェクト: talway/wechat_base
 def wrapper(*args, **kwargs):
     global cur_token
     if not cur_token or cur_token["access_token_expires_at"] - 60 < int(time.time()):
         wechat = WechatBasic(appid=wechat_appid, appsecret=wechat_appsecret)
         wechat.grant_token(True)
         cur_token = wechat.get_access_token()
     return wechat_function(*args, **kwargs)
コード例 #5
0
ファイル: utils.py プロジェクト: DogLi/gxgk-wechat-server
def init_wechat_sdk():
    """初始化微信 SDK"""
    access_token = redis.get("wechat:access_token")
    jsapi_ticket = redis.get("wechat:jsapi_ticket")
    token_expires_at = redis.get("wechat:access_token_expires_at")
    ticket_expires_at = redis.get("wechat:jsapi_ticket_expires_at")
    if access_token and jsapi_ticket and token_expires_at and ticket_expires_at:
        wechat = WechatBasic(appid=app.config['APP_ID'],
                             appsecret=app.config['APP_SECRET'],
                             token=app.config['TOKEN'],
                             access_token=access_token,
                             access_token_expires_at=int(token_expires_at),
                             jsapi_ticket=jsapi_ticket,
                             jsapi_ticket_expires_at=int(ticket_expires_at))
    else:
        wechat = WechatBasic(appid=app.config['APP_ID'],
                             appsecret=app.config['APP_SECRET'],
                             token=app.config['TOKEN'])
        access_token = wechat.get_access_token()
        redis.set("wechat:access_token", access_token['access_token'], 7000)
        redis.set("wechat:access_token_expires_at",
                  access_token['access_token_expires_at'], 7000)
        jsapi_ticket = wechat.get_jsapi_ticket()
        redis.set("wechat:jsapi_ticket", jsapi_ticket['jsapi_ticket'], 7000)
        redis.set("wechat:jsapi_ticket_expires_at",
                  jsapi_ticket['jsapi_ticket_expires_at'], 7000)

    return wechat
コード例 #6
0
ファイル: token_tool.py プロジェクト: jacobbubu/wechat_base
 def wrapper(*args, **kwargs):
     global cur_token
     if not cur_token or cur_token["access_token_expires_at"] - 60 < int(
             time.time()):
         wechat = WechatBasic(appid=wechat_appid,
                              appsecret=wechat_appsecret)
         wechat.grant_token(True)
         cur_token = wechat.get_access_token()
     return wechat_function(*args, **kwargs)
コード例 #7
0
def get_access_token():
    token = cache.get(TOKEN_KEY)
    token_expired_at = cache.get(TOKEN_EXPIRED_AT_KEY)
    if token:
        return token, token_expired_at
    b = WechatBasic(appid=settings.app_id, appsecret=settings.secret)
    print "get_access_token at:", datetime.datetime.now()
    d = b.get_access_token()
    token = d["access_token"]
    expired_at = d["access_token_expires_at"]
    cache.set(TOKEN_KEY, token, (expired_at - time.time()) * 60)
    cache.set(TOKEN_EXPIRED_AT_KEY, expired_at, (expired_at - time.time()) * 60)
    return token, expired_at
コード例 #8
0
def get_access_token():
    token = cache.get(TOKEN_KEY)
    token_expired_at = cache.get(TOKEN_EXPIRED_AT_KEY)
    if token:
        return token, token_expired_at
    b = WechatBasic(appid=settings.APP_ID, appsecret=settings.SECRET)
    print 'get_access_token at:', datetime.datetime.now()
    d = b.get_access_token()
    token = d['access_token']
    expired_at = d['access_token_expires_at']
    cache.set(TOKEN_KEY, token, (expired_at - time.time()) * 60)
    cache.set(TOKEN_EXPIRED_AT_KEY, expired_at,
              (expired_at - time.time()) * 60)
    return token, expired_at
コード例 #9
0
ファイル: auth.py プロジェクト: daixm/wechat-admin
def get_access_token():
    token = cache.get(TOKEN_KEY)
    token_expired_at = cache.get(TOKEN_EXPIRED_AT_KEY)
    if token:
        return token, token_expired_at
    b = WechatBasic(
        appid=settings.APP_ID,
        appsecret=settings.SECRET)
    print 'get_access_token at:', datetime.datetime.now()
    d = b.get_access_token()
    token = d['access_token']
    expired_at = d['access_token_expires_at']
    cache.set(TOKEN_KEY, token, int(expired_at - time.time())*60)
    cache.set(TOKEN_EXPIRED_AT_KEY, expired_at, int(expired_at - time.time())*60)
    return token, expired_at
コード例 #10
0
def getNewWechatInfo():
    '''
    modify by bigzhu at 15/07/20 00:00:12 自动转化python的时间类型
    '''
    wechat = WechatBasic(token=token, appid=appid, appsecret=appsecret)
    the_access_token = wechat.get_access_token()
    access_token = the_access_token['access_token']
    access_token_expires_at = the_access_token['access_token_expires_at']
    ticket_info = wechat.get_jsapi_ticket()
    jsapi_ticket = ticket_info['jsapi_ticket']
    jsapi_ticket_expires_at = ticket_info['jsapi_ticket_expires_at']

    access_token_expires_at = time_bz.timestampToDateTime(access_token_expires_at)
    jsapi_ticket_expires_at = time_bz.timestampToDateTime(jsapi_ticket_expires_at)

    return wechat, access_token, access_token_expires_at, jsapi_ticket, jsapi_ticket_expires_at
コード例 #11
0
ファイル: wechat_oper.py プロジェクト: clcccccl/follow_center
def getNewWechatInfo():
    '''
    modify by bigzhu at 15/07/20 00:00:12 自动转化python的时间类型
    modify by bigzhu at 15/09/13 17:25:43 为了用订阅号给指定用户发消息,改用WechatExt
    '''
    wechat = WechatBasic(token=token, appid=appid, appsecret=appsecret)
    the_access_token = wechat.get_access_token()
    access_token = the_access_token['access_token']
    access_token_expires_at = the_access_token['access_token_expires_at']
    ticket_info = wechat.get_jsapi_ticket()
    jsapi_ticket = ticket_info['jsapi_ticket']
    jsapi_ticket_expires_at = ticket_info['jsapi_ticket_expires_at']

    access_token_expires_at = time_bz.timestampToDateTime(access_token_expires_at)
    jsapi_ticket_expires_at = time_bz.timestampToDateTime(jsapi_ticket_expires_at)

    return wechat, access_token, access_token_expires_at, jsapi_ticket, jsapi_ticket_expires_at
コード例 #12
0
ファイル: wechat_bz.py プロジェクト: Jasonfloy/lib
def initWechat(settings):
    '''
    create by bigzhu at 15/05/18 14:42:20 初始化wechat,获取必要的信息,返回 settings
    >>> initWechat({'token':'jhxh4lkwscelseyumc4jmoymmqkz1le1', 'appid':'wx2427206f53ca5191', 'appsecret':'96c12db489bf34bddc5b8929f2745937'}) #doctest:+ELLIPSIS
    new access_token= ...
    ({'access_token_expires_at': 1..., 'access_token': u'...', 'jsapi_ticket': u'...', 'appsecret': '96c12db489bf34bddc5b8929f2745937', 'token': 'jhxh4lkwscelseyumc4jmoymmqkz1le1', 'appid': 'wx2427206f53ca5191', 'jsapi_ticket_expires_at': ...}, <wechat_sdk.basic.WechatBasic object at ...>)
    '''

    wechat = WechatBasic(token=settings["token"],
                         appid=settings["appid"],
                         appsecret=settings["appsecret"])
    token = wechat.get_access_token()
    settings['access_token'] = token['access_token']
    settings['access_token_expires_at'] = token['access_token_expires_at']

    ticket_info = wechat.get_jsapi_ticket()
    settings['jsapi_ticket'] = ticket_info['jsapi_ticket']
    settings['jsapi_ticket_expires_at'] = ticket_info['jsapi_ticket_expires_at']
    print 'new access_token=', settings['access_token']
    return settings, wechat
コード例 #13
0
def init_wechat_sdk():
    access_token = redis.get("wechat:access_token")
    if access_token != None:
        conf = WechatConf(
            token=app.config['TOKEN'],
            appid=app.config['APP_ID'],
            appsecret=app.config['APP_SECRET'],
            access_token=access_token,
            encrypt_mode="normal",
            access_token_expires_at=redis.ttl("wechat:access_token"))
        wechat = WechatBasic(conf=conf)
    else:
        conf = WechatConf(token=app.config['TOKEN'],
                          appid=app.config['APP_ID'],
                          encrypt_mode="normal",
                          appsecret=app.config['APP_SECRET'])
        wechat = WechatBasic(conf=conf)
        access_token = wechat.get_access_token()
        redis.set("wechat:access_token", access_token['access_token'], 7000)
    return wechat
コード例 #14
0
def get_new_access_token():
    """根据时间戳来判断数据库是否有未过期的access_token"""
    timestamps = int(time.time())
    access_token_records = AccessToken.objects.filter(
        access_token_expires_at__gt=timestamps - 7200)
    if len(access_token_records) == 0:
        wechat_obj = WechatBasic(
            token='projie',
            appid='wxe1c1f049439b6c30',
            appsecret='f85b53570ae1540b078e548b99a45f6c',
        )
        new_access_token = wechat_obj.get_access_token()
        AccessToken.objects.create(
            access_token=new_access_token['access_token'],
            access_token_expires_at=new_access_token['access_token_expires_at']
        )
        return new_access_token['access_token'], new_access_token[
            'access_token_expires_at']
    else:
        return access_token_records[0].access_token, access_token_records[
            0].access_token_expires_at
コード例 #15
0
ファイル: weixin.py プロジェクト: chimission/wenda_backend
def get_wechat(restaurant):
    # 判断access token是否过期
    if (restaurant.weixin_access_token is None
            or restaurant.weixin_access_token_expires_at <
            int(time.time()) - 1000):
        wechat = WechatBasic(token=restaurant.token,
                             appid=restaurant.app_id,
                             appsecret=restaurant.app_secret)
        r = wechat.get_access_token()
        restaurant.weixin_access_token = r["access_token"]
        restaurant.weixin_access_token_expires_at = r[
            "access_token_expires_at"]
        restaurant.save()

    wechat = WechatBasic(
        token=restaurant.token,
        appid=restaurant.app_id,
        appsecret=restaurant.app_secret,
        access_token=restaurant.weixin_access_token,
        access_token_expires_at=restaurant.weixin_access_token_expires_at)
    return wechat
コード例 #16
0
def getNewWechatInfo():
    '''
    modify by bigzhu at 15/07/20 00:00:12 自动转化python的时间类型
    modify by bigzhu at 15/09/13 17:25:43 为了用订阅号给指定用户发消息,改用WechatExt
    '''
    conf = WechatConf(
        token=token,
        appid=appid,
        appsecret=appsecret,
        encrypt_mode='compatible',
        encoding_aes_key=encoding_aes_key
    )
    wechat = WechatBasic(conf=conf)
    the_access_token = wechat.get_access_token()
    access_token = the_access_token['access_token']
    access_token_expires_at = the_access_token['access_token_expires_at']
    ticket_info = wechat.get_jsapi_ticket()
    jsapi_ticket = ticket_info['jsapi_ticket']
    jsapi_ticket_expires_at = ticket_info['jsapi_ticket_expires_at']

    access_token_expires_at = time_bz.timestampToDateTime(access_token_expires_at)
    jsapi_ticket_expires_at = time_bz.timestampToDateTime(jsapi_ticket_expires_at)

    return wechat, access_token, access_token_expires_at, jsapi_ticket, jsapi_ticket_expires_at
コード例 #17
0
    def get_basic_obj(request):
        # type: (object) -> object
        """
        获取基本操作对象,access_token和access_token_expires_at从session中获取 
        :return: 
        """
        access_token = None
        access_token_expires_at = None
        token_id = None
        token_list = AccessToken.objects.order_by("-id")
        if token_list:
            old_token = token_list[0]
            access_token = old_token.token
            access_token_expires_at = old_token.expires
            token_id = old_token.id

        jsapi_ticket = None
        jsapi_ticket_expires_at = None
        ticket_id = None
        ticket_list = JsapiTicket.objects.order_by("-id")
        if ticket_list:
            old_ticket = ticket_list[0]
            jsapi_ticket = old_ticket.ticket
            jsapi_ticket_expires_at = old_ticket.expires
            ticket_id = old_ticket.id

        # 微信配置
        conf = WechatConf(
            token=settings.TOKEN,
            appid=settings.APPID,
            appsecret=settings.APPSECRET,
            encrypt_mode=settings.
            ENCRYPT_MODE,  # 可选项:normal/compatible/safe,分别对应于 明文/兼容/安全 模式
            encoding_aes_key=settings.
            ENCODING_AES_KEY,  # 如果传入此值则必须保证同时传入 token, appid
            access_token=access_token,
            access_token_expires_at=access_token_expires_at,
            jsapi_ticket=jsapi_ticket,
            jsapi_ticket_expires_at=jsapi_ticket_expires_at,
        )

        wechat = WechatBasic(conf=conf)
        access_token = wechat.get_access_token()
        print("current access_token:", access_token)
        # 将access_token重新更新到db
        new_token = AccessToken()
        new_token.token = access_token["access_token"]
        new_token.expires = access_token["access_token_expires_at"]
        if token_id:
            new_token.id = token_id
        new_token.save()

        jsapi_ticket = wechat.get_jsapi_ticket()
        print("current jsapi_ticket:", jsapi_ticket)
        # 将jsapi_ticket重新更新到db
        new_ticket = JsapiTicket()
        new_ticket.ticket = jsapi_ticket["jsapi_ticket"]
        new_ticket.expires = jsapi_ticket["jsapi_ticket_expires_at"]
        if ticket_id:
            new_ticket.id = ticket_id
        new_ticket.save()

        return wechat
コード例 #18
0
# 队列
celery = make_celery(app)

# 记录日志
handler = RotatingFileHandler('app.log', maxBytes=10000, backupCount=1)
handler.setFormatter(
    logging.Formatter('%(asctime)s %(levelname)s: %(message)s '
                      '[in %(pathname)s:%(lineno)d]'))
handler.setLevel(logging.WARNING)
app.logger.addHandler(handler)

# 初始第三方库
redis = Redis()

# 初始化微信 SDK
wechat = WechatBasic(appid=app.config['APP_ID'],
                     appsecret=app.config['APP_SECRET'],
                     token=app.config['TOKEN'])

if not redis.exists("wechat:access_token"):
    # access_token 写入缓存
    wechat.grant_jsapi_ticket()
    redis.set("wechat:access_token",
              wechat.get_access_token()['access_token'], 7000)

# 路由
from .routes import *
# 定时任务
from .plugins.cron import *
コード例 #19
0
# 队列
celery = make_celery(app)

# 记录日志
handler = RotatingFileHandler('app.log', maxBytes=10000, backupCount=1)
handler.setFormatter(logging.Formatter(
    '%(asctime)s %(levelname)s: %(message)s '
    '[in %(pathname)s:%(lineno)d]'
))
handler.setLevel(logging.WARNING)
app.logger.addHandler(handler)

# 初始第三方库
redis = Redis()

# 初始化微信 SDK
wechat = WechatBasic(appid=app.config['APP_ID'],
                     appsecret=app.config['APP_SECRET'],
                     token=app.config['TOKEN'])

if not redis.exists("wechat:access_token"):
    # access_token 写入缓存
    wechat.grant_jsapi_ticket()
    redis.set("wechat:access_token",
              wechat.get_access_token()['access_token'], 7000)

# 路由
from .routes import *
# 定时任务
from .plugins.cron import *
コード例 #20
0
ファイル: views.py プロジェクト: JoneSnow/GuoShop
from wechat_sdk import WechatBasic
from wechat_sdk.exceptions import ParseError
from wechat_sdk.messages import TextMessage, VoiceMessage, ImageMessage, VideoMessage, LinkMessage, LocationMessage, EventMessage

from .menu import create_menu
from GuoShop.settings import BASE_DIR
# Create your views here.

TOKEN = 'ygf'
AppID = 'wx99ab3b8f58db68be'
AppSecret = 'b84b99057fc5f2217581f9540468cb02'

#缓存access_token
if not cache.get('access_token') or not cache.get('access_token_expires_at'):
    wechat = WechatBasic(token=TOKEN, appid=AppID, appsecret=AppSecret)
    access_token_dit = wechat.get_access_token()
    access_token = access_token_dit.get('access_token', '')
    access_token_expires_at = access_token_dit.get('access_token_expires_at', '')
    cache.set('access_token', access_token, 7000)
    cache.set('access_token_expires_at', access_token_expires_at, 7000)

wechat = WechatBasic(token=TOKEN, appid=AppID, appsecret=AppSecret,
                     access_token=cache.get('access_token'),
                     access_token_expires_at=cache.get('access_token_expires_at'))


@csrf_exempt
def index(request):
    '''

    :param request:
コード例 #21
0
ファイル: access_token.py プロジェクト: qqqytyu/my_weixin
from wechat_sdk.exceptions import ParseError
from wechat_sdk.messages import TextMessage
import time
import fcntl
conf = WechatConf(
    token='weixin_langrensha',
    appid='wx40204f4d0ec2ea5a',
    appsecret='451bc8bf5e759c596256cade2e11e42d',
    encrypt_mode='normal',  # 可选项:normal/compatible/safe,分别对应于 明文/兼容/安全 模式
    encoding_aes_key=
    'qY71DJ7XdXsDWksumrazYMxf29gAKlopjOIB6n3pFV2'  # 如果传入此值则必须保证同时传入 token, appid
)
wechat = WechatBasic(conf=conf)  # 实例化 WechatBasic 官方接口类

while (True):
    access_token = wechat.get_access_token()
    f = open('AccessToken', 'w', encoding='utf-8')
    fcntl.flock(f, fcntl.LOCK_EX)
    f.write(access_token["access_token"] + '\n')
    f.write(str(access_token["access_token_expires_at"]))
    fcntl.flock(f, fcntl.LOCK_UN)
    #batch_get(access_token["access_token"] , 'image')
    f.close()
    time.sleep(3500)

# def batch_get(self, accessToken, mediaType, offset=0, count=10):
#     postUrl = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=%s" % accessToken
#     postData = '{ "type": "%s", "offset": %d, "count": %d }' % (mediaType, offset, count)
#     urlResp = urllib.request.urlopen(postUrl, postData.encode('utf-8'))
#     print(urlResp.read())
コード例 #22
0
ファイル: site.py プロジェクト: yyt030/quanduoduo
def interface():
    """初始化接入"""
    signature = str(request.args.get("signature"))
    timestamp = str(request.args.get('timestamp'))
    nonce = str(request.args.get('nonce'))
    echostr = request.args.get('echostr')
    if 'access_token' not in session:
        # 实例化 wechat
        access_token = None
        access_token_expires_at = None
        wechat = WechatBasic(appid=appid, appsecret=appsecret)
        token_dict = wechat.get_access_token()
        access_token = token_dict.get('access_token')
        if access_token:
            session['access_token'] = access_token
            session['access_token_expires_at'] = token_dict.get('access_token_expires_at')
    response = ""
    wechat = WechatBasic(token=token)
    # 对签名进行校验
    if wechat.check_signature(signature=signature, timestamp=timestamp, nonce=nonce):

        # 获取请求类型
        if request.method == 'POST':
            # 读取用户发送消息
            body_text = request.data
            print body_text
            wechat.parse_data(body_text)
            # 获得解析结果
            message = wechat.get_message()
            print "target_user,", message.target
            print "from_user,", message.source
            print "message_type:", message.type
            openid = message.source
            # print request.data
            # 用户发送文本消息
            if message.type == 'text':
                if message.content == 'test':
                    response = wechat.response_text(u'^_^')
                else:
                    response = wechat.response_text(u'您好!')
                if not g.user:
                    # 检查用户是否存在
                    user = User.query.filter(User.profile.any(Profile.openid == openid)).first()
                    if user is not None:
                        signin_user(user)
                        print u'新用户(%s)关注微信...' % user.name
                    else:
                        user = add_wechat_user_to_db(openid)
                    session['openid'] = openid
                else:
                    user = g.user
                message = WechatMessage(user_id=user.id, content=message.content)
                db.session.add(message)
                db.session.commit()
            # 用户发送图片消息
            elif message.type == 'image':
                response = wechat.response_text(u'图片')
            elif message.type == 'scan':
                if message.key and message.ticket:
                    # TODO 扫码回收优惠券,这里还要判断扫码的用户是否为该品牌店授权的店员
                    # TODO 考虑到还有绑定店员的扫码事件,key分为两种:11[brandid],12[discount_id]
                    logging.info(message.key[0:2])
                    logging.info(message.key[2])
                    if message.key[0:2] == '11':
                        brand_id = int(message.key[2:])
                        brand = Brand.query.get(brand_id)
                        if not brand:
                            response = wechat.response_text("要绑定的店铺不存在")
                        data = {"bid": brand_id}
                        url_text = current_app.config.get("SITE_DOMAIN") + "/check_saler_info" + "?" + urlencode(data)
                        brand_text = "<a href='{0}'>{1}</a>".format(url_text, brand.name)
                        print brand_text

                        text = "您正在申请绑定门店%s,点击输入手机号验证身份" % brand_text
                        response = wechat.response_text(text)
                    elif message.key[0:2] == '12':
                        record_id = int(message.key[2:])
                        ticket_record = GetTicketRecord.query.get(record_id)
                        logging.info("tid" + str(ticket_record.id))
                        # 判断扫码用户是否为该店铺的店员
                        discount_id = ticket_record.discount_id
                        discount = Discount.query.get(discount_id)
                        scan_user = User.query.filter(User.profile.any(Profile.openid == openid)).first()
                        salers = Saler.query.filter(Saler.user_id == scan_user.id)
                        if salers.count() > 0:
                            saler = salers.filter(Saler.brand_id == discount.brand_id).first()
                            if not saler:
                                brand = Brand.query.get(discount.brand_id)
                                tip = "您不是该店铺{0}的店员".format(brand.name)
                                response = wechat.response_text(tip)
                            else:
                                callback_ticket(record_id)
                                saler.count += 1
                                db.session.add(saler)
                                db.session.commit()
                                response = ""
                        else:
                            tip = "您还没有绑定该店铺"
                            response = wechat.response_text(tip)
            # 用户在关注微信时就将用户数据写入数据库
            elif message.type == 'subscribe':
                if message.key and message.ticket:
                    # TODO 扫码回收优惠券,这里还要判断扫码的用户是否为该品牌店授权的店员
                    # TODO 考虑到还有绑定店员的扫码事件,key分为两种:bind_[brandid],ticket_[code]
                    value = message.key.replace("qrscene_", "")
                    if value.split("_")[0] == 'ticket':
                        record_id = int(message.key.split("_")[1])
                        callback_ticket(record_id)
                        response = ""
                    elif value.split("_")[0] == 'bind':
                        brand_id = int(message.key.split("_")[1])
                        brand = Brand.query.get(brand_id)
                        data = {"bid": brand_id}
                        url_text = current_app.config.get("SITE_DOMAIN") + "/check_saler_info" + "?" + urlencode(data)
                        brand_text = "<a href='{0}'>{1}</a>".format(url_text, brand.name)
                        text = "您正在申请绑定门店%s,点击输入手机号验证身份" % brand_text
                        response = wechat.response_text(text)

                openid = message.source
                if not g.user:
                    # 检查用户是否存在
                    user = User.query.filter(User.profile.any(Profile.openid == openid)).first()
                    if user is None:
                        add_wechat_user_to_db(openid)
                        print u'新用户(%s)关注微信' % user.name

                response = wechat.response_text(u'欢迎关注汝州百事优惠圈')
            elif message.type == 'location':
                # 这里有location事件 TODO
                latitude, longitude, precision = message.latitude, message.longitude, message.precision
                print '-' * 10, latitude, longitude, precision, request.remote_addr
                session['latitude'] = latitude
                session['longitude'] = longitude
                session['precision'] = precision
                g.latitude = latitude
                g.longitude = longitude
                g.precision = precision

                return ""
            else:
                return ""

            return response
        else:
            return echostr
    else:

        return "error"
コード例 #23
0
ファイル: utils.py プロジェクト: ahDDD/wechatDemo
#coding=utf-8