Beispiel #1
0
 def uploadimg(self,
               media_file=None,
               media_file_path=None,
               appid=None,
               secret=None,
               token=None,
               storage=None,
               forcard=False):
     media_file = media_file or open(media_file_path, 'rb')
     files = {
         'buffer': media_file,
     } if forcard else {
         'media': media_file,
     }
     return self.post(
         self.WECHAT_MEDIA_UPLOADIMG,
         params={
             'access_token':
             final_access_token(self,
                                appid=appid,
                                secret=secret,
                                token=token,
                                storage=storage),
         },
         files=files,
     )
Beispiel #2
0
 def get_blacks(self,
                appid=None,
                secret=None,
                token=None,
                storage=None,
                begin_openid=''):
     """
     {
         "total": 2,
         "count": 2,
         "data": {
             "openid": ["OPENID1", "OPENID2"]
         },
         "next_openid": "NEXT_OPENID"
     }
     """
     return self.post(
         self.WECHAT_TAGS_MEMBERS_GETBLACKLIST.
         format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'begin_openid': begin_openid,
         },
     )
Beispiel #3
0
 def send_wxa_subscribe_template_message(self,
                                         user_id,
                                         template_id,
                                         data,
                                         page=None,
                                         miniprogram_state=None,
                                         lang=None,
                                         appid=None,
                                         secret=None,
                                         token=None,
                                         storage=None):
     return self.post(
         self.WECHAT_SEND_WXA_SUBSCRIBE_TEMPLATE_MESSAGE,
         params={
             'access_token':
             final_access_token(self,
                                appid=appid,
                                secret=secret,
                                token=token,
                                storage=storage),
         },
         data={
             'touser': user_id,
             'template_id': template_id,
             'page': page,
             'miniprogram_state': miniprogram_state,
             'lang': lang,
             'data': data,
         },
     )
Beispiel #4
0
 def update(self, data, appid=None, secret=None, token=None, storage=None):
     return self.post(
         self.WECHAT_CARD_UPDATE.format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data=data,
     )
Beispiel #5
0
 def get_tag_users(self,
                   tagid,
                   appid=None,
                   secret=None,
                   token=None,
                   storage=None,
                   next_openid=''):
     """
     {
         "count": 2,
         "data": {
             "openid": ["OPENID1", "OPENID2"]
         },
         "next_openid": "NEXT_OPENID"
     }
     """
     return self.post(
         self.WECHAT_USER_TAG_GET.format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'tagid': tagid,
             'next_openid': next_openid,
         },
     )
Beispiel #6
0
 def get_wxa_code(self,
                  path,
                  width=430,
                  auto_color=False,
                  line_color={
                      'r': '0',
                      'g': '0',
                      'b': '0'
                  },
                  is_hyaline=False,
                  appid=None,
                  secret=None,
                  token=None,
                  storage=None,
                  res_to_base64=True,
                  data_uri_scheme=True):
     res = self.post(
         self.GET_WXA_CODE.format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'path': path,
             'width': width,
             'auto_color': auto_color,
             'line_color': line_color,
             'is_hyaline': is_hyaline,
         },
         res_to_json=False)
     if not res_to_base64:
         return res
     return '{0}{1}'.format(
         'data:image/{0};base64,'.format(
             res.headers.get('Content-Type', '').split('/')[-1] or 'jpeg')
         if data_uri_scheme else '', base64.b64encode(res.content))
Beispiel #7
0
 def batchget_user_info(self,
                        users,
                        appid=None,
                        secret=None,
                        token=None,
                        storage=None):
     """
     {
         "user_list": [
             {
                 "openid": "otvxTs4dckWG7imySrJd6jSi0CWE",
                 "lang": "zh_CN"
             },
             {
                 "openid": "otvxTs_JZ6SEiP0imdhpi50fuSZg",
                 "lang": "zh_CN"
             }
         ]
     }
     """
     return self.post(
         self.WECHAT_USER_INFO_BATCHGET.
         format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'user_list': users,
         },
     )
Beispiel #8
0
 def tags_get(self, appid=None, secret=None, token=None, storage=None):
     return self.get(self.WECHAT_TAGS_GET,
                     access_token=final_access_token(self,
                                                     appid=appid,
                                                     secret=secret,
                                                     token=token,
                                                     storage=storage))
