yol_qy_weixin 0.0.3 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 492bc402556844ff268a6cc561decc01273d6c625cfbe3d6fead5cd990a3c543
4
- data.tar.gz: f245159f2eb8175688c586950c1ddc4e0ef20f2a1837f430ceab8898b6bf3581
3
+ metadata.gz: 8c3296070570a8d242429f4760872498d01b4155403847934e10e406bf91bf17
4
+ data.tar.gz: d251b119311c4561e461b64048d224be817a20a51c9539bca0653be959853d3d
5
5
  SHA512:
6
- metadata.gz: '04889e7bf6966e97dd0b9bb3e5d68cd686216a8cd9878f616388f12915d3789ac1de792452b97fabd968a6673dd2364b1acb30fbd8dfe8893cbd28bbe2de80a0'
7
- data.tar.gz: e8eb257736eff86043bfe00a2a5e98fd2135d106d825dbe472eec07b9e82d0da0a4ac0a8add84cc84a72fffebe68a4de3cb7f659bff6a03bb93817c06fcee519
6
+ metadata.gz: 4401f01855e21bb4663085604a075b80d5e38be6844c1d3fe0cfee8f190a00858ce1d07de239bfd32566178cd3bb8d68eb6c088eeab74247185b4a54fa44e4b0
7
+ data.tar.gz: 5d5e0e83e5ba92d7c0375dc7327c77b7b0f6aec0914e69955a4434efa2232df1ee05cb80d689e95a2ad31fd7da0b47fe7ffbc80cb631ad70d3ccbe994bb4aa20
data/.gitignore CHANGED
@@ -54,3 +54,6 @@ build-iPhoneSimulator/
54
54
 
55
55
  # Used by RuboCop. Remote config files pulled in from inherit_from directive.
56
56
  # .rubocop-https?--*
57
+
58
+
59
+ *.DS_Store
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yol_qy_weixin (0.0.3)
4
+ yol_qy_weixin (0.0.8)
5
5
  multi_xml
6
6
  nokogiri
7
7
  roxml
@@ -16,11 +16,11 @@ GEM
16
16
  tzinfo (~> 1.1)
17
17
  zeitwerk (~> 2.2, >= 2.2.2)
18
18
  concurrent-ruby (1.1.8)
19
- i18n (1.8.9)
19
+ i18n (1.8.10)
20
20
  concurrent-ruby (~> 1.0)
21
21
  minitest (5.14.4)
22
22
  multi_xml (0.6.0)
23
- nokogiri (1.11.1-x86_64-darwin)
23
+ nokogiri (1.11.3-x86_64-darwin)
24
24
  racc (~> 1.4)
25
25
  racc (1.5.2)
26
26
  rake (13.0.1)
data/README.md CHANGED
@@ -6,120 +6,121 @@ https://rubygems.org/gems/yol_qy_weixin
6
6
 
