wechat 0.11.6 → 0.11.11

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: 13a9ee494b1cd4d180d568534218b84c00d096d9437310e9535557b38957871c
4
- data.tar.gz: ae888cf17a643f439314fb30d283dc37a5ee6935a597f39db56344a6ced3e345
3
+ metadata.gz: 0f0bb39391f507bdd4855e02eb9d56a1e7b110c6c9fd8c16b65a984af1d376f1
4
+ data.tar.gz: 673b26d9e77bf7d652fd0bfa30fdddf9516fc7b0a15bdf8b53e471fdb4db606c
5
5
  SHA512:
6
- metadata.gz: a5d2145947a65a320695573545c0c2e8e13c34b18a3805b9993194fdd64f3ce531b39e82285740d0be0b12886e597565fa70298eff406cb032741018599e2c90
7
- data.tar.gz: 420c2c2f98a1647da669c92509f30f2fd393738f2a6f51e6d3a8ad714c4dd650a987bf5f73501a936f1b2236e1c7ec8a1858d56313f59f70e7635e068cf61822
6
+ metadata.gz: 841297efa8f80c68801a9348c253b7666b501f0cec535f39e42d268d6e5188c9c0f551c3d1af72282194cc97e9c65bcb1e30a9359b208d345a8a5e237c46858e
7
+ data.tar.gz: 31a0a90843b8ca7357563fc9cbf53cf795a1ef58d7292bae725caaf4b5868997975176b0cf26b9b2259c5378d04eee28053d3e91d6d26a057bdab5aaf29b39f9
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.11.11 (released at 09/13/2020)
4
+
5
+ * FIX: fix_load_controller_wechat not support MP type, by @Msms-NJ #281
6
+
7
+ ## v0.11.10 (released at 09/02/2020)
8
+
9
+ * ADD: Wechat::MpApi.wxa_msg_sec_check.
10
+
11
+ ## v0.11.9 (released at 04/29/2020)
12
+
13
+ * CHG: upgrade ssl_version to 1.2 by @paicha #276
14
+
15
+ ## v0.11.8 (released at 03/09/2020)
16
+
17
+ * ADD: Wechat::CorpApi.news_message_send
18
+ * FIX: Wechat API Change material/get_material. reported by @0000sir #275
19
+
20
+ ## v0.11.7 (released at 11/15/2019)
21
+
22
+ * ADD: Wechat::MpApi.subscribe_message_send. by @paicha #271
23
+ * FIX: FrozenError: can't modify frozen String. by @paicha #272
24
+ * New translatecontent support.
25
+
3
26
  ## v0.11.6 (released at 09/02/2019)
4
27
 
5
28
  * Fix private method `next_migration_number` introduced at #267, by @zpdsky #270
