aliyun-cloud_sms 0.1.0 → 0.2.3

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
- 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: []