wechat 0.7.15 → 0.7.16

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3dc56f21f48d36e92b661e701ef739bf57c0e19c
4
- data.tar.gz: a3e8fa2c4e22491607a006695992a544d54020d1
3
+ metadata.gz: 23916edc0bd81f54751cecf9e3936e7c9c0e3d66
4
+ data.tar.gz: 7948b1899e0926c4f7c7c1da2e18b3b7ea63e52e
5
5
  SHA512:
6
- metadata.gz: 2fa99da16ca5d3587970a1a81bcec0b301bea9c1bd1e29811bd992452deb0f9554382cf464056c5a7a88ab709dc406f8495734bdd829077bfebb594593b0dda1
7
- data.tar.gz: 15ce193b4dd2939f3d79e3d98e0666de9b6b451505ea376a801cefb76090ef108ad29ae6e258e65c6f3b6747ba36ff2dbe2a094b4a3e750d6af7fd94b4847c23
6
+ metadata.gz: 529950c0422c7ec2e9c20ee8de79bf879528e94d47a61074f2d82bf05ead6305137824304ad38c334bd79bbae9b05ec9f7e0fdca7535b82ebec97502dd6369f9
7
+ data.tar.gz: 999bda64d6631f8f221d3b4d5e1a6e625bbb3e23adaffe4037856dfce0bc774709731a6289c50e5d307e9c1d8240bc8e2b2974ada59a70687fe09bf9ea572794
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.7.16 (released at 7/27/2016)
4
+
5
+ * FIX: consider '' in params as equal with nil, in ControllerApi#wechat_public_oauth2, by @snow #135
6
+ * New tag API for public account, by @pynixwang #127
7
+ * fix SSLv3 error by use TLSv1_client, by @IvanChou #133
8
+
3
9
  ## v0.7.15 (released at 7/03/2016)
4
10
 
5
11
  * RSpec testing case on Rails 5 now.
