当前位置: 首页 > news >正文

微信公众号开发

近日摸索了公众号的开发流程特记录下来,以供大家参考。

    首先最重要的是你的有一个公众号,具体怎么申请这里就不赘述了。嘿嘿,其实开发调试的时候可以使用临时的调试公众号,这样即使没有公众号也可以进行开发调试了。具体方法如下:打开http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login。 然后用自己的微信扫一下,确认即可。系统会自动给你生成一个测试公众号,有简单的管理功能。测试账号.png

 

当然你也可以直接在公众号上进行开发调试。登陆公众号平台后,在左侧菜单底部,选择开发者中心,配置服务器信息(同测试账号)。如需加密可以设置秘钥,需注意,公众账号主动调用API的情况将不受影响。只有被动回复用户的消息时,才需要进行消息加解密。参考:http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html

blob.png

 

1、服务端认证

添加服务器URL后,微信服务器会向你的公众号服务器发送一个认证请求。比如你的微信服务URL是:http://10.10.10.10/wx。微信服务器会发起一个get请求,http://10.10.10.10/wx/?signature=c4b6bed68f55e7bd09e2771674a1989619716054&echostr=3942832202382810879&timestamp=1441531611&nonce=1839804127。公众号服务器校验流程入。

1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,如果相同则校验通过

校验通过后,返回echostr参数的内容给微信服务器,完成认证。

服务端PHP代码参考:http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html。

nodeJS代码参考:http://my.oschina.net/fengcunhan/blog/97367

通过认证后,才能完成服务器的配置。

 

2、消息接收和自动回复

当用户向公众号发送消息时,微信服务器会自动讲消息转发到公众号服务器,发起一个post请求到http://10.10.10.10/wx。消息为xml字符串形式上传到服务器。公众号服务器解析出xml字符串中的消息类型,发送用户,以及发送的消息等信息。然后返回一个xml形式的字符串。API参考:http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html

PHP使用$GLOBALS["HTTP_RAW_POST_DATA"]获取消息内容。

nodejs无法自己获取,需要执行读取操作:

1
2
3
4
5
6
7
  var  formData= "" ;
      req.on( "data" , function (data){
      formData+=data;
      });
      req.on( "end" , function (){
      processMessage(formData,res);
      });

 

3、通过API创建菜单

首先向微信服务器发起一个get请求:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

获取到access_token,然后发起创建菜单请求。POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

菜单信息以json格式封装。参考:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html

相关文章:

  • 快排
  • PHP——大话PHP设计模式——PSR-0规范
  • oracle EBS dba SQL scripts
  • Fundamental Components Of An Event-Driven Archi...
  • 移动周报:十款最实用的Android UI设计工具
  • implicit declaration of function 'copy_from_user'
  • 灯标技术--向服务器发送信息而不需要服务器返回信息
  • 虚基类虚继承
  • 导出无法正常启动的VMware虚拟机中的文件
  • CentOS 下的邮件通知
  • Linux内核--usb子系统的分析
  • 安装db2 提示不是有效的win32应用程序?
  • 建站须知
  • Java中如何实现类似C++结构体的二级排序
  • 防暴力破解 Fail2Ban之python
  • bearychat的java client
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6系统学习----从Apollo Client看解构赋值
  • golang中接口赋值与方法集
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JS字符串转数字方法总结
  • linux安装openssl、swoole等扩展的具体步骤
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Otto开发初探——微服务依赖管理新利器
  • PHP CLI应用的调试原理
  • session共享问题解决方案
  • tensorflow学习笔记3——MNIST应用篇
  • 关于springcloud Gateway中的限流
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 我这样减少了26.5M Java内存!
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 学习HTTP相关知识笔记
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​批处理文件中的errorlevel用法
  • ![CDATA[ ]] 是什么东东
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #{}和${}的区别?
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (003)SlickEdit Unity的补全
  • (03)光刻——半导体电路的绘制
  • (13)Hive调优——动态分区导致的小文件问题
  • (day 12)JavaScript学习笔记(数组3)
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (论文阅读40-45)图像描述1
  • (三)c52学习之旅-点亮LED灯
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)负载均衡,回话保持,cookie
  • .bat批处理(二):%0 %1——给批处理脚本传递参数