Beispiel #9
0
    def create(self, action_name='QR_SCENE', scene_id=0, scene_str='', expire_seconds=2592000, appid=None, secret=None, token=None, storage=None, qrurl=False, qrdata=False, useurl=False):
        """
        ``action_name`` 二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值,QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值
        ``scene_id``场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)
        ``scene_str``场景值ID(字符串形式的ID),字符串类型,长度限制为1到64
        ``expire_seconds`` 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。
        """
        if action_name == 'QR_SCENE':
            data = {
                'expire_seconds': expire_seconds,
                'action_name': action_name,
                'action_info': {
                    'scene': {
                        'scene_id': scene_id
                    }
                }
            }
        elif action_name == 'QR_STR_SCENE':
            data = {
                'expire_seconds': expire_seconds,
                'action_name': action_name,
                'action_info': {
                    'scene': {
                        'scene_str': scene_str
                    }
                }
            }
        elif action_name == 'QR_LIMIT_SCENE':
            data = {
                'action_name': action_name,
                'action_info': {
                    'scene': {
                        'scene_id': scene_id
                    }
                }
            }
        elif action_name == 'QR_LIMIT_STR_SCENE':
            data = {
                'action_name': action_name,
                'action_info': {
                    'scene': {
                        'scene_str': scene_str
                    }
                }
            }

        qrinfo = self.post(
            self.WECHAT_QRCODE_CREATE,
            params={
                'access_token': final_access_token(self, appid=appid, secret=secret, token=token, storage=storage),
            },
            data=data
        )
        if 'ticket' not in qrinfo:
            return qrinfo
        if qrurl:
            return qrinfo.get('url') if useurl else self.showurl(qrinfo.get('ticket'))
        if qrdata:
            return self.download(qrinfo.get('ticket'))
        return qrinfo
Beispiel #10
0
 def upload(self,
            media_type='image',
            media_file=None,
            media_file_path=None,
            appid=None,
            secret=None,
            token=None,
            storage=None):
     """
     :param media_type: 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
     :param media_file: 要上传的文件,一个 File-object
     """
     return self.post(
         self.WECHAT_MEDIA_UPLOAD,
         params={
             'access_token':
             final_access_token(self,
                                appid=appid,
                                secret=secret,
                                token=token,
                                storage=storage),
             'type':
             media_type,
         },
         files={
             'media': media_file or open(media_file_path, 'rb'),
         },
     )
Beispiel #11
0
 def add_conditional(self, menus, appid=None, secret=None, token=None, storage=None):
     return self.post(
         self.WECHAT_MENU_ADDCONDITIONAL,
         params={
             'access_token': final_access_token(self, appid=appid, secret=secret, token=token, storage=storage),
         },
         data=menus,
     )
Beispiel #12
0
 def create_menu(self, menus, appid=None, secret=None, token=None, storage=None):
     return self.post(
         self.WECHAT_MENU_CREATE,
         params={
             'access_token': final_access_token(self, appid=appid, secret=secret, token=token, storage=storage),
         },
         data=menus,
     )
Beispiel #13
0
 def get_all_users(self, appid=None, secret=None, token=None, storage=None, users_func=None, authorizer_appid=None):
     goon = True
     next_openid = ''
     while goon:
         get_user_infos = self.get(self.WECHAT_USER_GET, access_token=final_access_token(self, appid=appid, secret=secret, token=token, storage=storage), next_openid=next_openid)
         if users_func:
             users_func(authorizer_appid, get_user_infos)
         if get_user_infos.get('count') < 10000:
             goon = False
         next_openid = get_user_infos.get('next_openid', '')
Beispiel #14
0
 def try_match(self, user_id, appid=None, secret=None, token=None, storage=None):
     return self.post(
         self.WECHAT_MENU_TRYMATCH,
         params={
             'access_token': final_access_token(self, appid=appid, secret=secret, token=token, storage=storage),
         },
         data={
             'user_id': user_id,
         },
     )
Beispiel #15
0
 def del_conditional(self, menuid, appid=None, secret=None, token=None, storage=None):
     return self.post(
         self.WECHAT_MENU_DELCONDITIONAL,
         params={
             'access_token': final_access_token(self, appid=appid, secret=secret, token=token, storage=storage),
         },
         data={
             'menuid': menuid,
         },
     )
