예제 #1
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
예제 #2
0
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
예제 #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
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
예제 #5
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
    '''
    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
예제 #6
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
예제 #7
0
def get_jsapi_ticket():
    ticket = cache.get(TICKET_KEY)
    expired_at = cache.get(TICKET_EXPIRED_AT_KEY)
    if ticket:
        return ticket, expired_at

    token, expired_at = get_access_token()
    b = WechatBasic(
        appid=settings.app_id, appsecret=settings.secret, access_token=token, access_token_expires_at=expired_at
    )

    print "get_ticket at:", datetime.datetime.now()
    d = b.get_jsapi_ticket()

    ticket = d["jsapi_ticket"]
    expired_at = d["jsapi_ticket_expires_at"]

    cache.set(TICKET_KEY, ticket, (expired_at - time.time()) * 60)
    cache.set(TICKET_EXPIRED_AT_KEY, expired_at, (expired_at - time.time()) * 60)
    return ticket, expired_at
예제 #8
0
파일: auth.py 프로젝트: daixm/wechat-admin
def get_jsapi_ticket():
    ticket = cache.get(TICKET_KEY)
    expired_at = cache.get(TICKET_EXPIRED_AT_KEY)
    if ticket:
        return ticket, expired_at

    token, expired_at = get_access_token()
    b = WechatBasic(
        appid=settings.APP_ID,
        appsecret=settings.SECRET,
        access_token=token,
        access_token_expires_at=expired_at)

    print 'get_ticket at:', datetime.datetime.now()
    d = b.get_jsapi_ticket()

    ticket = d['jsapi_ticket']
    expired_at = d['jsapi_ticket_expires_at']

    cache.set(TICKET_KEY, ticket, int(expired_at - time.time())*60)
    cache.set(TICKET_EXPIRED_AT_KEY, expired_at, int(expired_at - time.time())*60)
    return ticket, expired_at
예제 #9
0
def get_jsapi_ticket():
    ticket = cache.get(TICKET_KEY)
    expired_at = cache.get(TICKET_EXPIRED_AT_KEY)
    if ticket:
        return ticket, expired_at

    token, expired_at = get_access_token()
    b = WechatBasic(appid=settings.APP_ID,
                    appsecret=settings.SECRET,
                    access_token=token,
                    access_token_expires_at=expired_at)

    print 'get_ticket at:', datetime.datetime.now()
    d = b.get_jsapi_ticket()

    ticket = d['jsapi_ticket']
    expired_at = d['jsapi_ticket_expires_at']

    cache.set(TICKET_KEY, ticket, (expired_at - time.time()) * 60)
    cache.set(TICKET_EXPIRED_AT_KEY, expired_at,
              (expired_at - time.time()) * 60)
    return ticket, expired_at
예제 #10
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
예제 #11
0
파일: wx.py 프로젝트: bluedazzle/ooil
class WeChatService(object):
    def __init__(self, app_id=None, app_secret=None):
        self.redis = redis.StrictRedis(host='localhost', port=6379, db=2)
        self.app_id = app_id
        self.app_secret = app_secret
        if not app_id:
            self.wechat_admin = Area.objects.all().order_by('id')[0]
            self.wechat = WechatBasic(appid=self.wechat_admin.wx_app_id,
                                      appsecret=self.wechat_admin.wx_secret,
                                      token='123')
            self.app_id = self.wechat_admin.app_id
            self.app_secret = self.wechat_admin.app_secret
        else:
        self.wechat_admin = None
        self.wechat = WechatBasic(appid=app_id, appsecret=app_secret, token='123')

        self.get_token()

    def get_token(self):
        key = 'access_token_{0}'.format(self.app_id)
        token = self.redis.get(key)
        if not token:
            res = self.wechat.grant_token()
            token = res.get('access_token')
            self.redis.set(key, token, 3500)
        return token

    def get_js_ticket(self):
        key = 'js_ticket_{0}'.format(self.app_id)
        ticket = self.redis.get(key)
        if not ticket or ticket == 'None':
            res = self.wechat.get_jsapi_ticket()
            ticket = res.get('jsapi_ticket')
            self.redis.set(key, ticket, 3500)
        return ticket

    def get_random_str(self):
        return string.join(
            random.sample('ZYXWVUTSRQPONMLKJIHGFEDCBA1234567890zyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcba',
                          32)).replace(" ", "")

    def get_js_signature(self, url):
        timestamp = int(time.time())
        nostr = self.get_random_str()
        ticket = self.get_js_ticket()
        signature = self.wechat.generate_jsapi_signature(timestamp, nostr, url, ticket)
        return {'timestamp': timestamp, 'ticket': ticket, 'noncestr': nostr, 'url': url, 'signature': signature}

    def send_message(self, open_id, message):
        token = self.get_token()
        req_url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}'.format(token)
        message = message.decode('utf-8')
        data = {'touser': open_id,
                'msgtype': 'text',
                'text': {'content': str('测试')}}
        result = requests.post(req_url, data=simplejson.dumps(data))
        return json.loads(result.content)


if __name__ == '__main__':
    ws = WeChatService('wx53a0bb66744d6ff8', '72714e74ea52de8a0917111bb7b4b324')
    print ws.get_js_signature('http://www.rapospectre.com')
예제 #12
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