微信公共开发者文档 阅读笔记

先上效果图:

    作者博客:http://blog.csdn.net/stationxp
    作者微博:http://weibo.com/liuhailong2008
    转载请取得作者同意  

一 基础篇

1、新手接入:

http://mp.weixin.qq.com/wiki/index.php?title=接入指南需要注意的是URL必须是公网能访问的,必须是80端口。

刚才被80端口郁闷了好久,文档中也没明确写。

文档最下面写着:“此外请注意,微信公众号接口只支持80接口”。好吧,是我人品问题。

2、典型案例介绍

http://mp.weixin.qq.com/wiki/index.php?title=典型案例介绍

自定义菜单很酷,如果没有自定义菜单,纯靠写程序响应客户输入,那需要深厚的自然语言处理能力。

需要绑定客户身份,可能是手机号,可能跳转到一个页面绑定。

问题:每次得到的OpenID一样吗?

如果跳转到另一个页面,可以把OpenID隐藏在get中传过去。然后存在隐藏表单域中,你懂的。

3、开发者规范

http://mp.weixin.qq.com/wiki/index.php?title=开发者规范

模板消息和用户数据方面的规范。

“请勿为任何用户自动登录到微信公众平台提供代理身份验证凭据”意思是让每个人用自己的身份凭据。

可以为他人提供身份凭据吗?

“请勿自动将浏览器窗口定向到其他网页”哪个浏览器窗口?

“完整的开发者规范和接口限制,请详见开发者接口文档”

开发者接口文档在哪里?

4、调用接口频率限制

http://mp.weixin.qq.com/wiki/index.php?title=接口频率限制说明

5、调试接口

https://mp.weixin.qq.com/debug/

6、access_token

调用接口时,服务器需要知道调用者身份。

但每次都提交AppID和AppSecret是不是有点傻。服务器也麻烦,每次都要验证。

干脆服务器发良民证,检查AppID和AppSecret没问题就发一个,可以用12分钟。

在这12分钟内,只要检查良民证就可以了。

200 OK
Server: nginx/1.4.4
ConDate: Wed, 07
Content-Type
{
    "access_token": "35r3_cicy-CtwRrK0RoPmt13OIX_WXSxJI1Yd_s5wPghVJ7RU2V8STmH7fcAmD6S",
    "expires_in": 7200
}

7、上传下载多媒体文件

http://mp.weixin.qq.com/wiki/index.php?title=上传下载多媒体文件

200 OK
Content-Length: 118
Date: Wed,
{
    "type": "image",
    "media_id": "DPlBG0Txb3HYzwI4OfJCj9G9ozURJOTVd2W4qAMt5LNMGSc5vy07b2qAHvj_-wJx",
    "created_at": 1399478362
}

请求地址:

http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=35r3_cicy-CtwRrK0RoPmt13OIX_WXSxJI1Yd_s5wPghVJ7RU2V8STmH7fcAmD6S&type=image

"media_id": "Gmr7w0G_4uMxH0PgLF2yQDRjiQSHSFlpWxeuCxIgY9wGf5giBbqemqBX2V9Gddqi"

要自己写Web管理界面?

curl是什么工具?

下载文件,在线调试没通过。报错JSON数据格式不正确。

8、验证消息真实性

http://mp.weixin.qq.com/wiki/index.php?title=验证消息真实性

怎么知道消息是从微信服务器传过来的呢?

和验证成开发者时候一样的。

每次微信服务器请求url都会带signature、timestamp、nonce参数。

url所指向的web程序可以将timestamp、nonce加上token(保存在用户自己服务器上)算出一个字符串,和signature比较。

学习一下微信API的设计,还是不错的。

二、自定义菜单

1、常识

"目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。请注意,创建自定

义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。"

2、菜单相应类型

有click和view两种。定义菜单时,click的同时定义key,view的同时定义url。

3、如何创建菜单

{
  "button":[
     {"type":"click", "name":"关于我","key":"BTN_ABOUT_USER" },
     {"name":"我的伙伴",  "sub_button":[
            {"type":"view","name":"胡磊磊", "url":"http://chaoshi.cgdmc.com/wx/person/hulei.php" },
            {"type":"view","name":"魏超超", "url":"http://chaoshi.cgdmc.com/wx/person/weichao.php"  },
            {"type":"view","name":"雷达达","url":"http://chaoshi.cgdmc.com/wx/person/leida.php"}
 ]
      },
     {"type":"click","name":"关于作者", "key":"BTN_ABOUT_ME"}
   ]
 }