Beispiel #16
0
 def send_custom_message(self, data, account=None, appid=None, secret=None, token=None, storage=None):
     if account:
         data['customservice'] = {'kf_account': account}
     return self.post(
         self.WECHAT_CUSTOM_MESSAGE_SEND,
         params={
             'access_token': final_access_token(self, appid=appid, secret=secret, token=token, storage=storage),
         },
         data=data,
     )
Beispiel #17
0
 def custom_typing(self, openid=None, typing=True, appid=None, secret=None, token=None, storage=None):
     return self.post(
         self.WECHAT_CUSTOM_TYPING,
         params={
             'access_token': final_access_token(self, appid=appid, secret=secret, token=token, storage=storage),
         },
         data={
             'touser': openid,
             'command': 'Typing' if typing else 'CancelTyping',
         },
     )
Beispiel #18
0
 def upload_headimg(self, kf_account, media_file=None, media_file_path=None, appid=None, secret=None, token=None, storage=None):
     return self.post(
         self.WECHAT_CUSTOM_DEL_KFACCOUNT,
         params={
             'access_token': final_access_token(self, appid=appid, secret=secret, token=token, storage=storage),
             'kf_account': kf_account,
         },
         files={
             'media': media_file or open(media_file_path, 'rb'),
         },
     )
Beispiel #19
0
 def get_users(self, appid=None, secret=None, token=None, storage=None, next_openid=''):
     """
     {
         "total": 2,
         "count": 2,
         "data": {
             "openid": ["OPENID1", "OPENID2"]
         },
         "next_openid": "NEXT_OPENID"
     }
     """
     return self.get(self.WECHAT_USER_GET, access_token=final_access_token(self, appid=appid, secret=secret, token=token, storage=storage), next_openid=next_openid)
Beispiel #20
0
 def del_kfaccount(self, kf_account, nickname, password, appid=None, secret=None, token=None, storage=None):
     return self.post(
         self.WECHAT_CUSTOM_DEL_KFACCOUNT,
         params={
             'access_token': final_access_token(self, appid=appid, secret=secret, token=token, storage=storage),
         },
         data={
             'kf_account': kf_account,
             'nickname': nickname,
             'password': password,
         },
     )
Beispiel #21
0
 def tags_getidlist(self,
                    openid,
                    appid=None,
                    secret=None,
                    token=None,
                    storage=None):
     return self.post(
         self.WECHAT_TAGS_GETIDLIST.format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'openid': openid,
         },
     )
Beispiel #22
0
 def uploadimg(self, media_file=None, media_file_path=None, appid=None, secret=None, token=None, storage=None, forcard=False):
     media_file = media_file or open(media_file_path, 'rb')
     files = {
         'buffer': media_file,
     } if forcard else {
         'media': media_file,
     }
     return self.post(
         self.WECHAT_MEDIA_UPLOADIMG,
         params={
             'access_token': final_access_token(self, appid=appid, secret=secret, token=token, storage=storage),
         },
         files=files,
     )
Beispiel #23
0
 def mambers_batchunblacklist(self,
                              openids,
                              appid=None,
                              secret=None,
                              token=None,
                              storage=None):
     return self.post(
         self.WECHAT_TAGS_MEMBERS_BATCHUNBLACKLIST.
         format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'openid_list': openids,
         },
     )
Beispiel #24
0
 def downloadurl(self,
                 media_id,
                 hd=False,
                 appid=None,
                 secret=None,
                 token=None,
                 storage=None):
     return self.geturl(
         self.WECHAT_MEDIA_GET_JSSDK if hd else self.WECHAT_MEDIA_GET,
         access_token=final_access_token(self,
                                         appid=appid,
                                         secret=secret,
                                         token=token,
                                         storage=storage),
         media_id=media_id)
Beispiel #25
0
 def upload(self, media_type='image', media_file=None, media_file_path=None, appid=None, secret=None, token=None, storage=None):
     """
     :param media_type: 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
     :param media_file: 要上传的文件,一个 File-object
     """
     return self.post(
         self.WECHAT_MEDIA_UPLOAD,
         params={
             'access_token': final_access_token(self, appid=appid, secret=secret, token=token, storage=storage),
             'type': media_type,
         },
         files={
             'media': media_file or open(media_file_path, 'rb'),
         },
     )
