aliyun-cloud_sms 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c00c0863180ad681f861b6213c60d4a3ea5540d1
4
- data.tar.gz: b685fc773e38d4448e55e5ab8beee4124cce22f4
2
+ SHA256:
3
+ metadata.gz: e612e52b12df1e0e0844d6e26c07d64254e4e4d7d1eb08651f42856da2cfe100
4
+ data.tar.gz: 4b94663bb3d165ca6f2c66bc0cea5cbdda15ee3952fdf6f23e05812dfdccdc34
5
5
  SHA512:
6
- metadata.gz: 514416b3e09278b240a063416beb3550195ad0af7c0290dc6850491a98163f633d7ba69eb4ecf9d36fc82559ccae1a1fd80fd197fe5d91354ba4f11c49557ce5
7
- data.tar.gz: ade522bbe91d14bdce4e9eefa1626b491bd17eccc582dc3fd524516f62e8c2f4b1529aa584882cf79684afb07579c70e49938b10e9cb5c89ab709386247f9524
6
+ metadata.gz: eba02ca3f118aa4a7763e56680b743fcf92eff86dc5f877337caf70ce94786624d801541117fc19df72b561d327d6380a08d9336abf8c676c228a492a06ab6e7
7
+ data.tar.gz: 240b77b892f5fa1efbbd988f01fbd73c96a362c806c9c9014f8bf5fd78a63021b636927413c06b022f7ded5d98128c95d56e984640d59387ddec358ff40de3e0
@@ -0,0 +1,76 @@
1
+ # Aliyun::CloudSms
2
+
3
+ 基于阿里短信服务接口,支持短信发送与状态查询。
4
+
5
+ ## Installation
6
+
7
+ 在项目的Gemfile里添加下面一行
8
+
9
+ ```ruby
10
+ gem 'aliyun-cloud_sms'
11
+ ```
12
+
13
+ 执行
14
+
15
+ $ bundle
16
+
17
+ 或者你也可以
18
+
19
+ $ gem install aliyun-cloud_sms
20
+
21
+ ## 构建客户端
22
+
23
+ ### 全局客户端
24
+ 在config/initializers目录添加一个文件`aliyun-cloud_sms.rb`
25
+
26
+ ``` ruby
27
+ Aliyun::CloudSms.configure do |config|
28
+ config.access_key_secret = 'your key secret'
29
+ config.access_key_id = 'your key id'
30
+ config.sign_name = 'your sign name'
31
+ end
32
+ ```
33
+
34
+ ### 多账户支持
35
+ 有的服务可能会需要给不同的应用发送。
36
+ ```ruby
37
+ client = Aliyun::CloudSms.new('your_access_key_id', 'your_access_key_secret', 'your_sign_name')
38
+
39
+ client.send_msg('13800000000', 'SMS_80190090', {"customer": "jere"} )
40
+ ```
41
+
42
+ #### 可选参数支持
43
+ ```ruby
44
+ Aliyun::CloudSms.send_msg('13800000000', 'SMS_80190090', {"customer": "jere"}, {:OutId => '您的业务id', :smsUpExtendCode => '上行短信用的code'} )
45
+ ```
46
+
47
+ ## 接口
48
+
49
+ ### 短信发送
50
+ 如果是全局客户端, 可以使用:
51
+ ```ruby
52
+ Aliyun::CloudSms.send_msg('13800000000', 'SMS_80190090', {"customer": "jere"} )
53
+ ```
54
+
55
+ `template_params`可以传字符串,以多账户支持为例:
56
+ ```ruby
57
+ client.send_msg('13800000000', 'SMS_80190090', "{\"customer\":\"jeremy\"}" )
58
+ ```
59
+ ### 状态查询
60
+ ```ruby
61
+ client.query_status(mobile, send_date = "#{Time.now.strftime('%Y%m%d')}", biz_id = nil, page_size = 1, current_page = 1)
62
+
63
+ # e.g.
64
+ client.query_status '13800000000'
65
+ client.query_status '13800000000', '20170806'
66
+ client.query_status '13800000000', '20170806', '109177619494^4112265203597'
67
+ client.query_status '13800000000', '20170806', nil, 10
68
+ client.query_status '13800000000', '20170806', nil, 10, 2
69
+ ```
70
+ ## 贡献
71
+
72
+ 欢迎PR。
73
+
74
+
75
+ ## License
76
+ [MIT License](http://opensource.org/licenses/MIT).
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Aliyun::CloudSms
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/aliyun/cloud_sms`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ This gem is used for sending sms via aliyun sms service, and querying the message status as well.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ [中文文档 Chinese document](https://github.com/jerecui/aliyun-cloud_sms/blob/master/README-CN.md)
6
6
 
7
7
  ## Installation
8
8
 
@@ -20,9 +20,9 @@ Or install it yourself as:
20
20
 
21
21
  $ gem install aliyun-cloud_sms
22
22
 
23
- ## Usage
23
+ ## Construct a client
24
24
 
25
- ### Global message client
25
+ ### Global account
26
26
  Create file aliyun-cloud_sms.rb to your config/initializers.
27
27
  ``` ruby
28
28
  Aliyun::CloudSms.configure do |config|
@@ -30,23 +30,45 @@ Aliyun::CloudSms.configure do |config|
30
30
  config.access_key_id = 'your key id'
31
31
  config.sign_name = 'your sign name'
32
32
  end
33
+ ```
34
+ ### Multiple account support
35
+ If you want to send message with multiple sign name, you can build your own message sender client.
36
+ ```ruby
37
+ client = Aliyun::CloudSms.new('your_access_key_id', 'your_access_key_secret', 'your_sign_name')
33
38
 
39
+ ## API
40
+ ### Message send
41
+ ```ruby
42
+ Aliyun::CloudSms.send_msg(mobile, template_code, template_param).
34
43
  ```
35
- If you want to send message, Aliyun::CloudSms.send_msg(mobile, template_code, template_param).
36
44
  e.g.
37
45
  ```ruby
38
46
  Aliyun::CloudSms.send_msg('13800000000', 'SMS_80190090', {"customer": "jere"} )
39
47
  ```
40
- The param is not a string, is a hash instead.
41
48
 
42
- ### Multiple account support
43
- If you want to send message with multiple sign name, you can build your own message sender client.
49
+ `template_params` could be a string.
44
50
  ```ruby
45
- client = Aliyun::CloudSms.new('your_access_key_id', 'your_access_key_secret', 'your_sign_name')
51
+ client.send_msg('13800000000', 'SMS_80190090', "{\"customer\":\"jeremy\"}" )
52
+ ```
46
53
 
47
- client.send_msg('13800000000', 'SMS_80190090', {"customer": "jere"} )
54
+ #### extended params support
55
+ ```ruby
56
+ Aliyun::CloudSms.send_msg('13800000000', 'SMS_80190090', {"customer": "jere"}, {:OutId => 'your system id', :smsUpExtendCode => 'sms up extended code'} )
48
57
  ```
49
58
 
59
+
60
+ ### Status query
61
+
62
+ ```ruby
63
+ client.query_status(mobile, send_date = "#{Time.now.strftime('%Y%m%d')}", biz_id = nil, page_size = 1, current_page = 1)
64
+
65
+ # e.g.
66
+ client.query_status '13800000000'
67
+ client.query_status '13800000000', '20170806'
68
+ client.query_status '13800000000', '20170806', '109177619494^4112265203597'
69
+ client.query_status '13800000000', '20170806', nil, 10
70
+ client.query_status '13800000000', '20170806', nil, 10, 2
71
+ ```
50
72
  ## Development
51
73
 
52
74
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -55,7 +77,8 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
55
77
 
56
78
  ## Contributing
57
79
 
58
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/aliyun-cloud_sms. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
80
+ Welcome pull request.
81
+ Hope help.
59
82
 
60
83
 
61
84
  ## License
@@ -6,7 +6,7 @@ require 'aliyun/cloud_sms/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "aliyun-cloud_sms"
8
8
  spec.version = Aliyun::CloudSms::VERSION
9
- spec.authors = ["Jeremy Cui"]
9
+ spec.authors = ["Jere Cui"]
10
10
  spec.email = ["tsuijy@gmail.com"]
11
11
 
12
12
  spec.summary = %q{Aliyun SMS service gem.}
@@ -21,9 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_dependency "uuid", ">=2.0", "<6.0"
24
+ spec.add_dependency "uuid", ">=2.0"
25
+ spec.add_dependency "rest-client", ">=2.0"
25
26
 
26
- spec.add_development_dependency "bundler", "~> 1.14"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "rspec", "~> 3.0"
27
+ spec.add_development_dependency "bundler", "> 1.14"
28
+ spec.add_development_dependency "rake", ">= 12.3.3"
29
+ spec.add_development_dependency "rspec", ">= 3.0"
29
30
  end
@@ -10,6 +10,10 @@ module Aliyun
10
10
  default_client.send_msg mobile, template_code, template_param
11
11
  end
12
12
 
13
+ def self.query_status(mobile, send_date = "#{Time.now.strftime('%Y%m%d')}", biz_id = nil, page_size = 1, current_page = 1)
14
+ default_client.query_status mobile, send_date, biz_id, page_size, current_page
15
+ end
16
+
13
17
  def self.client(access_key_id, access_key_secret, sign_name)
14
18
  Aliyun::Client.new access_key_id, access_key_secret, sign_name
15
19
  end
@@ -1,8 +1,5 @@
1
- require 'uuid'
2
- require 'json'
3
- require 'cgi'
4
- require 'openssl'
5
- require 'base64'
1
+ require 'aliyun/cloud_sms/request/message_send'
2
+ require 'aliyun/cloud_sms/request/message_query'
6
3
 
7
4
  module Aliyun::CloudSms
8
5
  class Client
@@ -14,65 +11,19 @@ module Aliyun::CloudSms
14
11
  self.sign_name = sign_name
15
12
  end
16
13
 
17
- SERVICE_URL = "http://dysmsapi.aliyuncs.com/"
18
14
 
19
- def send_msg(mobile, template_code, template_param)
20
- params = dynamic_params(mobile, template_code, template_param).merge(intrinsic_params)
21
- q_without_sig = build_url(params)
22
- q_full= "Signature=#{sign(q_without_sig)}&#{q_without_sig}"
15
+ def send_msg(mobile, template_code, template_param, optional_params = {})
16
+ request = Request::MessageSend.new mobile, template_code, template_param, optional_params
17
+ request.client = self
23
18
 
24
- begin
25
- response = RestClient.get url
26
- rescue RestClient::ExceptionWithResponse => e
27
- Rails.logger.error(e.response) if defined? Rails
28
- end
19
+ request.send_request
29
20
  end
30
21
 
31
- private
32
- def dynamic_params(mobile, template_code, template_param)
33
- {
34
- :PhoneNumbers => mobile,
35
- :TemplateCode => template_code,
36
- :TemplateParam => template_param.to_json.to_s,
37
- :Timestamp => timestamp,
38
- :SignatureNonce => nonce,
39
- }
40
- end
22
+ def query_status(mobile, send_date = "#{Time.now.strftime('%Y%m%d')}", biz_id = nil, page_size = 1, current_page = 1)
23
+ request = Request::MessageQuery.new mobile, send_date, biz_id, page_size, current_page
24
+ request.client = self
41
25
 
42
- def intrinsic_params
43
- {
44
- :AccessKeyId => self.access_key_id,
45
- :SignName => self.sign_name,
46
- :Action => Aliyun::CloudSms.action,
47
- :Format => Aliyun::CloudSms.format,
48
- :RegionId => Aliyun::CloudSms.region_id,
49
- :SignatureMethod => Aliyun::CloudSms.signature_method,
50
- :SignatureVersion => Aliyun::CloudSms.signature_version,
51
- :Version => Aliyun::CloudSms.sms_version
52
- }
53
- end
54
-
55
- def timestamp
56
- Time.now.utc.strftime("%FT%TZ")
57
- end
58
-
59
- def nonce
60
- UUID.generate
61
- end
62
-
63
- def build_url(hash)
64
- hash.map{|k,v|"#{encode(k.to_s)}=#{encode(v.to_s)}"}.sort.join('&')
65
- end
66
-
67
- def encode(str)
68
- CGI.escape(str)
69
- end
70
-
71
- def sign(str)
72
- str = "GET&#{encode('/')}&#{encode(str)}"
73
- ret = OpenSSL::HMAC.digest('sha1', "#{self.access_key_secret}&", str)
74
- ret = Base64.encode64(ret)
75
- encode(ret.chomp)
76
- end
26
+ request.send_request
27
+ end
77
28
  end
78
29
  end
@@ -1,6 +1,5 @@
1
1
  module Aliyun::CloudSms
2
2
  module Configure
3
- @@action = "SendSms"
4
3
  @@format = "JSON"
5
4
  @@region_id = "cn-hangzhou"
6
5
  @@signature_method = "HMAC-SHA1"
@@ -27,14 +26,6 @@ module Aliyun::CloudSms
27
26
  @@sign_name = sign_name
28
27
  end
29
28
 
30
- def action=(action)
31
- @@action = action
32
- end
33
-
34
- def action
35
- @@action
36
- end
37
-
38
29
  def format
39
30
  @@format
40
31
  end
@@ -0,0 +1,83 @@
1
+ require 'erb'
2
+ require 'uuid'
3
+ require 'json'
4
+ require 'openssl'
5
+ require 'base64'
6
+ require 'rest-client'
7
+
8
+ module Aliyun
9
+ module CloudSms
10
+ module Request
11
+ class Base
12
+
13
+ attr_accessor :client
14
+
15
+ SERVICE_URL = "http://dysmsapi.aliyuncs.com/"
16
+
17
+ def action
18
+ ""
19
+ end
20
+
21
+ def get_params
22
+ custom_params.merge intrinsic_params
23
+ end
24
+
25
+ def send_request
26
+ q_without_sig = build_url(get_params)
27
+ q_full= "Signature=#{sign(q_without_sig)}&#{q_without_sig}"
28
+
29
+ begin
30
+ response = RestClient.get "#{SERVICE_URL}?#{q_full}"
31
+ rescue RestClient::ExceptionWithResponse => e
32
+ puts e.response
33
+ Rails.logger.error(e.response) if defined? Rails
34
+ e.response
35
+ end
36
+ end
37
+
38
+ protected
39
+ def custom_params
40
+ {}
41
+ end
42
+
43
+ def intrinsic_params
44
+ {
45
+ :AccessKeyId => client.access_key_id,
46
+ :SignName => client.sign_name,
47
+ :Format => Aliyun::CloudSms.format,
48
+ :RegionId => Aliyun::CloudSms.region_id,
49
+ :SignatureMethod => Aliyun::CloudSms.signature_method,
50
+ :SignatureVersion => Aliyun::CloudSms.signature_version,
51
+ :Timestamp => timestamp,
52
+ :SignatureNonce => nonce,
53
+ :Action => action,
54
+ :Version => Aliyun::CloudSms.sms_version
55
+ }
56
+ end
57
+
58
+ def timestamp
59
+ Time.now.utc.strftime("%FT%TZ")
60
+ end
61
+
62
+ def nonce
63
+ UUID.generate
64
+ end
65
+
66
+ def build_url(hash)
67
+ hash.map{|k,v|"#{encode(k.to_s)}=#{encode(v.to_s)}"}.sort.join('&')
68
+ end
69
+
70
+ def encode(str)
71
+ ERB::Util.url_encode str
72
+ end
73
+
74
+ def sign(str)
75
+ str = "GET&#{encode('/')}&#{encode(str)}"
76
+ ret = OpenSSL::HMAC.digest('sha1', "#{client.access_key_secret}&", str)
77
+ ret = Base64.encode64(ret)
78
+ encode(ret.chomp)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,34 @@
1
+ module Aliyun
2
+ module CloudSms
3
+ module Request
4
+ class MessageQuery < Base
5
+ attr_accessor :mobile, :send_date, :biz_id, :page_size, :current_page
6
+
7
+ def initialize(mobile, send_date, biz_id, page_size, current_page)
8
+ self.mobile = mobile
9
+ self.send_date = send_date
10
+ self.biz_id = biz_id
11
+ self.page_size = page_size
12
+ self.current_page = current_page
13
+ end
14
+
15
+ def action
16
+ "QuerySendDetails".freeze
17
+ end
18
+
19
+ def custom_params
20
+ params = {
21
+ :PhoneNumber => mobile,
22
+ :SendDate => send_date,
23
+ :PageSize => page_size,
24
+ :CurrentPage => current_page
25
+ }
26
+
27
+ params.merge!({:BizId => biz_id}) if biz_id
28
+
29
+ params
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,33 @@
1
+ require 'aliyun/cloud_sms/request/base'
2
+
3
+ module Aliyun
4
+ module CloudSms
5
+ module Request
6
+ class MessageSend < Base
7
+
8
+ attr_accessor :mobile, :template_code, :template_param, :optional_params
9
+
10
+ def initialize(mobile, template_code, template_param, optional_params = nil)
11
+ self.mobile = mobile
12
+ self.template_code = template_code
13
+ self.template_param = template_param
14
+ self.optional_params = optional_params || {}
15
+ end
16
+
17
+ def action
18
+ "SendSms".freeze
19
+ end
20
+
21
+ def custom_params
22
+ self.template_param = self.template_param.to_json if self.template_param.is_a?(Hash)
23
+
24
+ {
25
+ :PhoneNumbers => self.mobile,
26
+ :TemplateCode => self.template_code,
27
+ :TemplateParam => self.template_param.to_s,
28
+ }.merge!(self.optional_params)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  module Aliyun
2
2
  module CloudSms
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aliyun-cloud_sms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
- - Jeremy Cui
8
- autorequire:
7
+ - Jere Cui
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-02 00:00:00.000000000 Z
11
+ date: 2021-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uuid
@@ -17,9 +17,6 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.0'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '6.0'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,49 +24,60 @@ dependencies:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '2.0'
30
- - - "<"
27
+ - !ruby/object:Gem::Dependency
28
+ name: rest-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
31
32
  - !ruby/object:Gem::Version
32
- version: '6.0'
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
33
41
  - !ruby/object:Gem::Dependency
34
42
  name: bundler
35
43
  requirement: !ruby/object:Gem::Requirement
36
44
  requirements:
37
- - - "~>"
45
+ - - ">"
38
46
  - !ruby/object:Gem::Version
39
47
  version: '1.14'
40
48
  type: :development
41
49
  prerelease: false
42
50
  version_requirements: !ruby/object:Gem::Requirement
43
51
  requirements:
44
- - - "~>"
52
+ - - ">"
45
53
  - !ruby/object:Gem::Version
46
54
  version: '1.14'
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: rake
49
57
  requirement: !ruby/object:Gem::Requirement
50
58
  requirements:
51
- - - "~>"
59
+ - - ">="
52
60
  - !ruby/object:Gem::Version
53
- version: '10.0'
61
+ version: 12.3.3
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
65
  requirements:
58
- - - "~>"
66
+ - - ">="
59
67
  - !ruby/object:Gem::Version
60
- version: '10.0'
68
+ version: 12.3.3
61
69
  - !ruby/object:Gem::Dependency
62
70
  name: rspec
63
71
  requirement: !ruby/object:Gem::Requirement
64
72
  requirements:
65
- - - "~>"
73
+ - - ">="
66
74
  - !ruby/object:Gem::Version
67
75
  version: '3.0'
68
76
  type: :development
69
77
  prerelease: false
70
78
  version_requirements: !ruby/object:Gem::Requirement
71
79
  requirements:
72
- - - "~>"
80
+ - - ">="
73
81
  - !ruby/object:Gem::Version
74
82
  version: '3.0'
75
83
  description: Send short message via aliyun cloud service.
@@ -85,6 +93,7 @@ files:
85
93
  - CODE_OF_CONDUCT.md
86
94
  - Gemfile
87
95
  - LICENSE.txt
96
+ - README-CN.md
88
97
  - README.md
89
98
  - Rakefile
90
99
  - aliyun-cloud_sms.gemspec
@@ -93,12 +102,15 @@ files:
93
102
  - lib/aliyun/cloud_sms.rb
94
103
  - lib/aliyun/cloud_sms/client.rb
95
104
  - lib/aliyun/cloud_sms/configure.rb
105
+ - lib/aliyun/cloud_sms/request/base.rb
106
+ - lib/aliyun/cloud_sms/request/message_query.rb
107
+ - lib/aliyun/cloud_sms/request/message_send.rb
96
108
  - lib/aliyun/cloud_sms/version.rb
97
109
  homepage: https://github.com/jerecui/aliyun-cloud_sms
98
110
  licenses:
99
111
  - MIT
100
112
  metadata: {}
101
- post_install_message:
113
+ post_install_message:
102
114
  rdoc_options: []
103
115
  require_paths:
104
116
  - lib
@@ -113,9 +125,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
125
  - !ruby/object:Gem::Version
114
126
  version: '0'
115
127
  requirements: []
116
- rubyforge_project:
117
- rubygems_version: 2.6.11
118
- signing_key:
128
+ rubygems_version: 3.2.3
129
+ signing_key:
119
130
  specification_version: 4
120
131
  summary: Aliyun SMS service gem.
121
132
  test_files: []