wework-next 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.travis.yml +5 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +184 -0
  8. data/Rakefile +10 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/lib/wework/api/agent.rb +39 -0
  12. data/lib/wework/api/base.rb +94 -0
  13. data/lib/wework/api/contact.rb +7 -0
  14. data/lib/wework/api/corp.rb +27 -0
  15. data/lib/wework/api/methods/agent.rb +63 -0
  16. data/lib/wework/api/methods/appchat.rb +62 -0
  17. data/lib/wework/api/methods/approval.rb +16 -0
  18. data/lib/wework/api/methods/batch.rb +38 -0
  19. data/lib/wework/api/methods/checkin.rb +19 -0
  20. data/lib/wework/api/methods/crm.rb +11 -0
  21. data/lib/wework/api/methods/department.rb +36 -0
  22. data/lib/wework/api/methods/media.rb +20 -0
  23. data/lib/wework/api/methods/menu.rb +21 -0
  24. data/lib/wework/api/methods/message.rb +51 -0
  25. data/lib/wework/api/methods/provider.rb +38 -0
  26. data/lib/wework/api/methods/service.rb +53 -0
  27. data/lib/wework/api/methods/tag.rb +37 -0
  28. data/lib/wework/api/methods/user.rb +55 -0
  29. data/lib/wework/api/provider.rb +28 -0
  30. data/lib/wework/api/suite.rb +48 -0
  31. data/lib/wework/cipher.rb +98 -0
  32. data/lib/wework/config.rb +28 -0
  33. data/lib/wework/global_code.rb +327 -0
  34. data/lib/wework/mock_api.rb +34 -0
  35. data/lib/wework/request.rb +117 -0
  36. data/lib/wework/token/app_token.rb +21 -0
  37. data/lib/wework/token/base.rb +59 -0
  38. data/lib/wework/token/corp_token.rb +20 -0
  39. data/lib/wework/token/js_agent_ticket.rb +23 -0
  40. data/lib/wework/token/js_ticket.rb +23 -0
  41. data/lib/wework/token/provider_token.rb +21 -0
  42. data/lib/wework/token/suite_token.rb +21 -0
  43. data/lib/wework/version.rb +3 -0
  44. data/lib/wework.rb +39 -0
  45. data/mock_responses/agent/get.json +29 -0
  46. data/mock_responses/agent/list.json +16 -0
  47. data/mock_responses/agent/set.json +4 -0
  48. data/mock_responses/batch/getresult.json +8 -0
  49. data/mock_responses/department/list.json +24 -0
  50. data/mock_responses/error.json +4 -0
  51. data/mock_responses/files/party.csv +12 -0
  52. data/mock_responses/files/sample.amr +0 -0
  53. data/mock_responses/files/sample.mp4 +0 -0
  54. data/mock_responses/files/sample.txt +1 -0
  55. data/mock_responses/files/user.csv +2 -0
  56. data/mock_responses/files/zhiren.png +0 -0
  57. data/mock_responses/get_jsapi_ticket.json +6 -0
  58. data/mock_responses/gettoken.json +6 -0
  59. data/mock_responses/menu/get.json +24 -0
  60. data/mock_responses/service/get.json +0 -0
  61. data/mock_responses/service/get_corp_token.json +4 -0
  62. data/mock_responses/service/get_login_info.json +34 -0
  63. data/mock_responses/service/get_permanent_code.json +54 -0
  64. data/mock_responses/service/get_pre_auth_code.json +6 -0
  65. data/mock_responses/service/get_provider_token.json +4 -0
  66. data/mock_responses/service/get_suite_token.json +4 -0
  67. data/mock_responses/success.json +4 -0
  68. data/mock_responses/user/convert_to_openid.json +6 -0
  69. data/mock_responses/user/convert_to_userid.json +5 -0
  70. data/mock_responses/user/get.json +18 -0
  71. data/mock_responses/user/getuserdetail.json +10 -0
  72. data/mock_responses/user/getuserinfo.json +8 -0
  73. data/mock_responses/user/list.json +22 -0
  74. data/mock_responses/user/simplelist.json +11 -0
  75. data/wework.gemspec +33 -0
  76. metadata +243 -0