Beispiel #26
0
 def msg_sec_check(self,
                   content,
                   appid=None,
                   secret=None,
                   token=None,
                   storage=None,
                   res_bool_val=False):
     res = self.post(
         self.WECHAT_MSG_SEC_CHECK.format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'content': content,
         },
     )
     return res.get('errcode') == 0 if res_bool_val else res
Beispiel #27
0
 def tags_delete(self,
                 tagid,
                 appid=None,
                 secret=None,
                 token=None,
                 storage=None):
     return self.post(
         self.WECHAT_TAGS_DELETE.format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'tag': {
                 'id': tagid,
             },
         },
     )
Beispiel #28
0
 def img_sec_check(self,
                   media_file=None,
                   media_file_path=None,
                   appid=None,
                   secret=None,
                   token=None,
                   storage=None,
                   res_bool_val=False):
     res = self.post(
         self.WECHAT_IMG_SEC_CHECK.format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         files={
             'media': media_file or open(media_file_path, 'rb'),
         },
     )
     return res.get('errcode') == 0 if res_bool_val else res
Beispiel #29
0
 def members_batchuntagging(self,
                            tagid,
                            openids,
                            appid=None,
                            secret=None,
                            token=None,
                            storage=None):
     return self.post(
         self.WECHAT_TAGS_MEMBERS_BATCHUNTAGGING.
         format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'tagid': tagid,
             'openids': openids,
         },
     )
Beispiel #30
0
    def test_token_mem(self):
        appid = WECHAT.get('JSAPI', {}).get('appID')
        appsecret = WECHAT.get('JSAPI', {}).get('appsecret')

        token = Token(appid=appid, secret=appsecret)
        access_token1 = token.access_token()
        assert isinstance(access_token1, basestring)

        access_token2 = access_token(appid=appid, secret=appsecret)
        assert isinstance(access_token2, basestring)

        access_token3 = final_access_token(cls=token,
                                           appid=appid,
                                           secret=appsecret)
        assert isinstance(access_token3, basestring)

        assert access_token1 == access_token3 != access_token2
Beispiel #31
0
 def get_user_info(self,
                   openid,
                   lang='zh_CN',
                   appid=None,
                   secret=None,
                   token=None,
                   storage=None):
     """
     :param lang: 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
     """
     return self.get(self.WECHAT_USER_INFO,
                     access_token=final_access_token(self,
                                                     appid=appid,
                                                     secret=secret,
                                                     token=token,
                                                     storage=storage),
                     openid=openid,
                     lang=lang)
Beispiel #32
0
 def tags_create(self,
                 name,
                 appid=None,
                 secret=None,
                 token=None,
                 storage=None):
     """
     :param name: 标签名(30个字符以内)
     """
     return self.post(
         self.WECHAT_TAGS_CREATE.format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'tag': {
                 'name': name[:30],
             },
         },
     )
Beispiel #33
0
 def media_check_async(self,
                       media_url=None,
                       media_type=None,
                       appid=None,
                       secret=None,
                       token=None,
                       storage=None,
                       res_bool_val=False):
     res = self.post(
         self.WECHAT_MEDIA_CHECK_ASYNC.
         format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'media_url': media_url,
             'media_type': media_type,
         },
     )
     return res.get('errcode') == 0 if res_bool_val else res
Beispiel #34
0
 def update_remark(self,
                   openid,
                   remark,
                   appid=None,
                   secret=None,
                   token=None,
                   storage=None):
     """
     :param remark: 新的备注名,长度必须小于30字符
     """
     return self.post(
         self.WECHAT_USER_INFO_UPDATE_REMARK.
         format(access_token=final_access_token(
             self, appid=appid, secret=secret, token=token,
             storage=storage)),
         data={
             'openid': openid,
             'remark': remark[:30],
         },
     )
Beispiel #35
0
 def downloadurl(self, media_id, hd=False, appid=None, secret=None, token=None, storage=None):
     return self.geturl(self.WECHAT_MEDIA_GET_JSSDK if hd else self.WECHAT_MEDIA_GET, access_token=final_access_token(self, appid=appid, secret=secret, token=token, storage=storage), media_id=media_id)