先上效果图:

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

一 基础篇

1、新手接入:
http://mp.weixin.qq.com/wiki/index.php?title=接入指南须要注意的是URL必须是公网能訪问的,必须是80port。

刚才被80port郁闷了好久。文档中也没明白写。

文档最以下写着:“此外请注意。微信公众号接口仅仅支持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
调用接口时。server须要知道调用者身份。
但每次都提交AppID和AppSecret是不是有点傻。

server也麻烦。每次都要验证。
干脆server发良民证,检查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=验证消息真实性

怎么知道消息是从微信server传过来的呢?
和验证成开发人员时候一样的。

每次微信server请求url都会带signature、timestamp、nonce參数。
url所指向的web程序能够将timestamp、nonce加上token(保存在用户自己server上)算出一个字符串,和signature比較。

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

二、自己定义菜单

1、常识
"眼下自己定义菜单最多包括3个一级菜单,每一个一级菜单最多包括5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”取代。请注意。创建自定

义菜单后,因为微信client缓存,须要24小时微信client才会展现出来。建议測试时能够尝试取消关注公众账号后再次关注,则能够看到创建后的效果。"

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。
分别点了“关于我”和“关于作者”,自己server代码收到的消息是:
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

完事儿收工!

转载于:https://www.cnblogs.com/clnchanpin/p/6812945.html

微信公共开发人员文档 阅读笔记相关推荐

  1. Google开发人员文档样式指南

    为方便查看,使用Google翻译从 Google开发人员文档样式指南 搬运而来 一般原则 风格和作者的语气 https://developers.google.cn/style/tone 交谈而不轻浮 ...

  2. FreeRTOS官方指导文档阅读笔记

    FreeRTOS官方指导文档阅读笔记 基于 161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide.pdf,可 ...

  3. Qt文档阅读笔记-共享库的创建与调用

    使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...

  4. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图

    Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...

  5. Qt文档阅读笔记-Rotations Example相关

    Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...

  6. Blockly学习之文档阅读笔记

    文档阅读来源--谷歌官网介绍: https://developers.google.com/blockly/guides/overview 概述 一个用于Web.Android.iOS的可视化代码编辑 ...

  7. Java文档阅读笔记-EJB Tutorial

    目录 Introduction to EJB What is EJB Introduction to EJB EJB(Enterprise Java Bean)Java企业组建:用于开发分布式.健全. ...

  8. Leaflet文档阅读笔记-Quick Start Guide笔记

    目录 网络加载JS和CSS 初始化地图 在地图上做标记 在地图上点击事件获得坐标 个人对这篇文档的体会 网络加载JS和CSS 先要加载css,然后在加载js <link rel="st ...

  9. NiceScroll文档阅读笔记-NiceScroll(3.7.6)基本使用

    前言 官方已经给出很好的文档了.在此本人总结下,方便以后查阅: GitHub - inuyaksa/jquery.nicescroll: nicescroll plugin for jquery - ...

最新文章

  1. 睡眠声音识别中的准确率问题(三)--采集的音频测试结果及分析
  2. 分布式内存文件系统Alluxio
  3. eclipse中添加插件的方法
  4. STM32工作笔记0098---Windows下的Linux环境_Cygwin_MinGW_MSYS_MSYS2_之间的关系
  5. [JavaScript] DOM
  6. css 列表属性详细总结
  7. 关于二进制兼容(二进制边界)的解释
  8. 说说看:如何把自己的导师培养成杰青?
  9. 金蝶云系统服务器,金蝶云星空-文件服务器配置指南
  10. python名片系统_初识python-名片管理系统v1.0
  11. 如何获取Linux的主机名和域名?
  12. 游戏的初级体验,三围:视、听、触的展示
  13. Cocoa -- 添加和移除开机启动项
  14. 张远龙高性能服务器,荆楚匠人:张远龙巧手妙思 葫芦上绘出精彩人生
  15. 基于AM5728的OpenCL例程开发分享
  16. 渗透工具之CS4.0使用说明书
  17. 深入浅出神经网络与深度学习--神经元感知机单层神经网络介绍(-)
  18. 理解maven命令package、install、deploy的联系与区别
  19. 如何实现内网映射到公网?
  20. 高速PCB设计中的对阻抗匹配的理解

热门文章

  1. Visual Basic编程常见问题及解答(2)
  2. 买不起房怕什么,本田说自动驾驶房车才是未来趋势
  3. 这是云代驾,不是打游戏
  4. 下载安装 Ubuntu 19.04 “Disco Dingo”
  5. 『并发包入坑指北』之向大佬汇报任务
  6. ubuntu18.04server 真机无法自动获取IP解决方法
  7. 中国人寿如何基于容器搭建金融PaaS云平台
  8. 性能优化之页面缓存(以Javascript方式缓存页面部件)
  9. Unity3D中的线性插值Lerp()函数解析
  10. HTTP之一:http协议简介(3)