easy_weixin 0.0.9 → 0.1.0
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 +4 -4
- data/README.md +35 -26
- data/Rakefile +11 -1
- data/easy_weixin.gemspec +6 -2
- data/lib/easy_weixin.rb +34 -31
- data/lib/easy_weixin/api.rb +86 -0
- data/lib/easy_weixin/auth.rb +1 -1
- data/lib/easy_weixin/config.rb +25 -0
- data/lib/easy_weixin/menu.rb +11 -0
- data/lib/easy_weixin/{model.rb → message.rb} +8 -14
- data/lib/easy_weixin/response.rb +32 -0
- data/lib/easy_weixin/version.rb +1 -1
- data/test/menu.json +54 -0
- data/test/test_auth.rb +19 -0
- data/test/test_get_access_token.rb +13 -0
- data/test/test_menu.rb +13 -0
- data/test/test_response.rb +44 -0
- data/{spec → test}/test_xml.rb +1 -1
- metadata +63 -11
- data/spec/auth_spec.rb +0 -20
- data/spec/reply_spec.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0441570dd87ce9e4cf8311ed51603591805e773d
|
4
|
+
data.tar.gz: 4e1988ce9b0501884b545cf70cdea68584e5faec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be0eb93ce57ecd370ada2097c7927fece940d064a2688260147e5958aa4566ae536d1d8ebf0824dba3f1ecd20a0b34b3309421ed4b9d0f59f906f8bb7fe26b33
|
7
|
+
data.tar.gz: 5d6dc102a8bd1b199004f45e275ebf9761b292a08d0fd2db747e7e3ead87fe139f4048c4516830dcf19f22e3a3ff1c7212550d5dee7cb6a49a08970189e52f1f
|
data/README.md
CHANGED
@@ -1,37 +1,51 @@
|
|
1
1
|
# EasyWeixin
|
2
2
|
|
3
|
-
A Simple gem for weixin
|
3
|
+
A Simple gem for weixin
|
4
4
|
|
5
|
-
|
5
|
+
# Installation
|
6
6
|
|
7
7
|
gem install easy_weixin
|
8
8
|
|
9
|
-
|
9
|
+
### Rails use redis
|
10
10
|
|
11
|
-
|
11
|
+
```
|
12
|
+
EasyWeixin.configure do |config|
|
13
|
+
config.redis = Redis.new
|
14
|
+
end
|
15
|
+
```
|
12
16
|
|
13
|
-
|
17
|
+
# Usage
|
14
18
|
|
15
|
-
|
16
|
-
nonce = params[:nonce]
|
17
|
-
signature = params[:signature]
|
18
|
-
echostr = params[:echostr]
|
19
|
-
token = 'xxxxx'
|
20
|
-
easy_weixin = EasyWeixin::Auth.new(token, timestamp, nonce, signature, echostr) # => echostr or false
|
19
|
+
### 验证
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
```
|
22
|
+
easy_weixin = EasyWeixin::Auth.new(@token, @timestamp, @nonce, @signature, @echostr)
|
23
|
+
easy_weixin.check_valid # => echostr or false
|
24
|
+
```
|
25
25
|
|
26
|
-
###
|
26
|
+
### 创建菜单
|
27
|
+
|
28
|
+
```
|
29
|
+
$client = EasyWeixin::Api.new(ENV["APPID"], ENV["APPSECRET"])
|
30
|
+
$client.create_menu(data)
|
31
|
+
```
|
32
|
+
|
33
|
+
### 解析XML
|
34
|
+
```
|
35
|
+
request_xml = Nokogiri::XML(request.body.read).to_s
|
36
|
+
msg = EasyWeixin::Response.analysis_xml(request_xml)
|
37
|
+
```
|
38
|
+
|
39
|
+
### 回复
|
27
40
|
|
28
41
|
* ReplyText
|
29
42
|
```
|
30
43
|
EasyWeixin.text_msg(msg.ToUserName, msg.FromUserName, 'i am a text reply')
|
31
44
|
```
|
45
|
+
|
32
46
|
* ReplyNews
|
33
47
|
```
|
34
|
-
msg = EasyWeixin::
|
48
|
+
msg = EasyWeixin::Response.analysis_xml(request_xml)
|
35
49
|
if msg.Content == 'Hello2BizUser'
|
36
50
|
item1 = EasyWeixin::Item.new
|
37
51
|
item1.Title = 'title1'
|
@@ -42,14 +56,9 @@ check_valid
|
|
42
56
|
Articles = [item1, item2]
|
43
57
|
ArticleCount = Articles.size
|
44
58
|
end
|
45
|
-
|
46
|
-
|
59
|
+
EasyWeixin::Response.news_msg(msg.ToUserName, msg.FromUserName, Articles, ArticleCount)
|
60
|
+
```
|
61
|
+
### 测试
|
62
|
+
```
|
63
|
+
rake test
|
47
64
|
```
|
48
|
-
|
49
|
-
## Contributing
|
50
|
-
|
51
|
-
1. Fork it ( http://github.com/<my-github-username>/easy_weixin/fork )
|
52
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
53
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
54
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
55
|
-
5. Create new Pull Request
|
data/Rakefile
CHANGED
@@ -1 +1,11 @@
|
|
1
|
-
require
|
1
|
+
require 'rake/testtask'
|
2
|
+
|
3
|
+
Rake::TestTask.new(:test) do |t|
|
4
|
+
# libs表示要添加到$LOAD_PATH(就是加载ruby文件的搜索路径)的文件夹
|
5
|
+
# 默认是"lib",现在再添加"test"
|
6
|
+
t.libs << "test"
|
7
|
+
# 要运行的测试文件的特征。匹配以test_开头的所有文件
|
8
|
+
t.pattern = 'test/*.rb'
|
9
|
+
# 不输出测试文件的信息
|
10
|
+
t.verbose = false
|
11
|
+
end
|
data/easy_weixin.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = EasyWeixin::VERSION
|
9
9
|
spec.authors = ["menghuanwd"]
|
10
10
|
spec.email = ["651019063@qq.com"]
|
11
|
-
spec.summary = %q{easy to use weixin.}
|
12
|
-
spec.description = %q{
|
11
|
+
spec.summary = %q{easy to use weixin public api.}
|
12
|
+
spec.description = %q{create menu and reply message.}
|
13
13
|
spec.homepage = "https://github.com/menghuanwd/easy_weixin"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
@@ -22,4 +22,8 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
spec.add_development_dependency "roxml"
|
24
24
|
spec.add_development_dependency "multi_xml"
|
25
|
+
spec.add_development_dependency "faraday"
|
26
|
+
spec.add_development_dependency "typhoeus"
|
27
|
+
spec.add_development_dependency "redis"
|
28
|
+
|
25
29
|
end
|
data/lib/easy_weixin.rb
CHANGED
@@ -1,40 +1,43 @@
|
|
1
1
|
require 'multi_xml'
|
2
2
|
require 'ostruct'
|
3
|
-
require
|
3
|
+
require 'redis'
|
4
|
+
require 'roxml'
|
5
|
+
require "easy_weixin/config"
|
4
6
|
require "easy_weixin/auth"
|
7
|
+
require "easy_weixin/menu"
|
8
|
+
require "easy_weixin/response"
|
9
|
+
require "easy_weixin/message"
|
10
|
+
require "easy_weixin/api"
|
5
11
|
require 'rack'
|
6
|
-
require '
|
12
|
+
require 'faraday'
|
13
|
+
require 'typhoeus/adapters/faraday'
|
7
14
|
|
8
15
|
module EasyWeixin
|
9
|
-
extend self
|
16
|
+
# extend self
|
10
17
|
|
11
|
-
def text_msg(from, to, content)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
18
|
+
# def text_msg(from, to, content)
|
19
|
+
# msg = TextReplyMessage.new
|
20
|
+
# msg.ToUserName = to
|
21
|
+
# msg.FromUserName = from
|
22
|
+
# msg.Content = content
|
23
|
+
# msg.to_xml
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# def news_msg(from, to, articles, articleCount=1)
|
27
|
+
# msg = NewsReplyMessage.new
|
28
|
+
# msg.ToUserName = to
|
29
|
+
# msg.FromUserName = from
|
30
|
+
# unless articles.is_a?(Array)
|
31
|
+
# articles = [articles]
|
32
|
+
# end
|
33
|
+
# msg.Articles = articles
|
34
|
+
# msg.ArticleCount = articleCount
|
35
|
+
# msg.to_xml
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# def analysis_xml(request_xml)
|
39
|
+
# hash = MultiXml.parse(request_xml)['xml']
|
40
|
+
# source = OpenStruct.new(hash)
|
41
|
+
# end
|
18
42
|
|
19
|
-
def news_msg(from, to, articles, articleCount=1)
|
20
|
-
msg = NewsReplyMessage.new
|
21
|
-
msg.ToUserName = to
|
22
|
-
msg.FromUserName = from
|
23
|
-
unless articles.is_a?(Array)
|
24
|
-
articles = [articles]
|
25
|
-
end
|
26
|
-
msg.Articles = articles
|
27
|
-
msg.ArticleCount = articleCount
|
28
|
-
msg.to_xml
|
29
|
-
end
|
30
|
-
|
31
|
-
def analysis_xml(request_xml)
|
32
|
-
hash = MultiXml.parse(request_xml)['xml']
|
33
|
-
source = OpenStruct.new(hash)
|
34
|
-
end
|
35
|
-
|
36
|
-
def get_weixin_access_token(appid, appsecret)
|
37
|
-
url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=#{appid}&secret=#{appsecret}"
|
38
|
-
JSON.parse(open(url).read)["access_token"]
|
39
|
-
end
|
40
43
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# 接入API
|
2
|
+
|
3
|
+
module EasyWeixin
|
4
|
+
class Api
|
5
|
+
include Menu
|
6
|
+
|
7
|
+
def initialize(app_id, app_secret)
|
8
|
+
@app_id = app_id
|
9
|
+
@app_secret = app_secret
|
10
|
+
@redis_key = "weixin_access_token_#{app_id}"
|
11
|
+
@grant_type = 'client_credential'
|
12
|
+
@weixin_api_url = 'https://api.weixin.qq.com'
|
13
|
+
end
|
14
|
+
|
15
|
+
# 获取access_token,如果启用redis则使用redis记录,如果没启用就每次进行一次查询。
|
16
|
+
def get_access_token
|
17
|
+
if EasyWeixin.weixin_redis
|
18
|
+
access_token = weixin_redis.get(@redis_key)
|
19
|
+
|
20
|
+
if access_token
|
21
|
+
access_token
|
22
|
+
else
|
23
|
+
refresh_token
|
24
|
+
end
|
25
|
+
|
26
|
+
else
|
27
|
+
get_access_token_http
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_access_token_http
|
32
|
+
conn = Faraday.new(url: "https://api.weixin.qq.com") do |faraday|
|
33
|
+
faraday.request :url_encoded
|
34
|
+
faraday.adapter :typhoeus
|
35
|
+
end
|
36
|
+
response = conn.get("cgi-bin/token", authenticate_headers)
|
37
|
+
|
38
|
+
token_hash = JSON.parse(response.body)
|
39
|
+
|
40
|
+
access_token = token_hash["access_token"]
|
41
|
+
end
|
42
|
+
|
43
|
+
def refresh_token
|
44
|
+
get_access_token_http
|
45
|
+
|
46
|
+
conn = Faraday.new(url: "https://api.weixin.qq.com") do |faraday|
|
47
|
+
faraday.request :url_encoded
|
48
|
+
faraday.adapter :typhoeus
|
49
|
+
end
|
50
|
+
response = conn.get("cgi-bin/token", authenticate_headers)
|
51
|
+
token_hash = JSON.parse(response.body)
|
52
|
+
|
53
|
+
access_token = token_hash["access_token"]
|
54
|
+
expires_in = token_hash["expires_in"]
|
55
|
+
|
56
|
+
weixin_redis.set(@redis_key, access_token)
|
57
|
+
weixin_redis.expire(@redis_key, expires_in - 5)
|
58
|
+
|
59
|
+
token_hash["access_token"]
|
60
|
+
end
|
61
|
+
|
62
|
+
def authenticate_headers
|
63
|
+
{grant_type: @grant_type, appid: @app_id, secret: @app_secret}
|
64
|
+
end
|
65
|
+
|
66
|
+
def weixin_redis
|
67
|
+
EasyWeixin.weixin_redis
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def http_post(url, data)
|
73
|
+
conn = Faraday.new(url: @weixin_api_url) do |faraday|
|
74
|
+
faraday.request :url_encoded
|
75
|
+
faraday.adapter :typhoeus
|
76
|
+
end
|
77
|
+
response = conn.post do |req|
|
78
|
+
req.url url
|
79
|
+
req.params['access_token'] = get_access_token
|
80
|
+
req.headers['Content-Type'] = 'application/json'
|
81
|
+
req.body = data
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
data/lib/easy_weixin/auth.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
module EasyWeixin
|
2
|
+
class << self
|
3
|
+
|
4
|
+
attr_accessor :config
|
5
|
+
|
6
|
+
def configure
|
7
|
+
yield self.config ||= Config.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def weixin_redis
|
11
|
+
# use add log
|
12
|
+
return nil if EasyWeixin.config.nil?
|
13
|
+
EasyWeixin.config.redis
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
class Config
|
19
|
+
attr_accessor :redis
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# EasyWeixin.configure do |config|
|
24
|
+
# config.redis = Redis.new
|
25
|
+
# end
|
@@ -1,20 +1,14 @@
|
|
1
|
-
require 'multi_xml'
|
2
|
-
require 'ostruct'
|
3
|
-
require 'roxml'
|
4
|
-
|
5
1
|
module EasyWeixin
|
6
2
|
class Message
|
7
|
-
attr_accessor :ToUserName, :FromUserName, :CreateTime
|
8
3
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
@CreateTime = CreateTime
|
13
|
-
end
|
4
|
+
include Response
|
5
|
+
|
6
|
+
# attr_accessor :ToUserName, :FromUserName, :CreateTime
|
14
7
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
8
|
+
def initialize(to,from,time)
|
9
|
+
@ToUserName = to
|
10
|
+
@FromUserName = from
|
11
|
+
@CreateTime = time
|
18
12
|
end
|
19
13
|
|
20
14
|
end
|
@@ -70,4 +64,4 @@ module EasyWeixin
|
|
70
64
|
end
|
71
65
|
|
72
66
|
|
73
|
-
end
|
67
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module EasyWeixin
|
2
|
+
module Response
|
3
|
+
extend self
|
4
|
+
|
5
|
+
# 创建文本信息
|
6
|
+
def text_msg(from, to, content)
|
7
|
+
msg = TextReplyMessage.new
|
8
|
+
msg.ToUserName = to
|
9
|
+
msg.FromUserName = from
|
10
|
+
msg.Content = content
|
11
|
+
msg.to_xml
|
12
|
+
end
|
13
|
+
|
14
|
+
def news_msg(from, to, articles, articleCount=1)
|
15
|
+
msg = NewsReplyMessage.new
|
16
|
+
msg.ToUserName = to
|
17
|
+
msg.FromUserName = from
|
18
|
+
unless articles.is_a?(Array)
|
19
|
+
articles = [articles]
|
20
|
+
end
|
21
|
+
msg.Articles = articles
|
22
|
+
msg.ArticleCount = articleCount
|
23
|
+
msg.to_xml
|
24
|
+
end
|
25
|
+
|
26
|
+
def analysis_xml(request_xml)
|
27
|
+
hash = MultiXml.parse(request_xml)['xml']
|
28
|
+
source = OpenStruct.new(hash)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
data/lib/easy_weixin/version.rb
CHANGED
data/test/menu.json
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
{
|
2
|
+
"button": [
|
3
|
+
{
|
4
|
+
"name": "美女如云",
|
5
|
+
"sub_button": [
|
6
|
+
{
|
7
|
+
"type": "view",
|
8
|
+
"name": "性感美女",
|
9
|
+
"url": "http://wap.guyifeng.pw/photos?photo_category_id=1"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"type": "view",
|
13
|
+
"name": "小清新",
|
14
|
+
"url": "http://wap.guyifeng.pw/photos?photo_category_id=2"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"type": "view",
|
18
|
+
"name": "甜素纯",
|
19
|
+
"url": "http://wap.guyifeng.pw/photos?photo_category_id=5"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"type": "view",
|
23
|
+
"name": "清纯",
|
24
|
+
"url": "http://wap.guyifeng.pw/photos?photo_category_id=6"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"type": "view",
|
28
|
+
"name": "嫩萝莉",
|
29
|
+
"url": "http://wap.guyifeng.pw/photos?photo_category_id=11"
|
30
|
+
}
|
31
|
+
]
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"name": "来个人",
|
35
|
+
"sub_button": [
|
36
|
+
{
|
37
|
+
"type": "click",
|
38
|
+
"name": "男人",
|
39
|
+
"key": "boy"
|
40
|
+
},
|
41
|
+
{
|
42
|
+
"type": "click",
|
43
|
+
"name": "女人",
|
44
|
+
"key": "girl"
|
45
|
+
}
|
46
|
+
]
|
47
|
+
},
|
48
|
+
{
|
49
|
+
"name": "来个笑话",
|
50
|
+
"type": "click",
|
51
|
+
"key": "joke"
|
52
|
+
}
|
53
|
+
]
|
54
|
+
}
|
data/test/test_auth.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'easy_weixin'
|
3
|
+
|
4
|
+
describe "EasyWeixin" do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@token = 'dave'
|
8
|
+
@timestamp = Time.now.to_i.to_s
|
9
|
+
@nonce = '123456'
|
10
|
+
@signature = Digest::SHA1.hexdigest( [@token, @timestamp, @nonce].sort.join )
|
11
|
+
@echostr = 'caishu'
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'function check_valid' do
|
15
|
+
easy_weixin = EasyWeixin::Auth.new(@token, @timestamp, @nonce, @signature, @echostr)
|
16
|
+
easy_weixin.check_valid.must_equal @echostr
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'easy_weixin'
|
3
|
+
|
4
|
+
describe 'AccessToken' do
|
5
|
+
before do
|
6
|
+
@client = EasyWeixin::Api.new('wx61e7c4dba13cc83e', 'bfdffb358e437f3149bbbfed7e7c8ccd')
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'ssss' do
|
10
|
+
puts @client.get_access_token
|
11
|
+
# @client.get_access_token.must_equal "OHAI!"
|
12
|
+
end
|
13
|
+
end
|
data/test/test_menu.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'easy_weixin'
|
3
|
+
|
4
|
+
describe 'AccessToken' do
|
5
|
+
before do
|
6
|
+
@client = EasyWeixin::Api.new('wx61e7c4dba13cc83e', 'bfdffb358e437f3149bbbfed7e7c8ccd')
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'menu' do
|
10
|
+
data = File.open(File.expand_path('../menu.json',__FILE__)).read
|
11
|
+
puts @client.create_menu(data).body
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'easy_weixin'
|
3
|
+
require File.expand_path('../test_xml',__FILE__)
|
4
|
+
|
5
|
+
describe "EasyWeixin" do
|
6
|
+
|
7
|
+
describe "subscribe" do
|
8
|
+
it 'subscribe' do
|
9
|
+
|
10
|
+
msg = EasyWeixin::Response.analysis_xml($subscribe_xml)
|
11
|
+
|
12
|
+
puts easy_weixin = EasyWeixin::Response.text_msg(msg.ToUserName, msg.FromUserName, 'Hi 欢迎来到顾益峰的个人微信频道,能来到这里的,都是我的朋友,都是一家人,这里你可以很放松!回复joke,听个笑话.回复girl,会显示我的五个女性朋友.回复boy,会显示我的五个男性朋友,回复其他内容,有你意想不到的内容喔~')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "text" do
|
17
|
+
it 'text' do
|
18
|
+
|
19
|
+
msg = EasyWeixin::Response.analysis_xml($text_xml)
|
20
|
+
|
21
|
+
puts easy_weixin = EasyWeixin::Response.text_msg(msg.ToUserName, msg.FromUserName, '我只是一个回复')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "news" do
|
26
|
+
it 'news' do
|
27
|
+
msg = EasyWeixin::Response.analysis_xml($text_xml)
|
28
|
+
if msg.Content == 'Hello2BizUser'
|
29
|
+
item1 = EasyWeixin::Item.new
|
30
|
+
item1.Title = 'title1'
|
31
|
+
item1.Description = 'blah'
|
32
|
+
item2 = EasyWeixin::Item.new
|
33
|
+
item2.Title = 'title2'
|
34
|
+
item2.Description = 'blah blah'
|
35
|
+
Articles = [item1, item2]
|
36
|
+
ArticleCount = Articles.size
|
37
|
+
end
|
38
|
+
|
39
|
+
puts EasyWeixin::Response.news_msg(msg.ToUserName, msg.FromUserName, Articles, ArticleCount)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
end
|
data/{spec → test}/test_xml.rb
RENAMED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_weixin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- menghuanwd
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,7 +66,49 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: faraday
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: typhoeus
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: redis
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: create menu and reply message.
|
70
112
|
email:
|
71
113
|
- 651019063@qq.com
|
72
114
|
executables: []
|
@@ -81,12 +123,19 @@ files:
|
|
81
123
|
- Rakefile
|
82
124
|
- easy_weixin.gemspec
|
83
125
|
- lib/easy_weixin.rb
|
126
|
+
- lib/easy_weixin/api.rb
|
84
127
|
- lib/easy_weixin/auth.rb
|
85
|
-
- lib/easy_weixin/
|
128
|
+
- lib/easy_weixin/config.rb
|
129
|
+
- lib/easy_weixin/menu.rb
|
130
|
+
- lib/easy_weixin/message.rb
|
131
|
+
- lib/easy_weixin/response.rb
|
86
132
|
- lib/easy_weixin/version.rb
|
87
|
-
-
|
88
|
-
-
|
89
|
-
-
|
133
|
+
- test/menu.json
|
134
|
+
- test/test_auth.rb
|
135
|
+
- test/test_get_access_token.rb
|
136
|
+
- test/test_menu.rb
|
137
|
+
- test/test_response.rb
|
138
|
+
- test/test_xml.rb
|
90
139
|
homepage: https://github.com/menghuanwd/easy_weixin
|
91
140
|
licenses:
|
92
141
|
- MIT
|
@@ -110,8 +159,11 @@ rubyforge_project:
|
|
110
159
|
rubygems_version: 2.2.2
|
111
160
|
signing_key:
|
112
161
|
specification_version: 4
|
113
|
-
summary: easy to use weixin.
|
162
|
+
summary: easy to use weixin public api.
|
114
163
|
test_files:
|
115
|
-
-
|
116
|
-
-
|
117
|
-
-
|
164
|
+
- test/menu.json
|
165
|
+
- test/test_auth.rb
|
166
|
+
- test/test_get_access_token.rb
|
167
|
+
- test/test_menu.rb
|
168
|
+
- test/test_response.rb
|
169
|
+
- test/test_xml.rb
|
data/spec/auth_spec.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'rspec'
|
2
|
-
require 'digest/sha1'
|
3
|
-
require 'easy_weixin/auth'
|
4
|
-
describe "Weixin::Middleware" do
|
5
|
-
|
6
|
-
before(:all) do
|
7
|
-
@token = 'dave'
|
8
|
-
@timestamp = Time.now.to_i.to_s
|
9
|
-
@nonce = '123456'
|
10
|
-
@signature = Digest::SHA1.hexdigest( [@token, @timestamp, @nonce].sort.join )
|
11
|
-
@echostr = 'caishu'
|
12
|
-
end
|
13
|
-
|
14
|
-
|
15
|
-
it 'function check_valid' do
|
16
|
-
easy_weixin = EasyWeixin::Auth.new(@token, @timestamp, @nonce, @signature, @echostr)
|
17
|
-
easy_weixin.check_valid.should == @echostr
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
data/spec/reply_spec.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'rspec'
|
2
|
-
require 'digest/sha1'
|
3
|
-
require 'easy_weixin/model'
|
4
|
-
require 'easy_weixin'
|
5
|
-
require File.expand_path('../test_xml',__FILE__)
|
6
|
-
|
7
|
-
describe "Weixin::Message" do
|
8
|
-
it 'is a text message' do
|
9
|
-
puts msg = EasyWeixin.analysis_xml($subscribe_xml)
|
10
|
-
|
11
|
-
case msg.MsgType
|
12
|
-
when 'text'
|
13
|
-
# TextMessage.new(hash)
|
14
|
-
puts EasyWeixin.text_msg(msg.ToUserName, msg.FromUserName, '我只是一个回复')
|
15
|
-
when 'image'
|
16
|
-
# ImageMessage.new(hash)
|
17
|
-
when 'location'
|
18
|
-
# LocationMessage.new(hash)
|
19
|
-
when 'link'
|
20
|
-
# LinkMessage.new(hash)
|
21
|
-
when 'event'
|
22
|
-
if msg.Event == "subscribe"
|
23
|
-
puts EasyWeixin.text_msg(msg.ToUserName, msg.FromUserName, 'Hi 欢迎来到顾益峰的个人微信频道,能来到这里的,都是我的朋友,都是一家人,这里你可以很放松!回复joke,听个笑话.回复girl,会显示我的五个女性朋友.回复boy,会显示我的五个男性朋友,回复其他内容,有你意想不到的内容喔~')
|
24
|
-
else
|
25
|
-
puts EasyWeixin.text_msg(msg.ToUserName, msg.FromUserName, '你确定?')
|
26
|
-
end
|
27
|
-
when 'voice'
|
28
|
-
# VoiceMessage.new(hash)
|
29
|
-
when 'video'
|
30
|
-
# VideoMessage.new(hash)
|
31
|
-
else
|
32
|
-
raise 'Unknown Message'
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'is a news' do
|
38
|
-
puts msg = EasyWeixin::Message.factory($text_xml)
|
39
|
-
|
40
|
-
if msg.Content == 'Hello2BizUser'
|
41
|
-
item1 = EasyWeixin::Item.new
|
42
|
-
item1.Title = 'title1'
|
43
|
-
item1.Description = 'blah'
|
44
|
-
item2 = EasyWeixin::Item.new
|
45
|
-
item2.Title = 'title2'
|
46
|
-
item2.Description = 'blah blah'
|
47
|
-
Articles = [item1, item2]
|
48
|
-
ArticleCount = Articles.size
|
49
|
-
end
|
50
|
-
|
51
|
-
puts EasyWeixin.news_msg(msg.ToUserName, msg.FromUserName, Articles, ArticleCount)
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|