请求地址:

https://api.weixin.qq.com/cgi-bin/menu/create?access_token=xx

返回结果:

200 OK
Content-Length: 27
Date: Wed, 07
Content-Typ
{
    "errcode": 0,
    "errmsg": "ok"
}

4、如何查询现有菜单:(这个有意义吗?自己做一个管理平台?)

200 OK
chaoshi.cgdmc.com: nginx/1.4.4
Con
Date: Wed, 07
Content-Typ
{
    "menu": {
        "button": [
            {
                "type": "click",
                "name": "关于我",
                "key": "BTN_ABOUT_USER",
                "sub_button": [ ]
            },
            {
                "name": "我的伙伴",
                "sub_button": [
                    {
                        "type": "view",
                        "name": "胡磊磊",
                        "url": "http://chaoshi.cgdmc.com/wx/person/hulei.php",
                        "sub_button": [ ]
                    },
                    {
                        "type": "view",
                        "name": "魏超超",
                        "url": "http://chaoshi.cgdmc.com/wx/person/weichao.php",
                        "sub_button": [ ]
                    },
                    {
                        "type": "view",
                        "name": "雷达达",
                        "url": "http://chaoshi.cgdmc.com/wx/person/leida.php",
                        "sub_button": [ ]
                    }
                ]
            },
            {
                "type": "click",
                "name": "关于作者",
                "key": "BTN_ABOUT_ME",
                "sub_button": [ ]
            }
        ]
    }
}

5、自定义菜单删除的话,只能全删

已有的情况下,再次添加,是否就是更新?

试了一下,是的。

6、菜单事件的处理

http://mp.weixin.qq.com/wiki/index.php?title=自定义菜单事件推送

type为view的不需要写代码支持。

只来看type为click的。

需要得到Event和EventKey。

分别点了“关于我”和“关于作者”,自己服务器代码收到的消息是:

gh_xxxxxxxxx(公共平台微信号)

xxxx-0 (用户OpenID)

1399481134

event

CLICK

BTN_ABOUT_USER

gh_xxxxxxxxx(公共平台微信号)

xxxx-0 (用户OpenID)

1399481140

event

CLICK

BTN_ABOUT_ME

程序代码里,

if( 'BTN_ABOUT_ME'.equals(eventKey) ){
    response.setMsgType("text");
    response.setContent("我是刘海龙,围脖地址:\nweibo.com/liuhailong2008\n亲,加关注呦!");
}

按照规矩,处理消息前,应该先验证一下。记得不,亲,签名就是干这个用的。

三、 获取用户信息

1、获取用户信息

https://api.weixin.qq.com/cgi-bin/user/info?access_token=tP2ttoAfStr8-1j2QzmNVcuw0wCy_bv5ZPVw2gygKptiwAVm2JN_eo0CpdH1EMeh&openid=oai_Ejvay12_FjT0fWWwc4gSe7-0

返回结果:

200 OK
Server: nginx/1.4.4
Con
Date: Wed, 07
Content-Typ
{
    "subscribe": 1,
    "openid": "oai_xxxe7-0",
    "nickname": "刘海龙",
    "sex": 1,
    "language": "zh_CN",
    "city": "保定",
    "province": "河北",
    "country": "中国",
    "headimgurl": "http://wx.qlogo.cn/mmopen/ezjZug0fpibxah7nkiaYLMgg7RnS0NPHFlt7Yg6BbPTTmq1B1rfI4DCIPofibTcYHnyqMAcr2cyp76A79MCoKicpbQ/0",
    "subscribe_time": 1399480903
}

程序调用返回:

1
oai_EjvxxxWWwc4gSe7-0
刘海龙
1
zh_CN
保定
河北
中国
http://wx.qlogo.cn/mmopen/ezjZug0fpibxah7nkiaYLMgg7RnS0NPHFlt7Yg6BbPTTmq1B1rfI4DCIPofibTcYHnyqMAcr2cyp76A79MCoKicpbQ/0
1399480903
oai_Ejvay12_FjT0fWWwc4gSe7-0
gh_3d3203deb07d
1399482736

