## 微信公众平台后台框架 [![Build Status](https://travis-ci.org/charleyw/weChat-backend.png?branch=master)](https://travis-ci.org/charleyw/weChat-backend) 微信公众平台 后台框架,基于sinatra,使用DSL的思想帮助你以最快的**速度**开启微信公众平台开发. ## 仅需3步,一个文件创建一个微信后台程序 1. 安装Gem gem install 'wei-backend' 1. 创建微信后台主程序**app.rb**, 内容如下: require 'sinatra' require 'wei-backend' on_text do "你发送了如下内容: #{params[:Content]}!!" end on_subscribe do "感谢您的订阅" end on_unsubscribe do "欢迎您再次订阅" end 1. 启动 ruby app.rb ## 与微信接口兼容情况: * 现在可以处理的消息类型(被动接受用户消息类型): | 消息类型 | 接口 | | ------------ | ------------- | | 文本消息 | on_text | | 订阅事件 | on_subscribe | | 取消订阅事件 | on_unsubscribe | | 用户被动分享地理位置 | on_location | 后续还会加入消息类型支持 * 可以发送的消息类型: | 消息类型 | 格式 | | ------------ | ------------- | | 文本消息 | ruby 字符串 | | 图文事件 | ruby hash值 | ## 如何使用 * 创建一个文件,如app.rb,写入如下内容: require ‘sinatra’ require 'wei-backend' on_text do "Received a text message: #{params[:Content]}!!, and send back a text message!" end * 启动 ruby app.rb * 测试 ``` curl -H 'Content-type:text/xml' -d@- localhost:4567 << EOF 1348831860 1234567890123456 EOF ``` 将会得到一段text返回值,一切OK: ``` ``` ## 接口说明: 各个接口只能定义一次,重复定义会覆盖之前定义的接口 * ### on_text 当用户向微信公众发送消息的时候,微信会POST一段XML到公众号的后台服务器,`on_text`方法中定义的代码会处理这个请求,这`on_text`方法中可以访问到的请求参数: * `params[:ToUserName]`: 发送请求的用户 * `params[:FromUserName]`: 公众号用户 * `params[:CreateTime]`: 创建时间 * `params[:MsgType]`: 消息类型,在这里是text * `params[:Content]`: 消息内容 * ### on_subscribe 当用户关注时,处理消息的接口: * `params[:ToUserName]`: 发送请求的用户 * `params[:FromUserName]`: 公众号用户 * `params[:CreateTime]`: 创建时间 * `params[:MsgType]`: 消息类型,在这里是event * `params[:Event]`: 事件类型,_**subscribe**_ * ### on_unsubscribe 当用户取消关注时,处理消息的接口: * `params[:ToUserName]`: 发送请求的用户 * `params[:FromUserName]`: 公众号用户 * `params[:CreateTime]`: 创建时间 * `params[:MsgType]`: 消息类型,在这里是event * `params[:Event]`: 事件类型,_**unsubscribe**_ * ### on_location 当用户向微信公众号分享位置信息时,微信会POST相应的位置信息到公众号后台服务器 * `params[:ToUserName]`: 发送请求的用户 * `params[:FromUserName]`: 公众号用户 * `params[:CreateTime]`: 创建时间 * `params[:MsgType]`: 消息类型,在这里是location * `params[:Location_X]`: 地理位置纬度 * `params[:Location_Y]`: 地理位置经度 * `params[:Scale]`: 地图缩放大小 * `params[:Label]`: 地理位置信息 ## 返回消息 * 返回文本消息: on_text do "Received a text message: #{params[:Content]}!!, and send back a text message!" end * 返回图文消息 on_text do [{ :title => '收到一个文本消息,返回两个图文消息', :description => 'desc', :picture_url => 'pic url', :url => 'url' }, { :title => '这是第二个图文消息', :description => 'desc1', :picture_url => 'pic url1', :url => 'url1' }] end ## Liscense © 2013 Wang Chao. This code is distributed under the MIT license. [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/charleyw/wechat-backend/trend.png)](https://bitdeli.com/free "Bitdeli Badge")