123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- # -*- coding: utf-8 -*-
- from __future__ import absolute_import, unicode_literals
- from optionaldict import optionaldict
- from library.wechatpy.client.api.base import BaseWeChatAPI
- class WeChatWxa(BaseWeChatAPI):
- API_BASE_URL = 'https://api.weixin.qq.com/'
- def create_qrcode(self, path, width=430):
- """
- 创建小程序二维码(接口C:适用于需要的码数量较少的业务场景)
- 详情请参考
- https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html
- """
- return self._post(
- 'cgi-bin/wxaapp/createwxaqrcode',
- data={
- 'path': path,
- 'width': width
- }
- )
- def get_wxa_code(self,
- path,
- width=430,
- auto_color=False,
- line_color={"r": "0", "g": "0", "b": "0"},
- is_hyaline=False):
- """
- 创建小程序码(接口A: 适用于需要的码数量较少的业务场景)
- 详情请参考
- https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html
- """
- return self._post(
- 'wxa/getwxacode',
- data={
- 'path': path,
- 'width': width,
- 'auto_color': auto_color,
- 'line_color': line_color,
- 'is_hyaline': is_hyaline,
- }
- )
- def get_wxa_code_unlimited(self,
- scene,
- width=430,
- auto_color=False,
- line_color={"r": "0", "g": "0", "b": "0"},
- page=None,
- is_hyaline=False):
- """
- 创建小程序码(接口B:适用于需要的码数量极多,或仅临时使用的业务场景)
- 详情请参考
- https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html
- """
- return self._post(
- 'wxa/getwxacodeunlimit',
- data=optionaldict(
- scene=scene,
- page=page,
- width=width,
- auto_color=auto_color,
- line_color=line_color,
- is_hyaline=is_hyaline,
- )
- )
- def send_template_message(self, user_id, template_id, data, form_id, page=None, color=None, emphasis_keyword=None):
- """
- 发送模板消息
- 详情请参考
- https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html
- """
- tpl_data = optionaldict(
- touser=user_id,
- template_id=template_id,
- page=page,
- form_id=form_id,
- data=data,
- color=color,
- emphasis_keyword=emphasis_keyword,
- )
- return self._post(
- 'cgi-bin/message/wxopen/template/send',
- data=tpl_data
- )
- def modify_domain(self, action, request_domain=(), wsrequest_domain=(), upload_domain=(), download_domain=()):
- """
- 修改小程序服务器授权域名
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489138143_WPbOO
- :param action: 增删改查的操作类型,仅支持 'add', 'delete', 'set', 'get'
- :param request_domain: request 合法域名
- :param wsrequest_domain: socket 合法域名
- :param upload_domain: upload file 合法域名
- :param download_domain: download file 合法域名
- """
- return self._post(
- 'wxa/modify_domain',
- data={
- 'action': action,
- 'requestdomain': request_domain,
- 'wsrequestdomain': wsrequest_domain,
- 'uploaddomain': upload_domain,
- 'downloaddomain': download_domain,
- }
- )
- def bind_tester(self, wechat_id):
- """
- 绑定微信用户成为小程序体验者
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489140588_nVUgx
- :param wechat_id: 微信号
- """
- return self._post(
- 'wxa/bind_tester',
- data={
- 'wechatid': wechat_id,
- }
- )
- def unbind_tester(self, wechat_id):
- """
- 解除绑定小程序的体验者
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489140588_nVUgx
- :param wechat_id: 微信号
- """
- return self._post(
- 'wxa/unbind_tester',
- data={
- 'wechatid': wechat_id,
- }
- )
- def commit(self, template_id, ext_json, version, description):
- """
- 为授权的小程序账号上传小程序代码
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489140610_Uavc4
- :param template_id: 代码库中的代码模板 ID
- :param ext_json: 第三方自定义的配置
- :param version: 代码版本号,开发者可自定义
- :param description: 代码描述,开发者可自定义
- """
- return self._post(
- 'wxa/commit',
- data={
- 'template_id': template_id,
- 'ext_json': ext_json,
- 'user_version': version,
- 'user_desc': description,
- },
- )
- def get_qrcode(self):
- """
- 获取体验小程序的体验二维码
- 返回 Response 类型,header 中带有 Content-Type 与 Content-disposition 类型
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489140610_Uavc4
- :rtype: requests.Response
- """
- return self._get('wxa/get_qrcode')
- def get_category(self):
- """
- 获取授权小程序账号的可选类目
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489140610_Uavc4
- :rtype: list[dict]
- """
- return self._get(
- 'wxa/get_category',
- result_processor=lambda x: x['category_list'],
- )
- def get_page(self):
- """
- 获取小程序的第三方提交代码的页面配置
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489140610_Uavc4
- :rtype: list
- """
- return self._get(
- 'wxa/get_page',
- result_processor=lambda x: x['page_list'],
- )
- def submit_audit(self, item_list):
- """
- 将第三方提交的代码包提交审核
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489140610_Uavc4
- :param item_list: 提交审核项的一个列表(至少填写1项,至多填写5项)
- :type item_list: list[dict]
- :return: 审核编号
- :rtype: int
- """
- return self._post(
- 'wxa/submit_audit',
- data={
- 'item_list': item_list,
- },
- result_processor=lambda x: x['auditid'],
- )
- def get_audit_status(self, auditid):
- """
- 查询某个指定版本的审核状态
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489140610_Uavc4
- :param auditid: 审核编号
- :type auditid: int
- :return: 一个包含 status, reason 的 dict。status 0为审核成功,1为审核失败,2为审核中。
- """
- return self._post(
- 'wxa/get_auditstatus',
- data={
- 'auditid': auditid,
- },
- )
- def get_latest_audit_status(self):
- """
- 查询最近一次提交的审核状态
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489140610_Uavc4
- :return: 一个包含 status, reason, auditid 的 dict。status 0为审核成功,1为审核失败,2为审核中。
- """
- return self._get(
- 'wxa/get_latest_auditstatus'
- )
- def release(self):
- """
- 发布已通过审核的小程序
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489140610_Uavc4
- """
- return self._post(
- 'wxa/release',
- data={},
- )
- def change_visit_status(self, close=False):
- """
- 修改小程序线上代码的可见状态
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1489140610_Uavc4
- :param close: close 为 True 时会关闭小程序线上代码的可见状态。
- :type close: bool
- """
- return self._post(
- 'wxa/change_visitstatus',
- data={
- 'action': 'close' if close else 'open',
- },
- )
- def list_library_templates(self, offset=0, count=20):
- """
- 获取小程序模板库里,所有模板的ID与标题
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1500465446_j4CgR
- :param offset: 用于分页,表示起始量,最小值为0
- :type offset: int
- :param count: 用于分页,表示拉取数量,最大值为20
- :type count: int
- :return: 带有 total_count 与 list 的数据
- :rtype: dict
- """
- return self._post(
- 'cgi-bin/wxopen/template/library/list',
- data={
- 'offset': offset,
- 'count': count,
- },
- )
- def get_library_template(self, template_short_id):
- """
- 获取小程序模板库里,某个模板的详细信息
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1500465446_j4CgR
- :param template_short_id: 模板标题ID
- :rtype: dict
- """
- return self._post(
- 'cgi-bin/wxopen/template/library/get',
- data={
- 'id': template_short_id,
- },
- )
- def list_templates(self, offset=0, count=20):
- """
- 获取本账号内所有模板
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1500465446_j4CgR
- :param offset: 用于分页,表示起始量,最小值为0
- :type offset: int
- :param count: 用于分页,表示拉取数量,最大值为20
- :type count: int
- :return: 模板列表
- :rtype: list[dict]
- """
- return self._post(
- 'cgi-bin/wxopen/template/list',
- data={
- 'offset': offset,
- 'count': count,
- },
- result_processor=lambda x: x['list'],
- )
- def add_template(self, template_short_id, keyword_id_list):
- """
- 组合模板,并将其添加至账号下的模板列表里
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1500465446_j4CgR
- :param template_short_id: 模板标题ID
- :param keyword_id_list: 按照顺序排列的模板关键词列表,最多10个
- :type keyword_id_list: list[int]
- :return: 模板ID
- """
- return self._post(
- 'cgi-bin/wxopen/template/add',
- data={
- 'id': template_short_id,
- 'keyword_id_list': keyword_id_list,
- },
- result_processor=lambda x: x['template_id'],
- )
- def del_template(self, template_id):
- """
- 删除本账号内某个模板
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1500465446_j4CgR
- :param template_id: 模板ID
- """
- return self._post(
- 'cgi-bin/wxopen/template/del',
- data={
- 'template_id': template_id,
- },
- )
- def create_open(self, appid):
- """
- 创建开放平台账号,并绑定公众号/小程序
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1498704199_1bcax
- :param appid: 授权公众号或小程序的 appid
- :return: 开放平台的 appid
- """
- return self._post(
- 'cgi-bin/open/create',
- data={
- 'appid': appid,
- },
- result_processor=lambda x: x['open_appid'],
- )
- def get_open(self, appid):
- """
- 获取公众号/小程序所绑定的开放平台账号
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1498704199_1bcax
- :param appid: 授权公众号或小程序的 appid
- :return: 开放平台的 appid
- """
- return self._post(
- 'cgi-bin/open/get',
- data={
- 'appid': appid,
- },
- result_processor=lambda x: x['open_appid'],
- )
- def bind_open(self, appid, open_appid):
- """
- 将公众号/小程序绑定到开放平台帐号下
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1498704199_1bcax
- :param appid: 授权公众号或小程序的 appid
- :param open_appid: 开放平台帐号 appid
- """
- return self._post(
- 'cgi-bin/open/bind',
- data={
- 'appid': appid,
- 'open_appid': open_appid,
- }
- )
- def unbind_open(self, appid, open_appid):
- """
- 将公众号/小程序绑定到开放平台帐号下
- 详情请参考
- https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&id=open1498704199_1bcax
- :param appid: 授权公众号或小程序的 appid
- :param open_appid: 开放平台帐号 appid
- """
- return self._post(
- 'cgi-bin/open/unbind',
- data={
- 'appid': appid,
- 'open_appid': open_appid,
- }
- )
- def code_to_session(self, js_code):
- """
- 登录凭证校验。通过 wx.login() 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。更多使用方法详见 小程序登录
- 详情请参考
- https://developers.weixin.qq.com/miniprogram/dev/api/code2Session.html
- :param js_code:
- :return:
- """
- return self._get(
- 'sns/jscode2session',
- params={
- 'appid': self.appid,
- 'secret': self.secret,
- 'js_code': js_code,
- 'grant_type': 'authorization_code'
- }
- )
|