完事儿收工!

时间: 2024-11-06 18:04:25

微信公共开发者文档 阅读笔记的相关文章

Git帮助文档阅读笔记----第二章-第五节---打标签

本节我们一起来学习如何列出所有可用的标签,如何新建标签,以及各种不同类型标签之间的差别. 列显已有的标签 直接运行 git tag 即可: 可以用特定的搜索模式列出符合条件的标签.在 Git 自身项目仓库中,有着超过 240 个标签,如果你只对 1.4.2 系列的版本感兴趣,可以运行下面的命令: $ git tag -l 'v1.4.2.*' v1.4.2.1 v1.4.2.2 v1.4.2.3 v1.4.2.4 新建标签 轻量级的(lightweight) 含附注的(annotated)(建议

蓝牙4.0核心文档阅读笔记

一.蓝牙技术介绍 蓝牙无线通讯包括两种模式:基础模式(BR, Basic Rate)和低功耗模式(LE, Low Energy). 蓝牙系统包括一个Host和多个Controllers,Host包括在HCI(Host Controller Interface)与应用程序之间,Controller指HCI以下的层.典型的BLE(Bluetooth Low Energy)协议栈结构如下图所示. 二.低功耗蓝牙4.0(BLE)概述 BLE具有两种多路通信方式:频分多址(FDMA,Frequency d

Git帮助文档阅读笔记----第二章

记录每次更新到仓库 工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪 文件的状态变化周期 检查当前文件状态 要确定哪些文件当前处于什么状态,可以用 git status 命令 $ git status 如果当前工作目录中添加了新文件,会显示为未跟踪状态 $ vim README $ git status On branch master Untracked files: (use "git add <file>..." to include in what will

Git帮助文档阅读笔记----第二章-第二节

查看提交历史 1.查看提交历史 git log 默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面 git log 有许多选项可以帮助你搜寻感兴趣的提交 1.  -p选项展开显示每次提交的内容差异 2.  -2显示最近的两次更新 该选项除了显示基本信息之外,还在附带了每次 commit 的变化.当进行代码审查,或者快速浏览某个搭档提交的 commit 的变化的时候,这个参数就非常有用了. 某些时候,单词层面的对比,比行层面的对比,更加容易观察.Git 提供了 

Git帮助文档阅读笔记----第二章-第四--节远程仓库的使用

管理这些远程仓库,以便推送或拉取数据 添加远程库 移除废弃的远程库 管理各式远程库分支 定义是否跟踪分支 查看当前的远程库 可以用 git remote 命令,它会列出每个远程库的简短名字 也可以加上 -v 选项(译注:此为 --verbose 的简写,取首字母),显示对应的克隆地址: 如果有多个远程仓库,此命令将全部列出.比如在我的 Grit 项目中,可以看到: 添加远程仓库 要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname

Git帮助文档阅读笔记----第二章-第三节

撤消操作 1.修改最后一次提交 有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了.想要撤消刚才的提交操作,可以使用 --amend 选项重新提交: $ git commit --amend 直接运行此命令的话,相当于有机会重新编辑提交说明,但将要提交的文件快照和之前的一样. 如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交 $ git commit -m 'initial commit' $ git add forgotten_file $ g

Resin文档阅读笔记

阅读文档对应的版本为Resin4.0,且基本只关注Standard版本的功能. 1.Resin可以注册为服务: To install the service, use C:/> resin-3.2.x/resin.exe -install -conf conf/myconf.xml / -user MyResinUser -password mypassword To remove the service, use C:/> resin-3.2.x/resin.exe -remove 2.Re

mongodb官网文档阅读笔记:write concern

write concern保证了mongodb写操作的级别,不同的write concern设置对应了不同级别的写操作,设置的级别越高,那么写操作的性能的持久化做得越好,但是写性能也就越差.mongodb默认采用 Acknowledged的write concern级别,这也是安全性最高的级别. 在 Acknowledged级别的副本集模式下,mongodb可在客户端设置一个wtimeout值,如果在规定的时间内无法完成这个写操作就返回一个错误,即使它最终可能能够完成. Write Concer

Python 3.6文档阅读笔记

2017.4.21 argument A value passed to a function (or method) when calling the function. There are two kinds of argument: Arguments are assigned to the named local variables in a function body. See the Calls section for the rules governing this assignm