7
7
  [![Gem Version](https://badge.fury.io/rb/yol_qy_weixin.svg)](http://badge.fury.io/rb/yol_qy_weixin)
8
8
 
9
- **企业号对应多个管理组,请前往 `设置` => `权限管理` 任意创建一个管理组,在管理组最下角即可获取 CorpID Secret**
10
-
11
9
  **有问题请及时提issue**
12
10
 
13
11
  ```ruby
14
- gem "qy_wechat_api", git: "https://github.com/lanrion/qy_wechat_api.git"
12
+ gem "yol_qy_weixin", git: "https://github.com/luojie2019/yol_qy_weixin.git"
15
13
  ```
16
14
 
17
15
  # 配置
18
16
 
19
- ## jsticket、suite_token存储方案
20
- 如果你是在Rails框架下,默认情况下直接使用Rails.cache,如果你想独立cache,请配置如下:
17
+ ## 安装依赖Installation
18
+
19
+ Add this line to your application's Gemfile:
20
+
21
21
  ```ruby
22
- QyWechatApi.configure do |config|
23
- config.cache_store = YourCustomCacheStore
24
- end
22
+ gem 'yol_qy_weixin'
25
23
  ```
26
- cache_store按照Rails.cache的接口实现,强烈建议使用ActiveSupport::Cache
24
+ ## 配置 corpid secret
27
25
 
28
- ## 日志配置
29
- 如果你是在Rails框架下,默认情况下直接使用Rails.logger,如果你想独立cache,请配置如下:
30
26
  ```ruby
31
- QyWechatApi.configure do |config|
32
- config.logger = YourCustomLogger
33
- end
34
- ```
35
- logger按照Rails.logger的接口实现,强烈建议使用ActiveSupport::Logger
27
+ # 目录
36
28
 
37
- ## Token 存储方案(TODO: 待重构直接使用cache_store)
29
+ file: your_project/config/qy_weixin.yml
38
30
 
39
- ### 对象存储
40
- 如果你是单个企业号,建议使用这个方案,无需任何配置即可使用。
31
+ .your_project/
32
+ ├── app
33
+ ├── bin
34
+ ├── config
35
+ │ ├── redis.yml
36
+ │ ├── database.yml
37
+ │ ├── qy_weixin.yml
38
+ ```
41
39
 
42
- ### Redis 存储
43
- ```ruby
44
- redis = Redis.new(host: "127.0.0.1", port: "6379")
40
+ ```yml
41
+ defaults: &defaults
42
+ corpid: '1**'
43
+ secret: '2**'
44
+
45
+ development: &development
46
+ <<: *defaults
45
47
 
46
- namespace = "qy_wechat_api:redis_storage"
48
+ test:
49
+ <<: *defaults
47
50
 
48
- # cleanup keys in the current namespace when restart server everytime.
49
- exist_keys = redis.keys("#{namespace}:*")
50
- exist_keys.each{|key|redis.del(key)}
51
+ production:
52
+ corpid: <%= ENV.fetch('QY_WEIXIN_CORPID') { '1**'' } %>
53
+ secret: <%= ENV.fetch('QY_WEIXIN_SECRET') { '2**'' } %>
54
+ ```
51
55
 
52
- redis_with_ns = Redis::Namespace.new("#{namespace}", redis: redis)
56
+ **说明:考虑access_token需要缓存,redis配置请参考官方文档 https://github.com/redis/redis-rb/blob/master/README.md**
53
57
 
54
- QyWechatApi.configure do |config|
55
- config.redis = redis_with_ns
56
- end
58
+ ## 读取配置
59
+ ```ruby
60
+ # 读取qy_weixin.yml配置
61
+ qy_weixin_config = YAML::load(ERB.new(File.read("#{Rails.root}/config/qy_weixin.yml")).result)[Rails.env]
57
62
  ```
63
+ 如果你是在Rails框架下,也可以使用Settingslogic读取yml配置:
64
+ ```ruby
65
+ # 引用gem
66
+ gem 'settingslogic', '2.0.9'
58
67
 
59
- # API基本用法
68
+ # your_project/app/settings/weixin_setting.rb
69
+ class WeixinSetting < Settingslogic
70
+ source "#{Rails.root}/config/weixin.yml"
71
+ namespace Rails.env
72
+ end
60
73
 
61
- 请务必结合:http://qydev.weixin.qq.com/wiki/index.php 理解以下API参数使用。
74
+ corpid = WeixinSetting.corpid
75
+ corp_secret = WeixinSetting.secret
76
+ ```
62
77
 
63
- ## 初始化
78
+ ## 实例对象
64
79
 
65
80
  ```ruby
66
- group_client = QyWechatApi::Client.new(corpid, corpsecret)
81
+ # 目录 file: your_project/config/initializers/qy_weixin.rb
67
82
 
68
- # 为了确保用户输入的corpid, corpsecret是准确的,请务必执行:
69
- group_client.is_valid?
83
+ QyWexinClient = YolQyWeixin::Client.new(
84
+ corpid: qy_weixin_config["corpid"],
85
+ secret: qy_weixin_config["secret"],
86
+ redis: RedisClient
87
+ )
70
88
  ```
71
89
 
72
- 如果需要使用通过第三方应用 **获取企业号access_token** API 获取的 access_token
73
- 做如下处理:
90
+ **说明:RedisClient为redis实例,如果没有配置可传nil,建议使用redis,考虑到access_token获取次数限制;**
91
+
92
+ # 基本用法
93
+
94
+ 如果需要获取的 access_token
74
95
 
75
96
  ```ruby
76
- options = {access_token: "access_token"}
77
- # redis_key 也可定制
78
- group_client = QyWechatApi::Client.new(corpid, corpsecret, options)
97
+ access_token = QyWexinClient.get_access_token
98
+ # 返回参考企业微信官方文档:https://work.weixin.qq.com/api/doc/90000/90135/91039
79
99
  ```
80
100
 
81
101
  ## 部门
82
102
 
83
103
  ```ruby
84
- group_client.department.create(name, parent_id, order=nil, id=nil)
85
- group_client.department.update(id, name, parent_id, order=nil)
86
- group_client.department.delete(id)
87
- group_client.department.list
104
+ 待补充,有需要可提issue到git:https://github.com/luojie2019/yol_qy_weixin.git
88
105
  ```
89
106
 
90
107
  ## 成员
91
108
 
92
109
  ```ruby
93
- # 创建成员
94
- group_client.user.create(user_id, name, options={})
95
-
96
- # 更新成员
97
- group_client.user.update(user_id, options={})
110
+ # 获取成员信息
111
+ access_token = QyWexinClient.get_user_info(open_id)
112
+ # 返回参考企业微信官方文档:https://open.work.weixin.qq.com/api/doc/90000/90135/90196
98
113
 
99
- # 删除成员
100
- group_client.user.delete(user_id)
101
-
102
- # 批量删除成员
103
- group_client.user.batch_delete(user_ids)
104
-
105
- # 获取成员
106
- group_client.user.get(user_id)
107
-
108
- # 获取部门成员
109
- group_client.user.simple_list(department_id, fetch_child=nil, status=nil)
114
+ # 获取反问用户信息
115
+ access_token = QyWexinClient.get_user_id(code)
116
+ # 返回参考企业微信官方文档:https://open.work.weixin.qq.com/api/doc/90000/90135/91707
117
+ ```
110
118
 
111
- # 获取部门成员(详情)
112
- group_client.user.full_list(department_id, fetch_child=nil, status=nil)
113
119
 
114
- # 邀请成员关注
115
- group_client.user.send_invitation(user_id, tips=nil)
120
+ ---
116
121
 
117
- # userid转换成openid接口(企业支付需要使用到)
118
- group_client.covert_to_open_id(user_id, agent_id="")
119
122
 
120
- # openid转换成userid接口
121
- group_client.covert_to_user_id(open_id)
122
- ```
123
+ 后续功能实现还待优化,有需要可提issue到git:https://github.com/luojie2019/yol_qy_weixin.git
123
124
 
124
125
  ## 标签
125
126
 
@@ -8,7 +8,9 @@ module YolQyWeixin
8
8
  include Connection::Qrcode
9
9
  include Connection::Template
10
10
  include Connection::User
11
-
11
+ include Connection::Department
12
+ include Connection::Message
13
+
12
14
  attr_accessor :corpid, :secret, :redis
13
15
 
14
16
  def initialize(options = {})
@@ -17,4 +19,4 @@ module YolQyWeixin
17
19
  @redis = options[:redis] || YolQyWeixin.configuration.redis
18
20
  end
19
21
  end
20
- end
22
+ end
@@ -18,26 +18,22 @@ module YolQyWeixin
18
18
  end
19
19
 
20
20
  def get_access_token
21
- # access_token = redis.find("access_token_#{appid}")
22
-
23
- # if access_token.nil?
24
- # access_token_res = get_token(corpid, secret)
25
-
26
- # # TODO:
27
- # access_token = JSON.parse(access_token_res)["access_token"] rescue nil
28
-
29
- # if access_token.nil?
30
- # raise Exception.new("Weixin access token authorize false, appid: #{appid},
31
- # appsecret: #{appsecret}, access_token_res: #{access_token_res.to_s}")
32
- # else
33
- # redis.save("access_token_#{appid}", access_token)
34
- # redis.expire("access_token_#{appid}", 7200)
35
- # end
36
- # end
37
-
38
- # access_token
39
- access_token_res = get_token(corpid, secret)
40
- access_token = access_token_res["access_token"] rescue nil
21
+ if redis.nil?
22
+ access_token_res = get_token(corpid, secret)
23
+ access_token = access_token_res["access_token"] rescue nil
24
+ else
25
+ access_token = redis.get("qywx_access_token")
26
+ if access_token.nil?
27
+ access_token_res = get_token(corpid, secret)
28
+ access_token = access_token_res["access_token"] rescue nil
29
+ if access_token.nil?
30
+ raise Exception.new("QyWeixin access token authorize false, corpid: #{corpid}")
31
+ else
32
+ redis.set("qywx_access_token", access_token)
33
+ redis.expire("qywx_access_token", 7200)
34
+ end
35
+ end
36
+ end
41
37
  access_token
42
38
  end
43
39
 
@@ -0,0 +1,17 @@
1
+ module YolQyWeixin
2
+ module Connection
3
+ module Department
4
+ def department_list(department_id=0)
5
+ http_get(department_list_url(department_id))
6
+ end
7
+
8
+
9
+
10
+ private
11
+
12
+ def department_list_url(department_id)
13
+ "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=#{get_access_token}&id=#{department_id}"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module YolQyWeixin
2
+ module Connection
3
+ module Message
4
+ def send_message(body)
5
+ http_post(send_url, body)
6
+ end
7
+
8
+ private
9
+
10
+ def send_url
11
+ "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=#{get_access_token}&debug=1"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,12 +1,28 @@
1
1
  module YolQyWeixin
2
2
  module Connection
3
3
  module User
4
+ def get_users_by_department(department_id, fetch_child=0)
5
+ http_get(get_users_by_department_url(department_id, fetch_child))
6
+ end
7
+
8
+ def get_user_id(code)
9
+ http_get(user_info_url(open_id))
10
+ end
11
+
4
12
  def get_user_info(open_id)
5
13
  http_get(user_info_url(open_id))
6
14
  end
7
15
 
8
16
  private
9
17
 
18
+ def get_users_by_department_url(department_id, fetch_child)
19
+ "https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token=#{get_access_token}&department_id=#{department_id}&fetch_child=#{fetch_child}"
20
+ end
21
+
22
+ def user_id_url(code)
23
+ "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=#{get_access_token}&code=#{code}"
24
+ end
25
+
10
26
  def user_info_url(open_id)
11
27
  "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=#{get_access_token}&userid=#{open_id}"
12
28
  end
@@ -1,3 +1,3 @@
1
1
  module YolQyWeixin
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -6,11 +6,11 @@ require 'yol_qy_weixin/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "yol_qy_weixin"
8
8
  spec.version = YolQyWeixin::VERSION
9
- spec.authors = ["cjl"]
10
- spec.email = ["chenjialiang@yeezon.com"]
9
+ spec.authors = ["luojie2019"]
10
+ spec.email = ["luojie@yolanda.hk"]
11
11
  spec.summary = %q{Shop middleware for Weixin.}
12
12
  spec.description = ""
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/luojie2019/yol_qy_weixin"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yol_qy_weixin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
- - cjl
7
+ - luojie2019
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-10 00:00:00.000000000 Z
11
+ date: 2021-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -82,23 +82,23 @@ dependencies:
82
82
  version: '0'
83
83
  description: ''
84
84
  email:
85
- - chenjialiang@yeezon.com
85
+ - luojie@yolanda.hk
86
86
  executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - ".DS_Store"
91
90
  - ".gitignore"
92
91
  - Gemfile
93
92
  - Gemfile.lock
94
93
  - LICENSE.txt
95
94
  - README.md
96
95
  - Rakefile
97
- - lib/.DS_Store
98
96
  - lib/yol_qy_weixin.rb
99
97
  - lib/yol_qy_weixin/client.rb
100
98
  - lib/yol_qy_weixin/connection.rb
101
99
  - lib/yol_qy_weixin/connections/base.rb
100
+ - lib/yol_qy_weixin/connections/department.rb
101
+ - lib/yol_qy_weixin/connections/message.rb
102
102
  - lib/yol_qy_weixin/connections/qrcode.rb
103
103
  - lib/yol_qy_weixin/connections/template.rb
104
104
  - lib/yol_qy_weixin/connections/user.rb
@@ -109,7 +109,7 @@ files:
109
109
  - lib/yol_qy_weixin/models/message.rb
110
110
  - lib/yol_qy_weixin/version.rb
111
111
  - yol_qy_weixin.gemspec
112
- homepage: ''
112
+ homepage: https://github.com/luojie2019/yol_qy_weixin
113
113
  licenses:
114
114
  - MIT
115
115
  metadata: {}
data/.DS_Store DELETED
Binary file
data/lib/.DS_Store DELETED
Binary file