wework 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/wework/api/agent.rb +26 -1
- data/lib/wework/api/base.rb +13 -4
- data/lib/wework/js_ticket/redis_store.rb +39 -0
- data/lib/wework/js_ticket/store.rb +31 -0
- data/lib/wework/token/store.rb +5 -5
- data/lib/wework/version.rb +1 -1
- data/lib/wework.rb +3 -1
- data/wework.gemspec +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1665ffec3b44a0c13996c34dbe527cf8003f723
|
4
|
+
data.tar.gz: 86e3e8182349a38cb70e9dd5f10645ebce9dc2cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2b5df0b9ee2fd1447a2c2e9c83101cbe29a49a49bdb18aa318bf375c41cad7d915beb8642fcecfc473e34a3d992b2e1e28d4a334905d21a9e824006e99119f7
|
7
|
+
data.tar.gz: e28aabdd329db56fd5132b5da3ebd7053f8e171ccb9a35ab03b35d5076e20c2584319a47570eb87834e588a4a0d47a6fb604c07ab84a01a86e04467efe9c5e29
|
data/lib/wework/api/agent.rb
CHANGED
@@ -1,8 +1,33 @@
|
|
1
|
+
require "erb"
|
2
|
+
|
1
3
|
module Wework
|
2
4
|
module Api
|
3
5
|
class Agent < Base
|
4
6
|
# user agent: UA is mozilla/5.0 (iphone; cpu iphone os 10_2 like mac os x) applewebkit/602.3.12 (khtml, like gecko) mobile/14c92 wxwork/1.3.2 micromessenger/6.2
|
5
7
|
|
8
|
+
def authorize_url(redirect_uri, scope="snsapi_base", state="wxwork")
|
9
|
+
uri = ERB::Util.url_encode(redirect_uri)
|
10
|
+
"#{AUTHORIZE_ENDPOINT}?appid=#{corp_id}&redirect_uri=#{uri}&response_type=code&scope=#{scope}&state=#{state}#wechat_redirect"
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_oauth_userinfo code
|
14
|
+
get 'user/getuserinfo', params: {code: code}
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_jssign_package url
|
18
|
+
timestamp = Time.now.to_i
|
19
|
+
noncestr = SecureRandom.hex(8)
|
20
|
+
str = "jsapi_ticket=#{jsapi_ticket}&noncestr=#{noncestr}×tamp=#{timestamp}&url=#{url}"
|
21
|
+
{
|
22
|
+
"appId" => app_id,
|
23
|
+
"nonceStr" => noncestr,
|
24
|
+
"timestamp" => timestamp,
|
25
|
+
"url" => url,
|
26
|
+
"signature" => Digest::SHA1.hexdigest(str),
|
27
|
+
"rawString" => str
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
6
31
|
def get_info
|
7
32
|
get 'agent/get', params: {agentid: agent_id}
|
8
33
|
end
|
@@ -63,7 +88,7 @@ module Wework
|
|
63
88
|
end
|
64
89
|
|
65
90
|
def agent_id
|
66
|
-
@
|
91
|
+
@app_id.to_i
|
67
92
|
end
|
68
93
|
end
|
69
94
|
end
|
data/lib/wework/api/base.rb
CHANGED
@@ -1,18 +1,23 @@
|
|
1
1
|
require 'wework/token/store'
|
2
2
|
require 'wework/token/redis_store'
|
3
3
|
|
4
|
+
require 'wework/js_ticket/store'
|
5
|
+
require 'wework/js_ticket/redis_store'
|
6
|
+
|
4
7
|
module Wework
|
5
8
|
module Api
|
6
9
|
class Base
|
7
|
-
|
10
|
+
|
11
|
+
attr_reader :corp_id, :app_id, :app_secret
|
8
12
|
attr_accessor :options
|
9
13
|
|
10
14
|
delegate :access_token, to: :token_store
|
15
|
+
delegate :jsapi_ticket, to: :jsticket_store
|
11
16
|
|
12
|
-
def initialize(corp_id,
|
17
|
+
def initialize(corp_id, app_id, app_secret, options={})
|
13
18
|
@corp_id = corp_id
|
14
|
-
@
|
15
|
-
@
|
19
|
+
@app_id = app_id
|
20
|
+
@app_secret = app_secret
|
16
21
|
@options = options
|
17
22
|
end
|
18
23
|
|
@@ -20,6 +25,10 @@ module Wework
|
|
20
25
|
@token_store ||= Token::RedisStore.new self
|
21
26
|
end
|
22
27
|
|
28
|
+
def jsticket_store
|
29
|
+
@jsticket_store ||= JsTicket::RedisStore.new self
|
30
|
+
end
|
31
|
+
|
23
32
|
def request
|
24
33
|
@request ||= Wework::Request.new(API_ENDPOINT, false)
|
25
34
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Wework
|
2
|
+
module JsTicket
|
3
|
+
class RedisStore < Store
|
4
|
+
|
5
|
+
def initialize(agent)
|
6
|
+
raise RedisNotConfigException if redis.nil?
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
def jsapi_ticket
|
11
|
+
super
|
12
|
+
redis.hget(key, "jsapi_ticket")
|
13
|
+
end
|
14
|
+
|
15
|
+
def expired?
|
16
|
+
redis.hvals(key).empty?
|
17
|
+
end
|
18
|
+
|
19
|
+
def refresh_token
|
20
|
+
result = super
|
21
|
+
expires_at = Time.now.to_i + result['expires_in'].to_i - 100
|
22
|
+
redis.hmset(
|
23
|
+
key,
|
24
|
+
"jsapi_ticket", result['ticket'],
|
25
|
+
"expires_at", expires_at
|
26
|
+
)
|
27
|
+
|
28
|
+
redis.expireat(key, expires_at)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def redis
|
34
|
+
Wework.redis
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Wework
|
2
|
+
module JsTicket
|
3
|
+
class Store
|
4
|
+
|
5
|
+
attr_accessor :app
|
6
|
+
|
7
|
+
def initialize(app)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def jsapi_ticket
|
12
|
+
refresh_token if expired?
|
13
|
+
end
|
14
|
+
|
15
|
+
def expired?
|
16
|
+
raise NotImplementedError, "Subclasses must implement a token_expired? method"
|
17
|
+
end
|
18
|
+
|
19
|
+
def refresh_token
|
20
|
+
app.get 'get_jsapi_ticket'
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def key
|
26
|
+
@key ||= Digest::MD5.hexdigest("#{JSAPI_TOKEN_PREFIX}_#{app.app_id}_#{app.app_secret}")
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/wework/token/store.rb
CHANGED
@@ -2,10 +2,10 @@ module Wework
|
|
2
2
|
module Token
|
3
3
|
class Store
|
4
4
|
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :app
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
@
|
7
|
+
def initialize(app)
|
8
|
+
@app = app
|
9
9
|
end
|
10
10
|
|
11
11
|
def access_token
|
@@ -17,13 +17,13 @@ module Wework
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def refresh_token
|
20
|
-
|
20
|
+
app.request.get 'gettoken', params: {corpid: app.corp_id, corpsecret: app.app_secret}
|
21
21
|
end
|
22
22
|
|
23
23
|
private
|
24
24
|
|
25
25
|
def key
|
26
|
-
@key ||= Digest::MD5.hexdigest("#{ACCESS_TOKEN_PREFIX}_#{
|
26
|
+
@key ||= Digest::MD5.hexdigest("#{ACCESS_TOKEN_PREFIX}_#{app.app_id}_#{app.app_secret}")
|
27
27
|
end
|
28
28
|
|
29
29
|
end
|
data/lib/wework/version.rb
CHANGED
data/lib/wework.rb
CHANGED
@@ -12,7 +12,9 @@ require 'wework/api/contact'
|
|
12
12
|
|
13
13
|
module Wework
|
14
14
|
API_ENDPOINT = 'https://qyapi.weixin.qq.com/cgi-bin/'.freeze
|
15
|
-
|
15
|
+
AUTHORIZE_ENDPOINT = 'https://open.weixin.qq.com/connect/oauth2/authorize'.freeze
|
16
|
+
ACCESS_TOKEN_PREFIX = 'TOKEN'.freeze
|
17
|
+
JSAPI_TOKEN_PREFIX = 'JST'.freeze
|
16
18
|
CONTACT_AGENT_ID = 'CONTACT'.freeze
|
17
19
|
HTTP_OK_STATUS = [200, 201].freeze
|
18
20
|
SUCCESS_CODE = 0
|
data/wework.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["sindon@gmail.com"]
|
11
11
|
|
12
12
|
spec.summary = spec.description = %q{Ruby API wrapper for work wechat.}
|
13
|
-
spec.homepage = "https://github.com/
|
13
|
+
spec.homepage = "https://github.com/mycolorway/wework"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wework
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- seandong
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -122,12 +122,14 @@ files:
|
|
122
122
|
- lib/wework/api/contact.rb
|
123
123
|
- lib/wework/config.rb
|
124
124
|
- lib/wework/engine.rb
|
125
|
+
- lib/wework/js_ticket/redis_store.rb
|
126
|
+
- lib/wework/js_ticket/store.rb
|
125
127
|
- lib/wework/request.rb
|
126
128
|
- lib/wework/token/redis_store.rb
|
127
129
|
- lib/wework/token/store.rb
|
128
130
|
- lib/wework/version.rb
|
129
131
|
- wework.gemspec
|
130
|
-
homepage: https://github.com/
|
132
|
+
homepage: https://github.com/mycolorway/wework
|
131
133
|
licenses:
|
132
134
|
- MIT
|
133
135
|
metadata: {}
|