wework 0.1.2 → 0.1.3
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/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: {}
|