data/lib/wework.rb ADDED
@@ -0,0 +1,39 @@
1
+ require 'redis'
2
+ require 'active_support/all'
3
+ #require 'active_support/core_ext/object/blank'
4
+
5
+ LIB_PATH = "#{File.dirname(__FILE__)}/wework"
6
+ Dir["#{LIB_PATH}/api/methods/*.rb", "#{LIB_PATH}/token/*.rb"].each { |path| require path }
7
+
8
+ require 'wework/version'
9
+ require 'wework/cipher'
10
+ require 'wework/config'
11
+ require 'wework/api/base'
12
+ require 'wework/api/agent'
13
+ require 'wework/api/contact'
14
+ require 'wework/api/suite'
15
+ require 'wework/api/corp'
16
+ require 'wework/api/provider'
17
+
18
+
19
+ module Wework
20
+ API_ENDPOINT = 'https://qyapi.weixin.qq.com/cgi-bin/'.freeze
21
+ AUTHORIZE_ENDPOINT = 'https://open.weixin.qq.com/connect/oauth2/authorize'.freeze
22
+ SSO_AUTHORIZE_ENDPOINT = 'https://open.work.weixin.qq.com/wwopen/sso/3rd_qrConnect'.freeze
23
+ APP_AUTHORIZE_ENDPOINT = 'https://open.work.weixin.qq.com/3rdapp/install'.freeze
24
+ REGISTER_ENDPOINT = 'https://open.work.weixin.qq.com/3rdservice/wework/register'.freeze
25
+ HTTP_OK_STATUS = [200, 201].freeze
26
+ SUCCESS_CODE = 0
27
+
28
+ # Exceptions
29
+ class RedisNotConfigException < RuntimeError; end
30
+ class AccessTokenExpiredError < RuntimeError; end
31
+ class ResultErrorException < RuntimeError; end
32
+ class ResponseError < StandardError
33
+ attr_reader :error_code
34
+ def initialize(errcode, errmsg='')
35
+ @error_code = errcode
36
+ super "(#{error_code}) #{errmsg}"
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,29 @@
1
+ {
2
+ "errcode":0,
3
+ "errmsg": "ok",
4
+ "agentid": "1",
5
+ "name": "NAME",
6
+ "square_logo_url": "xxxxxxxx",
7
+ "description": "desc",
8
+ "allow_userinfos": {
9
+ "user":[
10
+ {
11
+ "userid":"id2"
12
+ },
13
+ {
14
+ "userid":"id3"
15
+ }
16
+ ]
17
+ },
18
+ "allow_partys":{
19
+ "partyid": [1]
20
+ },
21
+ "allow_tags":{
22
+ "tagid": [1,2,3]
23
+ },
24
+ "close": 0,
25
+ "redirect_domain": "www.qq.com",
26
+ "report_location_flag": 0,
27
+ "isreportenter": 0,
28
+ "home_url": "http://www.qq.com"
29
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "errcode":0,
3
+ "errmsg":"ok" ,
4
+ "agentlist":[
5
+ {
6
+ "agentid":1,
7
+ "name":"NAME",
8
+ "square_logo_url":"xxxxxxxx"
9
+ },
10
+ {
11
+ "agentid":2,
12
+ "name":"NAME",
13
+ "square_logo_url":"xxxxxxxx"
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "errcode":0,
3
+ "errmsg":"ok"
4
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "status": 1,
5
+ "type": "replace_user",
6
+ "total": 3,
7
+ "percentage": 33,
8
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "department": [
5
+ {
6
+ "id": 1,
7
+ "name": "杭州知人",
8
+ "parentid": 0,
9
+ "order": 10
10
+ },
11
+ {
12
+ "id": 2,
13
+ "name": "广州研发中心",
14
+ "parentid": 1,
15
+ "order": 11
16
+ },
17
+ {
18
+ "id": 3,
19
+ "name": "邮箱产品部",
20
+ "parentid": 2,
21
+ "order": 12
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "errcode": -1,
3
+ "errmsg": "Invalid input"
4
+ }
@@ -0,0 +1,12 @@
1
+ 部门名称,部门ID,父部门ID,排序
2
+ A管理组,18,1,0
3
+ A产品组,19,1,-1024
4
+ A系统组,20,1,0
5
+ A客服组,1715,1,0
6
+ A成都销售组,1716,1,0
7
+ ATower组,4693,1,1024
8
+ A上海销售组,5883,1,4096
9
+ A北京销售组,5884,1,5120
10
+ A杭州销售组,5885,1,6144
11
+ A广深销售组,7160,1,7168
12
+ A运营组,11052,1,8192
Binary file
Binary file
@@ -0,0 +1 @@
1
+ Wework is a ruby API wrapper for work wechat
@@ -0,0 +1,2 @@
1
+ 姓名,帐号,手机号,邮箱,所在部门,职位
2
+ 李丽,lili1983,13438802101,22705030@qq.com,1,财务
Binary file
@@ -0,0 +1,6 @@
1
+ {
2
+ "errcode":0,
3
+ "errmsg":"ok",
4
+ "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
5
+ "expires_in":7200
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "errcode":0,
3
+ "errmsg":"",
4
+ "access_token": "accesstoken000001",
5
+ "expires_in": 7200
6
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "button":[
3
+ {
4
+ "type":"click",
5
+ "name":"今日歌曲",
6
+ "key":"V1001_TODAY_MUSIC"
7
+ },
8
+ {
9
+ "name":"菜单",
10
+ "sub_button":[
11
+ {
12
+ "type":"view",
13
+ "name":"搜索",
14
+ "url":"http://www.soso.com/"
15
+ },
16
+ {
17
+ "type":"click",
18
+ "name":"赞一下我们",
19
+ "key":"V1001_GOOD"
20
+ }
21
+ ]
22
+ }
23
+ ]
24
+ }
File without changes
@@ -0,0 +1,4 @@
1
+ {
2
+ "access_token": "xxxxxx",
3
+ "expires_in": 7200
4
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "usertype": 1,
3
+ "user_info": {
4
+ "userid": "xxxx",
5
+ "name": "xxxx",
6
+ "avatar": "xxxx",
7
+ "email": "xxxx"
8
+ },
9
+ "corp_info": {
10
+ "corpid": "wx6c698d13f7a409a4"
11
+ },
12
+ "agent": [
13
+ {
14
+ "agentid": 0,
15
+ "auth_type": 1
16
+ },
17
+ {
18
+ "agentid": 1,
19
+ "auth_type": 1
20
+ },
21
+ {
22
+ "agentid": 2,
23
+ "auth_type": 1
24
+ }
25
+ ],
26
+ "auth_info": {
27
+ "department": [
28
+ {
29
+ "id": "2",
30
+ "writable": "true"
31
+ }
32
+ ]
33
+ }
34
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "access_token": "xxxxxx",
3
+ "expires_in": 7200,
4
+ "permanent_code": "xxxx",
5
+ "auth_corp_info":
6
+ {
7
+ "corpid": "xxxx",
8
+ "corp_name": "name",
9
+ "corp_type": "verified",
10
+ "corp_square_logo_url": "yyyyy",
11
+ "corp_user_max": 50,
12
+ "corp_agent_max": 30,
13
+ "corp_full_name":"full_name",
14
+ "verified_end_time":1431775834,
15
+ "subject_type": 1,
16
+ "corp_wxqrcode": "zzzzz"
17
+ },
18
+ "auth_info":
19
+ {
20
+ "agent" :
21
+ [
22
+ {
23
+ "agentid":1,
24
+ "name":"NAME",
25
+ "round_logo_url":"xxxxxx",
26
+ "square_logo_url":"yyyyyy",
27
+ "appid":1,
28
+ "privilege":
29
+ {
30
+ "level":1,
31
+ "allow_party":[1,2,3],
32
+ "allow_user":["zhansan","lisi"],
33
+ "allow_tag":[1,2,3],
34
+ "extra_party":[4,5,6],
35
+ "extra_user":["wangwu"],
36
+ "extra_tag":[4,5,6]
37
+ }
38
+ },
39
+ {
40
+ "agentid":2,
41
+ "name":"NAME2",
42
+ "round_logo_url":"xxxxxx",
43
+ "square_logo_url":"yyyyyy",
44
+ "appid":5
45
+ }
46
+ ]
47
+ },
48
+ "auth_user_info":
49
+ {
50
+ "email":"xxxx@aaa.com",
51
+ "mobile":"1234567890",
52
+ "userid":"aa"
53
+ }
54
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "errcode":0 ,
3
+ "errmsg":"ok" ,
4
+ "pre_auth_code":"xxxx",
5
+ "expires_in":1200
6
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "provider_access_token":"enLSZ5xxxxxxJRL",
3
+ "expires_in":7200
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "suite_access_token":"61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA",
3
+ "expires_in":7200
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok"
4
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "openid": "oDOGms-6yCnGrRovBj2yHij5JL6E",
5
+ "appid":"wxf874e15f78cc84a7"
6
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "userid": "zhangsan"
5
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "userid": "zhangsan",
5
+ "name": "李四",
6
+ "department": [1, 2],
7
+ "order": [1, 2],
8
+ "position": "后台工程师",
9
+ "mobile": "15913215421",
10
+ "gender": "1",
11
+ "email": "zhangsan@gzdev.com",
12
+ "isleader": 1,
13
+ "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
14
+ "telephone": "020-123456",
15
+ "english_name": "jackzhang",
16
+ "extattr": {"attrs":[{"name":"爱好","value":"旅游"},{"name":"卡号","value":"1234567234"}]},
17
+ "status": 1
18
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "userid":"lisi",
3
+ "name":"李四",
4
+ "department":[3],
5
+ "position": "后台工程师",
6
+ "mobile":"15050495892",
7
+ "gender":1,
8
+ "email":"xxx@xx.com",
9
+ "avatar":"http://shp.qpic.cn/bizmp/xxxxxxxxxxx/0"
10
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "UserId":"USERID",
5
+ "DeviceId":"DEVICEID",
6
+ "user_ticket": "USER_TICKET",
7
+ "expires_in":7200
8
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "userlist": [
5
+ {
6
+ "userid": "zhangsan",
7
+ "name": "李四",
8
+ "department": [1, 2],
9
+ "order": [1, 2],
10
+ "position": "后台工程师",
11
+ "mobile": "15913215421",
12
+ "gender": "1",
13
+ "email": "zhangsan@gzdev.com",
14
+ "isleader": 0,
15
+ "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
16
+ "telephone": "020-123456",
17
+ "english_name": "jackzhang",
18
+ "status": 1,
19
+ "extattr": {"attrs":[{"name":"爱好","value":"旅游"},{"name":"卡号","value":"1234567234"}]}
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "errcode": 0,
3
+ "errmsg": "ok",
4
+ "userlist": [
5
+ {
6
+ "userid": "zhangsan",
7
+ "name": "李四",
8
+ "department": [1, 2]
9
+ }
10
+ ]
11
+ }
data/wework.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'wework/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "wework-next"
8
+ spec.version = Wework::VERSION
9
+ spec.authors = ["rocky"]
10
+ spec.email = ["xurenlu@gmail.com"]
11
+
12
+ spec.summary = spec.description = %q{Ruby API wrapper for wechat work「企业微信」}
13
+ spec.homepage = "https://github.com/xurenlu/wework-next"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.bindir = "bin"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_dependency 'http', '>= 2.2'
24
+ spec.add_dependency 'activesupport', '>= 7.0'
25
+ spec.add_dependency 'redis'
26
+ spec.add_dependency 'builder', '>= 3.2'
27
+ spec.add_dependency 'sinatra', '>= 2.0'
28
+
29
+ spec.add_development_dependency "bundler", "~> 2.5"
30
+ spec.add_development_dependency "minitest", "~> 5.10"
31
+ spec.add_development_dependency 'webmock', '~> 3.4'
32
+ spec.add_development_dependency 'mock_redis', '~>0.18'
33
+ end