@@ -23,25 +23,25 @@ WeChat gem 可以帮助开发者方便地在Rails环境中集成微信[公众平
23
23
 
24
24
  ## 安装
25
25
 
26
- Using `gem install`
26
+ 使用 `gem install`
27
27
 
28
28
  ```
29
29
  gem install "wechat"
30
30
  ```
31
31
 
32
- Or add to your app's `Gemfile`:
32
+ 或者添加下面这行到 `Gemfile`:
33
33
 
34
34
  ```
35
35
  gem 'wechat'
36
36
  ```
37
37
 
38
- Run the following command to install it:
38
+ 运行下面这行代码来安装:
39
39
 
40
40
  ```console
41
41
  bundle install
42
42
  ```
43
43
 
44
- Run the generator:
44
+ 运行下面这行代码来生成必要文件:
45
45
 
46
46
  ```console
47
47
  rails generate wechat:install
@@ -266,7 +266,7 @@ Wechat commands:
266
266
  wechat custom_text [OPENID, TEXT_MESSAGE] # 发送文字客服消息
267
267
  wechat custom_video [OPENID, VIDEO_PATH] # 发送视频客服消息
268
268
  wechat custom_voice [OPENID, VOICE_PATH] # 发送语音客服消息
269
- wechat customservice_getonlinekflist # 获取在线客服接待信息
269
+ wechat customservice_getonlinekflist # 获取在线客服接待信息
270
270
  wechat group_create [GROUP_NAME] # 创建分组
271
271
  wechat group_delete [GROUP_ID] # 删除分组
272
272
  wechat group_update [GROUP_ID, NEW_GROUP_NAME] # 修改分组名
@@ -280,18 +280,25 @@ Wechat commands:
280
280
  wechat media_create [MEDIA_TYPE, PATH] # 媒体上传
281
281
  wechat media_uploadimg [IMAGE_PATH] # 上传图文消息内的图片
282
282
  wechat menu # 当前菜单
283
- wechat menu_addconditional [CONDITIONAL_MENU_YAML_PATH] # 创建个性化菜单
283
+ wechat menu_addconditional [CONDITIONAL_MENU_YAML_PATH] # 创建个性化菜单
284
284
  wechat menu_create [MENU_YAML_PATH] # 创建菜单
285
- wechat menu_delconditional [MENU_ID] # 删除个性化菜单
285
+ wechat menu_delconditional [MENU_ID] # 删除个性化菜单
286
286
  wechat menu_delete # 删除菜单
287
- wechat menu_trymatch [USER_ID] # 测试个性化菜单匹配结果
287
+ wechat menu_trymatch [USER_ID] # 测试个性化菜单匹配结果
288
288
  wechat qrcode_create_limit_scene [SCENE_ID_OR_STR] # 请求永久二维码
289
289
  wechat qrcode_create_scene [SCENE_ID, EXPIRE_SECONDS] # 请求临时二维码
290
290
  wechat qrcode_download [TICKET, QR_CODE_PIC_PATH] # 通过ticket下载二维码
291
291
  wechat short_url [LONG_URL] # 长链接转短链接
292
+ wechat tag [TAGID] # 获取标签下粉丝列表
293
+ wechat tag_add_user [TAG_ID, OPEN_IDS] # 批量为用户打标签
294
+ wechat tag_create [TAGNAME, TAG_ID] # 创建标签
295
+ wechat tag_del_user [TAG_ID, OPEN_IDS] # 批量为用户取消标签
296
+ wechat tag_delete [TAG_ID] # 删除标签
297
+ wechat tag_update [TAG_ID, TAGNAME] # 更新标签名字
298
+ wechat tags # 获取所有标签
292
299
  wechat template_message [OPENID, TEMPLATE_YAML_PATH] # 模板消息接口
293
300
  wechat user [OPEN_ID] # 获取用户基本信息
294
- wechat user_batchget [OPEN_ID_LIST] # 批量获取用户基本信息
301
+ wechat user_batchget [OPEN_ID_LIST] # 批量获取用户基本信息
295
302
  wechat user_change_group [OPEN_ID, TO_GROUP_ID] # 移动用户分组
296
303
  wechat user_group [OPEN_ID] # 查询用户所在分组
297
304
  wechat user_update_remark [OPEN_ID, REMARK] # 设置备注名
@@ -330,9 +337,12 @@ Wechat commands:
330
337
  wechat media_create [MEDIA_TYPE, PATH] # 媒体上传
331
338
  wechat media_uploadimg [IMAGE_PATH] # 上传图文消息内的图片
332
339
  wechat menu # 当前菜单
340
+ wechat menu_addconditional [CONDITIONAL_MENU_YAML_PATH] # 创建个性化菜单
333
341
  wechat menu_create [MENU_YAML_PATH] # 创建菜单
342
+ wechat menu_delconditional [MENU_ID] # 删除个性化菜单
334
343
  wechat menu_delete # 删除菜单
335
- wechat message_send [USERID, TEXT_MESSAGE] # 发送文字消息
344
+ wechat menu_trymatch [USER_ID] # 测试个性化菜单匹配结果
345
+ wechat message_send [OPENID, TEXT_MESSAGE] # 发送文字消息
336
346
  wechat qrcode_download [TICKET, QR_CODE_PIC_PATH] # 通过ticket下载二维码
337
347
  wechat tag [TAG_ID] # 获取标签成员
338
348
  wechat tag_add_department [TAG_ID, PARTY_IDS] # 增加标签部门
@@ -342,7 +352,7 @@ Wechat commands:
342
352
  wechat tag_del_user [TAG_ID, USER_IDS] # 删除标签成员
343
353
  wechat tag_delete [TAG_ID] # 删除标签
344
354
  wechat tag_update [TAG_ID, TAGNAME] # 更新标签名字
345
- wechat tags # 获取标签列表
355
+ wechat tags # 获取所有标签
346
356
  wechat template_message [OPENID, TEMPLATE_YAML_PATH] # 模板消息接口
347
357
  wechat upload_replaceparty [BATCH_PARTY_CSV_PATH] # 上传文件方式全量覆盖部门
348
358
  wechat upload_replaceuser [BATCH_USER_CSV_PATH] # 上传文件方式全量覆盖成员
data/README.md CHANGED
@@ -282,7 +282,7 @@ Wechat commands:
282
282
  wechat custom_text [OPENID, TEXT_MESSAGE] # 发送文字客服消息
283
283
  wechat custom_video [OPENID, VIDEO_PATH] # 发送视频客服消息
284
284
  wechat custom_voice [OPENID, VOICE_PATH] # 发送语音客服消息
285
- wechat customservice_getonlinekflist # 获取在线客服接待信息
285
+ wechat customservice_getonlinekflist # 获取在线客服接待信息
286
286
  wechat group_create [GROUP_NAME] # 创建分组
287
287
  wechat group_delete [GROUP_ID] # 删除分组
288
288
  wechat group_update [GROUP_ID, NEW_GROUP_NAME] # 修改分组名
@@ -296,18 +296,25 @@ Wechat commands:
296
296
  wechat media_create [MEDIA_TYPE, PATH] # 媒体上传
297
297
  wechat media_uploadimg [IMAGE_PATH] # 上传图文消息内的图片
298
298
  wechat menu # 当前菜单
299
- wechat menu_addconditional [CONDITIONAL_MENU_YAML_PATH] # 创建个性化菜单
299
+ wechat menu_addconditional [CONDITIONAL_MENU_YAML_PATH] # 创建个性化菜单
300
300
  wechat menu_create [MENU_YAML_PATH] # 创建菜单
301
- wechat menu_delconditional [MENU_ID] # 删除个性化菜单
301
+ wechat menu_delconditional [MENU_ID] # 删除个性化菜单
302
302
  wechat menu_delete # 删除菜单
303
- wechat menu_trymatch [USER_ID] # 测试个性化菜单匹配结果
303
+ wechat menu_trymatch [USER_ID] # 测试个性化菜单匹配结果
304
304
  wechat qrcode_create_limit_scene [SCENE_ID_OR_STR] # 请求永久二维码
305
305
  wechat qrcode_create_scene [SCENE_ID, EXPIRE_SECONDS] # 请求临时二维码
306
306
  wechat qrcode_download [TICKET, QR_CODE_PIC_PATH] # 通过ticket下载二维码
307
307
  wechat short_url [LONG_URL] # 长链接转短链接
308
+ wechat tag [TAGID] # 获取标签下粉丝列表
309
+ wechat tag_add_user [TAG_ID, OPEN_IDS] # 批量为用户打标签
310
+ wechat tag_create [TAGNAME, TAG_ID] # 创建标签
311
+ wechat tag_del_user [TAG_ID, OPEN_IDS] # 批量为用户取消标签
312
+ wechat tag_delete [TAG_ID] # 删除标签
313
+ wechat tag_update [TAG_ID, TAGNAME] # 更新标签名字
314
+ wechat tags # 获取所有标签
308
315
  wechat template_message [OPENID, TEMPLATE_YAML_PATH] # 模板消息接口
309
316
  wechat user [OPEN_ID] # 获取用户基本信息
310
- wechat user_batchget [OPEN_ID_LIST] # 批量获取用户基本信息
317
+ wechat user_batchget [OPEN_ID_LIST] # 批量获取用户基本信息
311
318
  wechat user_change_group [OPEN_ID, TO_GROUP_ID] # 移动用户分组
312
319
  wechat user_group [OPEN_ID] # 查询用户所在分组
313
320
  wechat user_update_remark [OPEN_ID, REMARK] # 设置备注名
@@ -346,9 +353,12 @@ Wechat commands:
346
353
  wechat media_create [MEDIA_TYPE, PATH] # 媒体上传
347
354
  wechat media_uploadimg [IMAGE_PATH] # 上传图文消息内的图片
348
355
  wechat menu # 当前菜单
356
+ wechat menu_addconditional [CONDITIONAL_MENU_YAML_PATH] # 创建个性化菜单
349
357
  wechat menu_create [MENU_YAML_PATH] # 创建菜单
358
+ wechat menu_delconditional [MENU_ID] # 删除个性化菜单
350
359
  wechat menu_delete # 删除菜单
351
- wechat message_send [USERID, TEXT_MESSAGE] # 发送文字消息
360
+ wechat menu_trymatch [USER_ID] # 测试个性化菜单匹配结果
361
+ wechat message_send [OPENID, TEXT_MESSAGE] # 发送文字消息
352
362
  wechat qrcode_download [TICKET, QR_CODE_PIC_PATH] # 通过ticket下载二维码
353
363
  wechat tag [TAG_ID] # 获取标签成员
354
364
  wechat tag_add_department [TAG_ID, PARTY_IDS] # 增加标签部门
@@ -358,7 +368,7 @@ Wechat commands:
358
368
  wechat tag_del_user [TAG_ID, USER_IDS] # 删除标签成员
359
369
  wechat tag_delete [TAG_ID] # 删除标签
360
370
  wechat tag_update [TAG_ID, TAGNAME] # 更新标签名字
361
- wechat tags # 获取标签列表
371
+ wechat tags # 获取所有标签
362
372
  wechat template_message [OPENID, TEMPLATE_YAML_PATH] # 模板消息接口
363
373
  wechat upload_replaceparty [BATCH_PARTY_CSV_PATH] # 上传文件方式全量覆盖部门
364
374
  wechat upload_replaceuser [BATCH_USER_CSV_PATH] # 上传文件方式全量覆盖成员
data/bin/wechat CHANGED
@@ -38,7 +38,9 @@ class App < Thor
38
38
  puts 'File downloaded'
39
39
  end
40
40
 
41
- if Wechat::ApiLoader.with(options).is_a?(Wechat::CorpApi)
41
+ in_corp_api_cmd = Wechat::ApiLoader.with(options).is_a?(Wechat::CorpApi)
42
+
43
+ if in_corp_api_cmd
42
44
  desc 'department_create [NAME, PARENT_ID]', '创建部门'
43
45
  method_option :parentid, aliases: '-p', desc: '父亲部门id。根部门id为1'
44
46
  def department_create(name)
@@ -114,53 +116,16 @@ class App < Thor
114
116
  puts wechat_api.invite_user(userid)
115
117
  end
116
118
 
117
- desc 'tag_create [TAGNAME, TAG_ID]', '创建标签'
118
- method_option :tagid, aliases: '-id', desc: '整型,指定此参数时新增的标签会生成对应的标签id,不指定时则以目前最大的id自增'
119
- def tag_create(name)
120
- api_opts = options.slice(:tagid)
121
- puts wechat_api.tag_create(name, api_opts[:tagid])
122
- end
123
-
124
- desc 'tag_update [TAG_ID, TAGNAME]', '更新标签名字'
125
- def tag_update(tagid, tagname)
126
- puts wechat_api.tag_update(tagid, tagname)
127
- end
128
-
129
- desc 'tag_delete [TAG_ID]', '删除标签'
130
- def tag_delete(tagid)
131
- puts wechat_api.tag_delete(tagid)
132
- end
133
-
134
- desc 'tag [TAG_ID]', '获取标签成员'
135
- def tag(tagid)
136
- puts wechat_api.tag(tagid)
137
- end
138
-
139
- desc 'tag_add_user [TAG_ID, USER_IDS]', '增加标签成员'
140
- def tag_add_user(tagid, userids)
141
- puts wechat_api.tag_add_user(tagid, userids.split(','))
142
- end
143
-
144
119
  desc 'tag_add_department [TAG_ID, PARTY_IDS]', '增加标签部门'
145
120
  def tag_add_department(tagid, partyids)
146
121
  puts wechat_api.tag_add_user(tagid, nil, partyids.split(','))
147
122
  end
148
123
 
149
- desc 'tag_del_user [TAG_ID, USER_IDS]', '删除标签成员'
150
- def tag_del_user(tagid, userids)
151
- puts wechat_api.tag_del_user(tagid, userids.split(','))
152
- end
153
-
154
124
  desc 'tag_del_department [TAG_ID, PARTY_IDS]', '删除标签部门'
155
125
  def tag_del_department(tagid, partyids)
156
126
  puts wechat_api.tag_del_user(tagid, nil, partyids.split(','))
157
127
  end
158
128
 
159
- desc 'tags', '获取标签列表'
160
- def tags
161
- puts wechat_api.tags
162
- end
163
-
164
129
  desc 'batch_job_result [JOB_ID]', '获取异步任务结果'
165
130
  def batch_job_result(job_id)
166
131
  puts wechat_api.batch_job_result(job_id)
@@ -441,6 +406,59 @@ class App < Thor
441
406
  template = YAML.load(File.read(template_yaml_path))
442
407
  puts wechat_api.template_message_send Wechat::Message.to(openid).template(template['template'])
443
408
  end
409
+
410
+ desc 'tags', '获取所有标签'
411
+ def tags
412
+ puts wechat_api.tags
413
+ end
414
+
415
+ desc 'tag_create [TAGNAME, TAG_ID]', '创建标签'
416
+ method_option :tagid, aliases: '-id', desc: '整型,指定此参数时新增的标签会生成对应的标签id,不指定时则以目前最大的id自增' if in_corp_api_cmd
417
+ def tag_create(tag_name)
418
+ if in_corp_api_cmd
419
+ api_opts = options.slice(:tagid)
420
+ puts wechat_api.tag_create(tag_name, api_opts[:tagid])
421
+ else
422
+ puts wechat_api.tag_create(tag_name)
423
+ end
424
+ end
425
+
426
+ desc 'tag_update [TAG_ID, TAGNAME]', '更新标签名字'
427
+ def tag_update(tagid, tagname)
428
+ puts wechat_api.tag_update(tagid, tagname)
429
+ end
430
+
431
+ desc 'tag_delete [TAG_ID]', '删除标签'
432
+ def tag_delete(tagid)
433
+ puts wechat_api.tag_delete(tagid)
434
+ end
435
+
436
+ if in_corp_api_cmd
437
+ desc 'tag_add_user [TAG_ID, USER_IDS]', '增加标签成员'
438
+ else
439
+ desc 'tag_add_user [TAG_ID, OPEN_IDS]', '批量为用户打标签'
440
+ end
441
+ def tag_add_user(tagid, open_or_user_ids)
442
+ puts wechat_api.tag_add_user(tagid, open_or_user_ids.split(','))
443
+ end
444
+
445
+ if in_corp_api_cmd
446
+ desc 'tag_del_user [TAG_ID, USER_IDS]', '删除标签成员'
447
+ else
448
+ desc 'tag_del_user [TAG_ID, OPEN_IDS]', '批量为用户取消标签'
449
+ end
450
+ def tag_del_user(tagid, open_or_user_ids)
451
+ puts wechat_api.tag_del_user(tagid, open_or_user_ids.split(','))
452
+ end
453
+
454
+ if in_corp_api_cmd
455
+ desc 'tag [TAG_ID]', '获取标签成员'
456
+ else
457
+ desc 'tag [TAGID]', '获取标签下粉丝列表'
458
+ end
459
+ def tag(tagid)
460
+ puts wechat_api.tag tagid
461
+ end
444
462
  end
445
463
 
446
464
  App.start
@@ -133,6 +133,34 @@ module Wechat
133
133
  get 'customservice/getonlinekflist'
134
134
  end
135
135
 
136
+ def tags
137
+ get 'tags/get'
138
+ end
139
+
140
+ def tag_create(tag_name)
141
+ post 'tags/create', JSON.generate(tag: { name: tag_name })
142
+ end
143
+
144
+ def tag_update(tagid, new_tag_name)
145
+ post 'tags/update', JSON.generate(tag: { id: tagid, name: new_tag_name })
146
+ end
147
+
148
+ def tag_delete(tagid)
149
+ post 'tags/delete', JSON.generate(tag: { id: tagid })
150
+ end
151
+
152
+ def tag_add_user(tagid, openids)
153
+ post 'tags/members/batchtagging', JSON.generate(openid_list: openids, tagid: tagid)
154
+ end
155
+
156
+ def tag_del_user(tagid, openids)
157
+ post 'tags/members/batchuntagging', JSON.generate(openid_list: openids, tagid: tagid)
158
+ end
159
+
160
+ def tag(tagid, next_openid = '')
161
+ post 'user/tag/get', JSON.generate(tagid: tagid, next_openid: next_openid)
162
+ end
163
+
136
164
  OAUTH2_BASE = 'https://api.weixin.qq.com/sns/'.freeze
137
165
 
138
166
  def web_access_token(code)
@@ -34,7 +34,9 @@ module Wechat
34
34
  def wechat_public_oauth2(oauth2_url)
35
35
  if cookies.signed_or_encrypted[:we_openid].blank? && params[:code].blank?
36
36
  redirect_to oauth2_url
37
- elsif cookies.signed_or_encrypted[:we_openid].blank? && params[:code].present? && params[:state] == wechat.jsapi_ticket.oauth2_state
37
+ elsif cookies.signed_or_encrypted[:we_openid].blank? &&
38
+ params[:code].present? &&
39
+ params[:state].to_s == wechat.jsapi_ticket.oauth2_state.to_s # params[:state] maybe nil and wechat.jsapi_ticket.oauth2_state may be nil
38
40
  access_info = wechat.web_access_token(params[:code])
39
41
  cookies.signed_or_encrypted[:we_openid] = { value: access_info['openid'], expires: self.class.oauth2_cookie_duration.from_now }
40
42
  yield access_info['openid'], access_info
@@ -8,6 +8,7 @@ module Wechat
8
8
  @base = base
9
9
  HTTP.timeout(:global, write: timeout, connect: timeout, read: timeout)
10
10
  @ssl_context = OpenSSL::SSL::SSLContext.new
11
+ @ssl_context.ssl_version = :TLSv1_client
11
12
  @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE if skip_verify_ssl
12
13
  end
13
14
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wechat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.15
4
+ version: 0.7.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Skinnyworm
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-07-03 00:00:00.000000000 Z
12
+ date: 2016-07-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport