• python 开发微信 自定义菜单


    1.再次重复说明,下面代码只是为了简单说明接口获取方式。实际中并不推荐,尤其是业务繁重的公众号,更需要中控服务器,统一的获取accessToken。

    vim basic.py
    #name: basic.py
    import urllib
    import time
    import json
    class Basic:
             def __init__(self):
                  self.__accessToken = ''
                  self.__leftTime = 0
             def __real_get_access_token(self):
                  appId = ""
                  appSecret = ""
                  postUrl = ("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s" % (appId, appSecret))
                  urlResp = urllib.urlopen(postUrl)
                  urlResp = json.loads(urlResp.read())
                  print urlResp
                  self.__accessToken = urlResp['access_token']
                  self.__leftTime = urlResp['expires_in']
             def get_access_token(self):
                  if self.__leftTime < 10:
                        self.__real_get_access_token()
                        return self.__accessToken
             def run(self):
                  while(True):
                      if self.__leftTime > 10:
                           time.sleep(2)
                           self.__leftTime -= 2
                      else:
                           self.__real_get_access_token()

    2.自定义菜单
    自定义菜单意义作用请参考官方wiki 介绍。

    目标:三个菜单栏,体验click、view、media_id 三种类型的菜单按钮,其他类型在本小节学习之后,自行请查询公众平台wiki说明领悟。


    2.1 创建菜单界面
    1)根据公众平台wiki 给的json 数据编写代码,其中涉及media_id部分请阅读"永久素材"章节。vim menu.py

    # -*- coding: utf-8 -*-
    # filename: menu.py
    import urllib
    from basic import Basic
    
    class Menu(object):
        def __init__(self):
            pass
        def create(self, postData, accessToken):
            postUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=%s" % accessToken
            if isinstance(postData, unicode):
                postData = postData.encode('utf-8')
            urlResp = urllib.urlopen(url=postUrl, data=postData)
            print urlResp.read()
    
        def query(self, accessToken):
            postUrl = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=%s" % accessToken
            urlResp = urllib.urlopen(url=postUrl)
            print urlResp.read()
    
        def delete(self, accessToken):
            postUrl = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=%s" % accessToken
            urlResp = urllib.urlopen(url=postUrl)
            print urlResp.read()
    
        #获取自定义菜单配置接口
        def get_current_selfmenu_info(self, accessToken):
            postUrl = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=%s" % accessToken
            urlResp = urllib.urlopen(url=postUrl)
            print urlResp.read()
    
    if __name__ == '__main__':
        myMenu = Menu()
        postJson = """
        {
            "button":
            [
                {
                    "type": "click",
                    "name": "开发指引",
                    "key":  "mpGuide"
                },
                {
                    "name": "公众平台",
                    "sub_button":
                    [
                        {
                            "type": "view",
                            "name": "更新公告",
                            "url": "http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1418702138&token=&lang=zh_CN"
                        },
                        {
                            "type": "view",
                            "name": "接口权限说明",
                            "url": "http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1418702138&token=&lang=zh_CN"
                        },
                        {
                            "type": "view",
                            "name": "返回码说明",
                            "url": "http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433747234&token=&lang=zh_CN"
                        }
                    ]
                },
                {
                    "type": "media_id",
                    "name": "旅行",
                    "media_id": "z2zOokJvlzCXXNhSjF46gdx6rSghwX2xOD5GUV9nbX4"
                }
              ]
        }
        """
        accessToken = Basic().get_access_token()
        #myMenu.delete(accessToken)
        myMenu.create(postJson, accessToken)

    2)在腾讯云服务器上执行命令:python menu.py。

  • 相关阅读:
    bzoj1103[POI2007]大都市meg
    bzoj1098[POI2007]办公楼biu
    bzoj1102[POI2007]山峰和山谷Grz
    POI刷题记录
    语法-指针
    dp-最长公共子序列
    如何判断素数
    C++的map用法
    stl-优先队列
    C++和Java的stack语法
  • 原文地址:https://www.cnblogs.com/yu-hailong/p/8312833.html
Copyright © 2020-2023  润新知