美文网首页让前端飞Android开发经验谈Android知识
测试号+新浪云+python微信公众平台开发入门

测试号+新浪云+python微信公众平台开发入门

作者: Evelynzzz | 来源:发表于2017-10-09 19:30 被阅读1163次

    为了了解微信公众平台开发,着手做了一个公众号的demo,主要实现:自定制菜单栏,点击菜单中的选项打开对应的web页面。

    因为还没有注册开发者帐号,于是先注册了微信公众平台测试号(支持微信公众平台所有接口)。然后使用新浪云服务(短时间内免费,适合初学者练手)作为服务器。

    申请微信公众平台测试账号

    浏览器中打开链接,http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login。扫码登录之后,网页会列出测试号的appIDappsecret以及测试号的二维码等信息。

    扫描测试号的二维码就可以关注测试的公众号了,用户列表中会显示已关注这个公众号的用户。

    测试号二维码和用户列表

    新浪云服务器

    1. 前往http://sae.sina.com.cn 注册新浪云账号。(邮箱和安全密码在之后使用Git时会用到。)

    2. 用户中心中创建“云应用SAE”。选择python以及git。填写域名(在公众号设置中会用到)。

      新浪云新建云应用SAE
    3. 创建版本。到应用>代码管理中可以查看应用并且创建版本。创建之后如下图所示,就可以编辑代码,上传代码包了。在应用管理中可以看到应用对应的网址。

      创建版本
      应用信息
    4. 点击“编辑代码”打开SAE CLOUD EDTOR。项目下默认只有一个文件index.wsgi

    5. 按照代码管理中的git仓库信息,把项目克隆到本地(使用新浪云账号的邮箱和安全密码),运行python index.wsgi 80命令。再打开上面配置的网址 http://testwechatapp.applinzi.com/ ,可以看到"Hello, SAE!",说明是OK了。

    配置公众平台开发账号

    index.wsgi文件:

    #coding: UTF-8
    import sae
    import web
    
    from handle import Handle
    
    urls = (
    '/wx','Handle'
    )
    
    app = web.application(urls, globals()).wsgifunc()        
    application = sae.create_wsgi_app(app)
    
    

    handle.py文件:

    # -*- coding: utf-8 -*-
    # filename: handle.py
    
    import hashlib
    import web
    
    class Handle(object):
        def GET(self):
            try:
                data = web.input()
                if len(data) == 0:
                    return "hello, this is handle view"
                signature = data.signature
                timestamp = data.timestamp
                nonce = data.nonce
                echostr = data.echostr
                token = "hello2017" #跟公众平台开发账号的基本配置中的token相同
    
                list = [token, timestamp, nonce]
                list.sort()
                sha1 = hashlib.sha1()
                map(sha1.update, list)
                hashcode = sha1.hexdigest()
                print "handle/GET func: hashcode, signature: ", hashcode, signature
                if hashcode == signature:
                    return echostr
                else:
                    return ""
    
            except Exception, Argument:
                return Argument
    

    再次运行python index.wsgi 80命令,访问
    http://testwechatapp.applinzi.com/wx 页面,显示“hello, this is handle view”的信息表示成功。

    接下来配置公众平台开发账号,填写服务器url,并自定义一个token,用于访问服务器时的验证。注意这个token跟服务器中设置的token相同,url中的/wx对应index.wsgi代码中的urls的值。再点击“提交”按钮,配置成功会有提示信息。

    token配置成功

    制作菜单栏

    新建basic.py:

    # -*- coding: utf-8 -*-
    # filename: 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 = "wxf9427dc053581219"
            appSecret = "e3fbcfe5921fd508cf621668879ab15a"
    
            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())
            
            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()
    

    新建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":
            [
                {
                    "name": "更多信息",
                    "sub_button":
                    [
                        {
                            "type": "view",
                            "name": "百度一下",
                            "url": "http://www.baidu.cn/"            
                    ]
                },
              ]
        }
    
        """
        accessToken = Basic().get_access_token()
        #myMenu.delete(accessToken)
        myMenu.create(postJson, accessToken)
    

    运行python menu.py 80命令之后,重新关注公众号。可以看到自定义的菜单栏。点击就可以打开页面了。

    公众号菜单栏

    参考链接:

    相关文章

      网友评论

        本文标题:测试号+新浪云+python微信公众平台开发入门

        本文链接:https://www.haomeiwen.com/subject/crcpyxtx.html