wei-backend 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 89c1731dc45e222e2af055b01d36d25ad34cfa71
4
- data.tar.gz: 0d958cec757c981191d472fc29aebdac9bc42c43
3
+ metadata.gz: c3f0021088d9e698689cd29d21e80aaff92c7471
4
+ data.tar.gz: 93e01ff4fde62445cef476919c502f9759374d03
5
5
  SHA512:
6
- metadata.gz: bd00720f925a9843733ac78cd680b55c2846a6d9d72555d7a3e7e40b814cb12ae468494bdb37c7d8eec5d177bd137e4b8f5db04ada1fa247616ec6be3dd34f16
7
- data.tar.gz: 8c680f884c42ab2c0840bb53ef53b093566f95dbb2d761aacae32755c7ac9f2cfa8c93cf6989b0c81be0a506cb03402626413c27cae3f685f887a6724d8a623f
6
+ metadata.gz: 4b2177cd5fa8259c5c344fcdae4e94c343d6cd3253e1ddcbe64b83f04d515be5e43cef3fcb64d90dec24acc0a6b708b374c3392b93d874d1e4bfbcdea32988a4
7
+ data.tar.gz: 20dbec32ec7eea7d8b0d45d3d7e6ce8a09f4f52d3aa398fd5c56e4cd85550e1fa715ff7204eaa144b1812ec11e619909e836b0c91555591395c2cae2406bf0fd
data/README.md CHANGED
@@ -1,23 +1,84 @@
1
1
  微信公众平台后台框架
2
2
  ========
3
- ## Ruby version:
4
- **ruby-2.0.0-p247**
3
+ ## 如何安装:
4
+ * ### 使用bundler
5
+ 将`wei-backend`添加到`Gemfile`里:
6
+
7
+ gem 'wei-backend'
5
8
 
