Home

Awesome

微信公众平台后台框架

Build Status

微信公众平台 后台框架,基于sinatra,使用DSL的思想帮助你以最快的速度开启微信公众平台开发.

仅需3步,一个文件创建一个微信后台程序

  1. 安装Gem

     gem install 'wei-backend'
    
  2. 创建微信后台主程序app.rb, 内容如下:

     require 'sinatra'
     require 'wei-backend'
     
     token "mytoken"
     
     on_text do
     	"你发送了如下内容: #{params[:Content]}!!"
     end
     	
     on_subscribe do
     	"感谢您的订阅"
     end
     	
     on_unsubscribe do
     	"欢迎您再次订阅"
     end
    
  3. 启动

     ruby app.rb		
    

模拟微信请求测试

微信的每一个请求都会带上3个参数,timestamp时间戳, nonce随机数以及signature由token和前两个参数生成的值。因此,模拟测试需要生成token对应的signature:

export TIMESTAMP=1388674716
export NONCE=1388564676
export TOKEN=mytoken
export SIGNATURE=$(ruby -e 'require "digest/sha1"; puts Digest::SHA1.hexdigest [ENV["TIMESTAMP"], ENV["NONCE"], ENV["TOKEN"]].sort!.join')
curl -H 'Content-type:text/xml' -d@- "localhost:4567/weixin?signature=$SIGNATURE&timestamp=$TIMESTAMP&nonce=$NONCE" << EOF
	<xml>
	 <ToUserName><![CDATA[toUser]]></ToUserName>
	 <FromUserName><![CDATA[fromUser]]></FromUserName> 
	 <CreateTime>1348831860</CreateTime>
	 <MsgType><![CDATA[text]]></MsgType>
	 <Content><![CDATA[This is a text message]]></Content>
	 <MsgId>1234567890123456</MsgId>
	</xml>
EOF

将会得到一段xml返回值,表示一切OK:

<xml>
	<ToUserName><![CDATA[fromUser]]></ToUserName>
	<FromUserName><![CDATA[toUser]]></FromUserName>
	<CreateTime><![CDATA[1386522760]]></CreateTime>
	<MsgType><![CDATA[text]]></MsgType>
	<Content><![CDATA[你发送了如下内容: This is a text message!!]]></Content>
</xml>

与微信接口兼容情况:

接口说明:

各个接口只能定义一次,重复定义会覆盖之前定义的接口

用来配置你在微信公众平台设置的token,token的作用是用来的验证微信的请求是否合法。请确保你的token和微信公众平台设置的token一致。

当用户向微信公众发送消息的时候,微信会POST一段XML到公众号的后台服务器,on_text方法中定义的代码会处理这个请求,这on_text方法中可以访问到的请求参数:

* `params[:ToUserName]`: 发送请求的用户
* `params[:FromUserName]`: 公众号用户
* `params[:CreateTime]`: 创建时间
* `params[:MsgType]`: 消息类型,在这里是text
* `params[:Content]`: 消息内容

当用户关注时,处理消息的接口:

* `params[:ToUserName]`: 发送请求的用户
* `params[:FromUserName]`: 公众号用户
* `params[:CreateTime]`: 创建时间
* `params[:MsgType]`: 消息类型,在这里是event
* `params[:Event]`: 事件类型,_**subscribe**_

当用户取消关注时,处理消息的接口:

* `params[:ToUserName]`: 发送请求的用户
* `params[:FromUserName]`: 公众号用户
* `params[:CreateTime]`: 创建时间
* `params[:MsgType]`: 消息类型,在这里是event
* `params[:Event]`: 事件类型,_**unsubscribe**_

当用户向微信公众号分享位置信息时,微信会POST相应的位置信息到公众号后台服务器 * params[:ToUserName]: 发送请求的用户 * params[:FromUserName]: 公众号用户 * params[:CreateTime]: 创建时间 * params[:MsgType]: 消息类型,在这里是location * params[:Location_X]: 地理位置纬度 * params[:Location_Y]: 地理位置经度 * params[:Scale]: 地图缩放大小 * params[:Label]: 地理位置信息

返回消息

Liscense

© 2014 Wang Chao. This code is distributed under the MIT license.