@@ -3,7 +3,7 @@ WeChat [![Gem Version](https://badge.fury.io/rb/wechat.svg)](https://rubygems.or
3
3
 
4
4
  [![Join the chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Eric-Guo/wechat?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
5
5
 
6
- WeChat gem帮助开发者方便地在Rails环境中集成[微信公众平台](https://mp.weixin.qq.com/)[企业微信](https://qy.weixin.qq.com),包括功能:
6
+ WeChat gem帮助开发者方便地在Rails环境中集成[微信公众平台](https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html)[企业微信](https://work.weixin.qq.com/api/doc)和[小程序](https://developers.weixin.qq.com/miniprogram/dev/framework/),包括功能:
7
7
 
8
8
  - 微信公众平台/企业微信[发送消息](http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF)API(命令行和Web环境都可以使用)
9
9
  - [接收消息](http://qydev.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E6%B6%88%E6%81%AF%E4%B8%8E%E4%BA%8B%E4%BB%B6)(必须运行Web服务器)
@@ -360,7 +360,7 @@ Wechat Public Account commands:
360
360
  wechat group_delete [GROUP_ID] # 删除分组
361
361
  wechat group_update [GROUP_ID, NEW_GROUP_NAME] # 修改分组名
362
362
  wechat groups # 查询所有分组
363
- wechat material [MEDIA_ID, PATH] # 永久媒体下载
363
+ wechat material_get [MEDIA_ID, PATH] # 永久媒体下载
364
364
  wechat material_add [MEDIA_TYPE, PATH] # 永久媒体上传
365
365
  wechat material_count # 获取永久素材总数
366
366
  wechat material_delete [MEDIA_ID] # 删除永久素材
@@ -392,12 +392,14 @@ Wechat Public Account commands:
392
392
  wechat tag_update [TAG_ID, TAGNAME] # 更新标签名字
393
393
  wechat tags # 获取所有标签
394
394
  wechat template_message [OPENID, TEMPLATE_YAML_PATH] # 模板消息接口
395
+ wechat translatecontent [CONTENT] # AI开放接口-微信翻译
395
396
  wechat user [OPEN_ID] # 获取用户基本信息
396
397
  wechat user_batchget [OPEN_ID_LIST] # 批量获取用户基本信息
397
398
  wechat user_change_group [OPEN_ID, TO_GROUP_ID] # 移动用户分组
398
399
  wechat user_group [OPEN_ID] # 查询用户所在分组
399
400
  wechat user_update_remark [OPEN_ID, REMARK] # 设置备注名
400
401
  wechat users # 关注者列表
402
+ wechat wxa_msg_sec_check [CONTENT] # 检查一段文本是否含有违法违规内容。
401
403
  wechat wxacode_download [WXA_CODE_PIC_PATH, PATH, WIDTH] # 下载小程序码
402
404
  ```
403
405
 
data/README.md CHANGED
@@ -7,7 +7,7 @@ WeChat [![Gem Version](https://badge.fury.io/rb/wechat.svg)](https://rubygems.or
7
7
 
8
8
  [Wechat](http://www.wechat.com/) is a Chinese multi-purpose messaging, social media and mobile payment app developed by Tencent. It was first released in 2011, and by 2018 it was one of the world's largest standalone mobile apps by monthly active users, with over 1 billion monthly active users (902 million daily active users). (According to [wiki](https://en.wikipedia.org/wiki/WeChat))
9
9
 
10
- WeChat gem helps Rails developers integrate [WeChat Official Accounts Platform](https://mp.weixin.qq.com/) and [Wechat Enterprise](https://qy.weixin.qq.com) easily, including features:
10
+ WeChat gem helps Rails developers integrate [WeChat Official Accounts Platform](https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html) or [Wechat mini program](https://developers.weixin.qq.com/miniprogram/dev/framework/) easily, including features:
11
11
 
12
12
  - [Sending message](http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF) API(can be both accessed via console or rails server)
13
13
  - [Receiving message](http://qydev.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E6%B6%88%E6%81%AF%E4%B8%8E%E4%BA%8B%E4%BB%B6)(rails server is required to be running)
@@ -391,7 +391,7 @@ Wechat Public Account commands:
391
391
  wechat group_delete [GROUP_ID] # 删除分组
392
392
  wechat group_update [GROUP_ID, NEW_GROUP_NAME] # 修改分组名
393
393
  wechat groups # 查询所有分组
394
- wechat material [MEDIA_ID, PATH] # 永久媒体下载
394
+ wechat material_get [MEDIA_ID, PATH] # 永久媒体下载
395
395
  wechat material_add [MEDIA_TYPE, PATH] # 永久媒体上传
396
396
  wechat material_count # 获取永久素材总数
397
397
  wechat material_delete [MEDIA_ID] # 删除永久素材
@@ -423,12 +423,14 @@ Wechat Public Account commands:
423
423
  wechat tag_update [TAG_ID, TAGNAME] # 更新标签名字
424
424
  wechat tags # 获取所有标签
425
425
  wechat template_message [OPENID, TEMPLATE_YAML_PATH] # 模板消息接口
426
+ wechat translatecontent [CONTENT] # AI开放接口-微信翻译
426
427
  wechat user [OPEN_ID] # 获取用户基本信息
427
428
  wechat user_batchget [OPEN_ID_LIST] # 批量获取用户基本信息
428
429
  wechat user_change_group [OPEN_ID, TO_GROUP_ID] # 移动用户分组
429
430
  wechat user_group [OPEN_ID] # 查询用户所在分组
430
431
  wechat user_update_remark [OPEN_ID, REMARK] # 设置备注名
431
432
  wechat users # 关注者列表
433
+ wechat wxa_msg_sec_check [CONTENT] # 检查一段文本是否含有违法违规内容。
432
434
  wechat wxacode_download [WXA_CODE_PIC_PATH, PATH, WIDTH] # 下载小程序码
433
435
  wechat clear_quota # 接口调用次数清零
434
436
  ```
data/bin/wechat CHANGED
@@ -225,6 +225,11 @@ class App < Thor
225
225
  puts 'WXA Code File downloaded'
226
226
  end
227
227
 
228
+ desc 'wxa_msg_sec_check [CONTENT]', '检查一段文本是否含有违法违规内容。'
229
+ def wxa_msg_sec_check(content)
230
+ puts wechat_api.wxa_msg_sec_check(content)
231
+ end
232
+
228
233
  desc 'media_uploadnews [MPNEWS_YAML_PATH]', '上传图文消息素材'
229
234
  def media_uploadnews(mpnews_yaml_path)
230
235
  mpnew = YAML.load(File.read(mpnews_yaml_path))
@@ -315,6 +320,11 @@ class App < Thor
315
320
  def queryrecoresultfortext(voice_id)
316
321
  puts wechat_api.queryrecoresultfortext(voice_id)
317
322
  end
323
+
324
+ desc 'translatecontent [CONTENT]', 'AI开放接口-微信翻译'
325
+ def translatecontent(content)
326
+ puts wechat_api.translatecontent(content)
327
+ end
318
328
  end
319
329
 
320
330
  desc 'user [OPEN_ID]', '获取用户基本信息'
@@ -384,9 +394,9 @@ class App < Thor
384
394
  puts wechat_api.media_uploadimg(image_path)
385
395
  end
386
396
 
387
- desc 'material [MEDIA_ID, PATH]', '永久媒体下载'
388
- def material(media_id, path)
389
- tmp_file = wechat_api.material(media_id)
397
+ desc 'material_get [MEDIA_ID, PATH]', '永久媒体下载'
398
+ def material_get(media_id, path)
399
+ tmp_file = wechat_api.get_material(media_id)
390
400
  FileUtils.mv(tmp_file.path, path)
391
401
  puts 'File downloaded'
392
402
  end
@@ -54,9 +54,11 @@ module ActionController
54
54
  Wechat::CorpApi.new(corpid, corpsecret, access_token, \
55
55
  agentid, timeout, skip_verify_ssl, jsapi_ticket)
56
56
  else
57
+ type = opts[:type] || cfg.type
57
58
  secret = opts[:secret] || cfg.secret
58
- Wechat::Api.new(appid, secret, access_token, \
59
- timeout, skip_verify_ssl, jsapi_ticket)
59
+ wechat_api_class = (type && type.to_sym == :mp ? Wechat::MpApi : Wechat::Api)
60
+ wechat_api_class.new(appid, secret, access_token, \
61
+ timeout, skip_verify_ssl, jsapi_ticket)
60
62
  end
61
63
  end
62
64
  end
@@ -19,6 +19,7 @@ module Wechat
19
19
  class InvalidCredentialError < StandardError; end
20
20
  class ResponseError < StandardError
21
21
  attr_reader :error_code
22
+
22
23
  def initialize(errcode, errmsg)
23
24
  @error_code = errcode
24
25
  super "#{errmsg}(#{error_code})"
@@ -51,4 +52,4 @@ module Wechat
51
52
  end
52
53
  end
53
54
 
54
- ActionView::Base.send :include, Wechat::Helpers if defined? ActionView::Base
55
+ ActionView::Base.include Wechat::Helpers if defined? ActionView::Base
@@ -6,7 +6,7 @@ module Wechat
6
6
 
7
7
  API_BASE = 'https://api.weixin.qq.com/cgi-bin/'
8
8
  MP_BASE = 'https://mp.weixin.qq.com/cgi-bin/'
9
- WXA_BASE = 'https://api.weixin.qq.com/wxa/'
9
+ WXA_BASE = 'https://api.weixin.qq.com/wxa/'
10
10
  OAUTH2_BASE = 'https://api.weixin.qq.com/sns/'
11
11
  DATACUBE_BASE = 'https://api.weixin.qq.com/datacube/'
12
12
  QYAPI_BASE = 'https://qyapi.weixin.qq.com/cgi-bin/'
@@ -10,7 +10,7 @@ module Wechat
10
10
  cipher.encrypt
11
11
 
12
12
  cipher.padding = 0
13
- key_data = Base64.decode64(encoding_aes_key + '=')
13
+ key_data = Base64.decode64("#{encoding_aes_key}=")
14
14
  cipher.key = key_data
15
15
  cipher.iv = [key_data].pack('H*')
16
16
 
@@ -22,7 +22,7 @@ module Wechat
22
22
  cipher.decrypt
23
23
 
24
24
  cipher.padding = 0
25
- key_data = Base64.decode64(encoding_aes_key + '=')
25
+ key_data = Base64.decode64("#{encoding_aes_key}=")
26
26
  cipher.key = key_data
27
27
  cipher.iv = [key_data].pack('H*')
28
28
 
@@ -33,7 +33,7 @@ module Wechat
33
33
  # app_id or corp_id
34
34
  def pack(content, app_id)
35
35
  random = SecureRandom.hex(8)
36
- text = content.force_encoding('ASCII-8BIT')
36
+ text = content.dup.force_encoding('ASCII-8BIT')
37
37
  msg_len = [text.length].pack('N')
38
38
 
39
39
  encode_padding("#{random}#{msg_len}#{text}#{app_id}")
@@ -41,7 +41,7 @@ module Wechat
41
41
 
42
42
  def unpack(msg)
43
43
  msg = decode_padding(msg)
44
- msg_len = msg[16, 4].reverse.unpack('V')[0]
44
+ msg_len = msg[16, 4].reverse.unpack1('V')
45
45
  content = msg[20, msg_len]
46
46
  app_id = msg[(20 + msg_len)..-1]
47
47
 
@@ -106,6 +106,10 @@ module Wechat
106
106
  post 'wxaapp/createwxaqrcode', JSON.generate(path: path, width: width)
107
107
  end
108
108
 
109
+ def wxa_msg_sec_check(content)
110
+ post 'msg_sec_check', JSON.generate(content: content), base: Wechat::Api::WXA_BASE
111
+ end
112
+
109
113
  def menu
110
114
  get 'menu/get'
111
115
  end
@@ -133,7 +137,13 @@ module Wechat
133
137
  end
134
138
 
135
139
  def material(media_id)
136
- get 'material/get', params: { media_id: media_id }, as: :file
140
+ ActiveSupport::Deprecation.warn('material is deprecated. use get_material instead.')
141
+
142
+ post 'material/get_material', JSON.generate(media_id: media_id), as: :file
143
+ end
144
+
145
+ def get_material(media_id)
146
+ post 'material/get_material', JSON.generate(media_id: media_id), as: :file
137
147
  end
138
148
 
139
149
  def material_count
@@ -204,6 +214,10 @@ module Wechat
204
214
  post 'media/voice/queryrecoresultfortext', nil, params: { voice_id: voice_id, lang: lang }
205
215
  end
206
216
 
217
+ def translatecontent(from_content, lfrom = 'zh_CN', lto = 'en_US')
218
+ post 'media/voice/translatecontent', from_content, params: { lfrom: lfrom, lto: lto }
219
+ end
220
+
207
221
  def web_access_token(code)
208
222
  params = {
209
223
  appid: access_token.appid,
@@ -10,6 +10,7 @@ module Wechat
10
10
  attr_reader :agentid
11
11
 
12
12
  def initialize(appid, secret, token_file, agentid, timeout, skip_verify_ssl, jsapi_ticket_file)
13
+ super()
13
14
  @client = HttpClient.new(QYAPI_BASE, timeout, skip_verify_ssl)
14
15
  @access_token = Token::CorpAccessToken.new(@client, appid, secret, token_file)
15
16
  @agentid = agentid
@@ -155,7 +156,13 @@ module Wechat
155
156
  end
156
157
 
157
158
  def material(media_id)
158
- get 'material/get', params: { media_id: media_id, agentid: agentid }, as: :file
159
+ ActiveSupport::Deprecation.warn('material is deprecated. use get_material instead.')
160
+
161
+ post 'material/get_material', JSON.generate(media_id: media_id), params: { agentid: agentid }, as: :file
162
+ end
163
+
164
+ def get_material(media_id)
165
+ post 'material/get_material', JSON.generate(media_id: media_id), params: { agentid: agentid }, as: :file
159
166
  end
160
167
 
161
168
  def material_add(type, file)
@@ -170,6 +177,14 @@ module Wechat
170
177
  post 'message/send', Message.to(userid).text(message).agent_id(agentid).to_json, content_type: :json
171
178
  end
172
179
 
180
+ def news_message_send(userid, title, description, link_url, pic_url)
181
+ post 'message/send', Message.to(userid).news([{ title: title,
182
+ description: description,
183
+ url: link_url,
184
+ pic_url: pic_url }])
185
+ .agent_id(agentid).to_json, content_type: :json
186
+ end
187
+
173
188
  def custom_message_send(message)
174
189
  post 'message/send', message.is_a?(Wechat::Message) ? message.agent_id(agentid).to_json : JSON.generate(message.merge(agent_id: agentid)), content_type: :json
175
190
  end
@@ -14,7 +14,7 @@ module Wechat
14
14
  HTTP.timeout(:global, write: timeout, connect: timeout, read: timeout)
15
15
  end
16
16
  @ssl_context = OpenSSL::SSL::SSLContext.new
17
- @ssl_context.ssl_version = :TLSv1
17
+ @ssl_context.ssl_version = :TLSv1_2
18
18
  @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE if skip_verify_ssl
19
19
  end
20
20
 
@@ -77,12 +77,12 @@ module Wechat
77
77
  def parse_response(response, as_type)
78
78
  content_type = response.headers[:content_type]
79
79
  parse_as = {
80
- %r{^application\/json} => :json,
81
- %r{^image\/.*} => :file,
82
- %r{^audio\/.*} => :file,
83
- %r{^voice\/.*} => :file,
84
- %r{^text\/html} => :xml,
85
- %r{^text\/plain} => :probably_json
80
+ %r{^application/json} => :json,
81
+ %r{^image/.*} => :file,
82
+ %r{^audio/.*} => :file,
83
+ %r{^voice/.*} => :file,
84
+ %r{^text/html} => :xml,
85
+ %r{^text/plain} => :probably_json
86
86
  }.each_with_object([]) { |match, memo| memo << match[1] if content_type =~ match[0] }.first || as_type || :text
87
87
 
88
88
  # try to parse response as json, fallback to user-specified format or text if failed
@@ -32,6 +32,7 @@ module Wechat
32
32
 
33
33
  class ArticleBuilder
34
34
  attr_reader :items
35
+
35
36
  delegate :count, to: :items
36
37
  def initialize
37
38
  @items = []
@@ -34,6 +34,10 @@ module Wechat
34
34
  post 'wxopen/template/del', JSON.generate(template_id: template_id)
35
35
  end
36
36
 
37
+ def subscribe_message_send(message)
38
+ post 'message/subscribe/send', message.to_json
39
+ end
40
+
37
41
  def jscode2session(code)
38
42
  params = {
39
43
  appid: access_token.appid,
@@ -145,9 +145,10 @@ module Wechat
145
145
  next
146
146
  end
147
147
 
148
- if condition.is_a? Regexp
148
+ case condition
149
+ when Regexp
149
150
  memo[:scoped] ||= [responder] + $LAST_MATCH_INFO.captures if value =~ condition
150
- elsif value == condition
151
+ when value
151
152
  memo[:scoped] ||= [responder, value]
152
153
  end
153
154
  end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wechat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.6
4
+ version: 0.11.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Skinnyworm
8
8
  - Eric Guo
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain:
12
12
  - |
13
13
  -----BEGIN CERTIFICATE-----
14
14
  MIIEQDCCAqigAwIBAgIBATANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBplcmlj
15
- Lmd1b2N6L0RDPWdtYWlsL0RDPWNvbTAeFw0xOTA4MzAwODIzMTVaFw0yMDA4Mjkw
16
- ODIzMTVaMCUxIzAhBgNVBAMMGmVyaWMuZ3VvY3ovREM9Z21haWwvREM9Y29tMIIB
17
- ojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA2ZlFyUImo53jN4+1Kk6cyGts
18
- LcT2x+i3G4mvZeqrZFCyhgWHJ04oAsfKBLCLRmspRsUuDQ3GQ8P5tH9oTduu55qy
19
- ohflwuuffJHwsJYJEQ4hykJSCQ8gd4qj8WrhAmNo15ujq6mjGXPRBtZltR142kKE
20
- o1tUYtc4Fr3oIAh65m62ZC2kJ5GATLYQ+U3JiiHWga8iJ8KSHbrzhM4N3ppaeYxD
21
- wk6Lwk2OyppO9Iiv9Ad2BEFFd2s7mvYtaMGPWYK2fYTUuq6yKupg3CppX3ttq+bN
22
- Ejx6dXn4RwYmATfc/Iv4aVU8lZS9HABqmProgkmi5vE2AAW1rQihm2ACm9VGlX+B
23
- J2uIIWFJC56+TmkyqcBM87ztRxFlNLJe1G2S2TZ/qhAyWfoSEDA9eW6OUsb6qvnz
24
- PHFPo/Vgq9BEoYMItUsEoJHdmLBjzhiccQx2XWAhZrBREpH20jIC/ereVGRpAeVf
25
- kYdFgW84K+lL9XTt9QJNM08YM/mFcpaGq4/2YbbLAgMBAAGjezB5MAkGA1UdEwQC
26
- MAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQdvlZDewUSWN/OWf9bTuDHHc5r+TAf
15
+ Lmd1b2N6L0RDPWdtYWlsL0RDPWNvbTAeFw0yMDA5MDIwNDUzMjFaFw0yMTA5MDIw
16
+ NDUzMjFaMCUxIzAhBgNVBAMMGmVyaWMuZ3VvY3ovREM9Z21haWwvREM9Y29tMIIB
17
+ ojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwSfWr5RlUBlv9OuNgmxjPwhU
18
+ 7eoT/m7K5h0PzUaue+dtno4WqjodoCPHF6r9hh8Ys0h1VAPu3sobH2gNaL18M0CY
19
+ bmq+ik6LgH5tX2E6c2BmhMuURt2y1YvIwvx0dDOlEXll9J8ZVqGyo3Rm9AIblA3/
20
+ w/V5VJGCj3XY6iipNkHHDlSWSYeD2mNr0wJW8EAUFFcyRddpotxR9Es8JwUpXdj8
21
+ Bc5a/OWxKvzqLVlu76zYRYuZ41+3gWNxYF9OPnp55sNtsboGh5LJSdXZOs5+gMw9
22
+ gEW/KsP4GSMlqBT7SQEO5EH3qjp3aatHaMT8Fq9h3AnNESQMubMWtlPqEYyrYkli
23
+ wr8A8SGiX3rCkNG0cc4zVsagtXm4csbSeaIjLV57LA2sKngI4/kw55UYlloAtGPh
24
+ qNEqsPLbN/RkyS1zQjf14mQBpBt3SdxnT7YDSPIYiAPTtLuThcy3Flgh6cDX1RH7
25
+ FQPZJzQ7pSb/3Edj+VBaYhpo+y4ySLxx9DOLfm6lAgMBAAGjezB5MAkGA1UdEwQC
26
+ MAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRWBfZurpq8AmvpfBq7eSA0ivhotDAf
27
27
  BgNVHREEGDAWgRRlcmljLmd1b2N6QGdtYWlsLmNvbTAfBgNVHRIEGDAWgRRlcmlj
28
- Lmd1b2N6QGdtYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAkS8q1uex/jWTHtYi
29
- 6Rgv8hZugwpFCwGPb9i4VgSSA1qkfsFhNxQji1xcpo8hYlH6zW9L6CGC9BU4n9R2
30
- iyuuvtHVnxt5i6u39fIw0dIHJdtswSXZ6Kq58RP1Lg1nbmXX0zHz1fXp+DXL7NoJ
31
- bBHL9Oy6jps/Lz8fIanPIZ6iT/akA7Mts94v1F9dyeA3IIJVptvmuGFC9PexX4TJ
32
- fZ/qmk93C6KEOGEQ0zJzjnKjRZT0KOnJxbpB6/4Xvr+SrTb0yx20s+YWWa28pb0C
33
- gNr4HHRfhmqxoTKvM4Mm9oJSBO/ENi5zfLwvwOWRuriMuDGYmKCdwmn4Y9asgYS4
34
- 2febpVoh2LTA7GDc1VJOKhxisQ2OtYpcTR503eGyIrnS4NGs+B0rXOB7pEX+VOju
35
- 2Gz/SZ1dgCkJpJU45GNrhatKx3kyg8eC5IHekNrEvJNJqPl0VdRIs/GtUkQyk+np
36
- 3kTPkfLMsAZznXo3bzMe0V5TB4+a7pFEK1nN/htWrOVkIi/3
28
+ Lmd1b2N6QGdtYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAJ1tLpEqCXma9fFeU
29
+ l6N4tEDrwYVxdbkXgOScUZBsagNlEM9vvskygivKu8AV8ffdtsg9OAuhdfAjPjX+
30
+ GvGnmuoweHFTsIrOhNryqFDgvkufBczmFLOskjRuzt4NoBNgge8+xoNo+N9o/0jz
31
+ GZi69Dth2i92rffuEzyFbfA9xzkjL+uSqJRJVDP5UbIWGnQ99M4GfplJZWRkmoX9
32
+ 5Ek/ZVhzEz6kdZuZErloYKqjWWvFHUFAYmJd3fqKpb468yTIaL4bl4aUl2+xLdyK
33
+ fPI/ZWGy2uNjffzbrhJ+Ti6qAdubkJoMIqrfbrFV1ew2Bxkp/93etXVNjAgHNmu1
34
+ o3VAf3sbhnj33jAri7JYx/1MhAcJXlvpKxX9QnYouxU/RgzBF7oqcT0dJ2jWUnAI
35
+ spvOK5/LPXWX6ZGc2SR8SH/s7ftYH2EkeM1VUbtemow08NdgCwJ4IG+fRQ9dcrJ+
36
+ L9TbpLHvVrCe1w8duMqNeUmqj+M1iC/5Zst2vIe14QcOTuAh
37
37
  -----END CERTIFICATE-----
38
- date: 2019-09-02 00:00:00.000000000 Z
38
+ date: 2020-09-13 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: activesupport
@@ -139,14 +139,14 @@ dependencies:
139
139
  requirements:
140
140
  - - "~>"
141
141
  - !ruby/object:Gem::Version
142
- version: '3.6'
142
+ version: '4.0'
143
143
  type: :development
144
144
  prerelease: false
145
145
  version_requirements: !ruby/object:Gem::Requirement
146
146
  requirements:
147
147
  - - "~>"
148
148
  - !ruby/object:Gem::Version
149
- version: '3.6'
149
+ version: '4.0'
150
150
  - !ruby/object:Gem::Dependency
151
151
  name: sqlite3
152
152
  requirement: !ruby/object:Gem::Requirement
@@ -213,7 +213,7 @@ homepage: https://github.com/Eric-Guo/wechat
213
213
  licenses:
214
214
  - MIT
215
215
  metadata: {}
216
- post_install_message:
216
+ post_install_message:
217
217
  rdoc_options: []
218
218
  require_paths:
219
219
  - lib
@@ -221,15 +221,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
221
221
  requirements:
222
222
  - - "~>"
223
223
  - !ruby/object:Gem::Version
224
- version: '2.3'
224
+ version: '2.4'
225
225
  required_rubygems_version: !ruby/object:Gem::Requirement
226
226
  requirements:
227
227
  - - ">="
228
228
  - !ruby/object:Gem::Version
229
229
  version: '0'
230
230
  requirements: []
231
- rubygems_version: 3.0.6
232
- signing_key:
231
+ rubygems_version: 3.1.4
232
+ signing_key:
233
233
  specification_version: 4
234
234
  summary: DSL for wechat message handling and API
235
235
  test_files: []
metadata.gz.sig CHANGED
Binary file