6
- 可以使用[rvm](http://rvm.io)安装:
9
+ * ### 使用`gem`直接安装:
7
10
 
8
- rvm install ruby-2.0.0-p247
11
+ gem install wei-backend
12
+
13
+ ## 如何使用
14
+ * 创建一个文件,如app.js,写入如下内容:
15
+
16
+ require ‘sinatra’
17
+ require 'wei-backend'
18
+
19
+ on_text do
20
+ "Received a text message: #{params[:Content]}!!, and send back a text message!"
21
+ end
9
22
 
10
- ## 如何定制
11
23
  * 启动
12
24
 
13
- git clone https://github.com/charleyw/weixin-sinatra.git
14
- bundle install
15
- rake dev:start
16
- * 所有的业务逻辑可以查看`lib/wei_xin_request_handler`
25
+ ruby app.rb
26
+ * 测试
27
+
28
+ ```
29
+ curl -H 'Content-type:text/xml' -d@- localhost:4567 << EOF
30
+ <xml>
31
+ <ToUserName><![CDATA[toUser]]></ToUserName>
32
+ <FromUserName><![CDATA[fromUser]]></FromUserName>
33
+ <CreateTime>1348831860</CreateTime>
34
+ <MsgType><![CDATA[text]]></MsgType>
35
+ <Content><![CDATA[This is a text message]]></Content>
36
+ <MsgId>1234567890123456</MsgId>
37
+ </xml>
38
+ EOF
39
+
40
+ ```
41
+
42
+ 将会得到一段text返回值,一切OK:
43
+
44
+ ```
45
+ <xml>
46
+ <ToUserName><![CDATA[fromUser]]></ToUserName>
47
+ <FromUserName><![CDATA[toUser]]></FromUserName>
48
+ <CreateTime><![CDATA[1386522760]]></CreateTime>
49
+ <MsgType><![CDATA[text]]></MsgType>
50
+ <Content><![CDATA[Received a text message: This is a text message!!, and send back a text message!]]></Content>
51
+ </xml>
52
+
53
+ ```
54
+
55
+ ## 接口说明:
56
+
57
+ 1. ### on_text
58
+ 当用户向微信公众发送消息的时候,微信会POST一段XML到公众号的后台服务器,`on_text`方法中定义的代码会处理这个请求,这`on_text`方法中可以访问到的请求参数:
59
+
60
+ * `params[:ToUserName]`: 发送请求的用户
61
+ * `params[:FromUserName]`: 公众号用户
62
+ * `params[:CreateTime]`: 创建时间
63
+ * `params[:MsgType]`: 消息类型,在这里是text
64
+ * `params[:Content]`: 消息内容
65
+
66
+ 1. ### on_event
67
+ 处理微信发送过来的event请求:
68
+
69
+ * `params[:ToUserName]`: 发送请求的用户
70
+ * `params[:FromUserName]`: 公众号用户
71
+ * `params[:CreateTime]`: 创建时间
72
+ * `params[:MsgType]`: 消息类型,在这里是event
73
+ * `params[:Event]`: 消息内容,如_**subscribe**_, _**unsubscribe**_
17
74
 
18
- 访问`http://localhost:9393?echostr=test`,页面会显示**echostr**的值
19
75
 
20
- ## 如何部署
21
- git clone https://github.com/charleyw/weixin-sinatra.git
22
- bundle install
23
- rake prod:start
76
+ 1. ### on_location
77
+ 当用户想微信公众号分享位置信息时,微信会POST相应的位置信息到公众号后台服务器
78
+ * `params[:ToUserName]`: 发送请求的用户
79
+ * `params[:FromUserName]`: 公众号用户
80
+ * `params[:CreateTime]`: 创建时间
81
+ * `params[:MsgType]`: 消息类型,在这里是location
82
+ * `params[:Latitude]`: 地理位置纬度
83
+ * `params[:Longitude]`: 地理位置经度 * `params[:Precision]`: 地理位置精度
84
+
@@ -8,6 +8,10 @@ module WeiBackend
8
8
  create_model results
9
9
  end
10
10
 
11
+ def handle_event_message
12
+ send(:"handle_#{params[:Event].downcase}_message")
13
+ end
14
+
11
15
  def create_model data
12
16
  data.is_a?(Hash) || data.is_a?(Array) ? image_text_message(data) : text_message(data)
13
17
  end
@@ -52,6 +56,14 @@ module WeiBackend
52
56
  define_method(:handle_location_message, &block)
53
57
  end
54
58
 
59
+ def self.on_subscribe &block
60
+ define_method(:handle_location_message, &block)
61
+ end
62
+
63
+ def self.on_unsubscribe &block
64
+ define_method(:handle_location_message, &block)
65
+ end
66
+
55
67
 
56
68
  end
57
69
 
@@ -65,7 +77,7 @@ module WeiBackend
65
77
  end
66
78
  end
67
79
 
68
- delegate :on_text, :on_event, :on_voice, :on_location
80
+ delegate :on_text, :on_event, :on_voice, :on_location, :on_subscribe, :on_unsubscribe
69
81
 
70
82
  class << self
71
83
  attr_accessor :target
@@ -1,3 +1,3 @@
1
1
  module WeiBackend
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -15,6 +15,25 @@ EVENT_MESSAGE_REQUEST='<xml><ToUserName><![CDATA[toUser]]></ToUserName>'+
15
15
  '<FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>123456789</CreateTime>'+
16
16
  '<MsgType><![CDATA[event]]></MsgType><Event><![CDATA[subscribe]]></Event></xml>'
17
17
 
18
+ LOCATION_EVENT_REQUEST='<xml>
19
+ <ToUserName><![CDATA[toUser]]></ToUserName>
20
+ <FromUserName><![CDATA[fromUser]]></FromUserName>
21
+ <CreateTime>123456789</CreateTime>
22
+ <MsgType><![CDATA[event]]></MsgType>
23
+ <Event><![CDATA[LOCATION]]></Event>
24
+ <Latitude>23.137466</Latitude>
25
+ <Longitude>113.352425</Longitude>
26
+ <Precision>119.385040</Precision>
27
+ </xml>'
28
+
29
+ SUBSCRIBE_EVENT_REQUEST='<xml>
30
+ <ToUserName><![CDATA[toUser]]></ToUserName>
31
+ <FromUserName><![CDATA[FromUser]]></FromUserName>
32
+ <CreateTime>123456789</CreateTime>
33
+ <MsgType><![CDATA[event]]></MsgType>
34
+ <Event><![CDATA[subscribe]]></Event>
35
+ </xml>'
36
+
18
37
  PARSED_PARAMS={
19
38
  :ToUserName => 'toUser',
20
39
  :FromUserName => 'fromUser',
@@ -39,14 +39,24 @@ describe 'app' do
39
39
  last_response.body.should include '<Title><![CDATA[title1]]></Title>'
40
40
  end
41
41
 
42
- it 'should echo event request message when receive a event message' do
43
- WeiBackend::MessageDispatcher.on_event do
44
- 'hello event'
42
+ it 'should echo location message when receive a location event message' do
43
+ WeiBackend::MessageDispatcher.on_location do
44
+ "location event: #{params[:Latitude]}"
45
45
  end
46
46
 
47
- post '/', EVENT_MESSAGE_REQUEST, 'CONTENT_TYPE' => 'text/xml'
47
+ post '/', LOCATION_EVENT_REQUEST, 'CONTENT_TYPE' => 'text/xml'
48
48
  last_response.body.should include '<ToUserName><![CDATA[fromUser]]></ToUserName>'
49
- last_response.body.should include '<Content><![CDATA[hello event]]></Content>'
49
+ last_response.body.should include '<Content><![CDATA[location event: 23.137466]]></Content>'
50
+ end
51
+
52
+ it 'should echo location message when receive a location event message' do
53
+ WeiBackend::MessageDispatcher.on_subscribe do
54
+ 'Thank you for subscribe!'
55
+ end
56
+
57
+ post '/', LOCATION_EVENT_REQUEST, 'CONTENT_TYPE' => 'text/xml'
58
+ last_response.body.should include '<ToUserName><![CDATA[fromUser]]></ToUserName>'
59
+ last_response.body.should include '<Content><![CDATA[Thank you for subscribe!]]></Content>'
50
60
  end
51
61
 
52
62
  end
@@ -0,0 +1,15 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
+ require 'wei-backend/version'
3
+
4
+ Gem::Specification.new 'wei-backend', WeiBackend::VERSION do |s|
5
+ s.description = 'wei-backend is a DSL for quickly creating weixin open platform backend system.'
6
+ s.summary = 'Best DSL for weixin development'
7
+ s.authors = ['Wang Chao']
8
+ s.email = 'cwang8023@gmail.com'
9
+ s.homepage = 'https://github.com/charleyw/weixin-sinatra'
10
+ s.license = 'MIT'
11
+ s.files = `git ls-files`.split("\n") - %w[.gitignore .travis.yml .ruby-version .ruby-gemset]
12
+ s.test_files = s.files.select { |p| p =~ /^spec\/.*_spec.rb/ }
13
+
14
+ s.add_dependency 'sinatra', '~> 1.4.4'
15
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wei-backend
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wang Chao
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-08 00:00:00.000000000 Z
11
+ date: 2013-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -34,7 +34,7 @@ files:
34
34
  - Gemfile
35
35
  - Gemfile.lock
36
36
  - README.md
37
- - Rakefile
37
+ - examples/waiting_bus/Rakefile
38
38
  - examples/waiting_bus/ai_bang_client.rb
39
39
  - examples/waiting_bus/app.rb
40
40
  - examples/waiting_bus/bus_helper.rb
@@ -56,7 +56,8 @@ files:
56
56
  - spec/wei_backend_spec.rb
57
57
  - spec/wei_backend_utils_spec.rb
58
58
  - spec/weixin_message_handler_spec.rb
59
- homepage:
59
+ - wei-backend.gemspec
60
+ homepage: https://github.com/charleyw/weixin-sinatra
60
61
  licenses:
61
62
  - MIT
62
63
  metadata: {}