ali_sms 0.0.1
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 +7 -0
- data/lib/ali_sms.rb +4 -0
- data/lib/ali_sms/config.rb +24 -0
- data/lib/ali_sms/curl.rb +26 -0
- data/lib/ali_sms/sms.rb +95 -0
- data/lib/ali_sms/util.rb +44 -0
- metadata +48 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 3c292bcf4cd2088721b5b94ab37efcad8e95314c
|
|
4
|
+
data.tar.gz: e2c01601bc5f3496825687eff0228c8888481bf8
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: cfb62ed7a965483b248e0e3364335955fcc39ff87a739f9bb2cdd274cb385cc5040c5421bdebab371953bd16fc6f124c7d93bbea61c1de0d580083430ecb11b7
|
|
7
|
+
data.tar.gz: e5e1d9c5fc34256d37b4a9075984bcf1415ab5de5b3bbdd2f15773686da1c33008c99a2d88b60ee234836cb09f6e5a8d8d095592ffa252f7d9459167c20f34ca
|
data/lib/ali_sms.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require 'singleton'
|
|
3
|
+
|
|
4
|
+
module AliSms
|
|
5
|
+
|
|
6
|
+
class Config
|
|
7
|
+
include Singleton
|
|
8
|
+
|
|
9
|
+
def initialize()
|
|
10
|
+
configHash = YAML.load_file(Rails.root.to_s + '/config/ali_sms.yml')
|
|
11
|
+
|
|
12
|
+
if configHash.nil?
|
|
13
|
+
raise "ali_sms.yml为空"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
configHash.each do |k, v|
|
|
17
|
+
Object.send :define_method, k do
|
|
18
|
+
v
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end # initialize .. end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
end
|
data/lib/ali_sms/curl.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'net/http'
|
|
2
|
+
|
|
3
|
+
module AliSms
|
|
4
|
+
module Curl
|
|
5
|
+
def self.request_url(url)
|
|
6
|
+
uri = URI(url)
|
|
7
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
|
8
|
+
|
|
9
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
10
|
+
http.read_timeout = 10
|
|
11
|
+
http.open_timeout = 10
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
res = http.request(request)
|
|
15
|
+
|
|
16
|
+
if res.is_a? Net::HTTPSuccess
|
|
17
|
+
result = res.body
|
|
18
|
+
else
|
|
19
|
+
result = {}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
return result
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
data/lib/ali_sms/sms.rb
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
require 'singleton'
|
|
3
|
+
|
|
4
|
+
module AliSms
|
|
5
|
+
|
|
6
|
+
class Sms
|
|
7
|
+
include Singleton
|
|
8
|
+
|
|
9
|
+
def initialize()
|
|
10
|
+
@config = AliSms::Config.instance
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# option_hash
|
|
14
|
+
# 需提供参数PhoneNumbers, 它可以是字符串和数组
|
|
15
|
+
# TemplateCode 模板code
|
|
16
|
+
# 可选:TemplateParam 传递hash,填充模板的参数值
|
|
17
|
+
# 返回值:{ Message: , RequestId: , BizId: , Code: }
|
|
18
|
+
def send_sms(option_hash = {})
|
|
19
|
+
option = option_hash.deep_stringify_keys
|
|
20
|
+
|
|
21
|
+
option["AccessKeyId"] = @config.AccessKeyId
|
|
22
|
+
option["Timestamp"] = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
23
|
+
option["SignatureMethod"] = "HMAC-SHA1"
|
|
24
|
+
option["SignatureVersion"] = "1.0"
|
|
25
|
+
option["SignatureNonce"] = SecureRandom.hex(16)
|
|
26
|
+
option["SignName"] = "易百事"
|
|
27
|
+
option["Format"] = "JSON"
|
|
28
|
+
|
|
29
|
+
if option["PhoneNumbers"].present?
|
|
30
|
+
option["PhoneNumbers"] = Array.wrap(option["PhoneNumbers"]).join(",")
|
|
31
|
+
end
|
|
32
|
+
option["Action"] = "SendSms"
|
|
33
|
+
option["Version"] = "2017-05-25"
|
|
34
|
+
option["RegionId"] = "cn-hangzhou"
|
|
35
|
+
option["TemplateParam"] = option["TemplateParam"].to_json
|
|
36
|
+
|
|
37
|
+
query_str = AliSms::Util.make_query_str(option)
|
|
38
|
+
sign = AliSms::Util.make_sign(query_str, "GET", @config.AccessKeySecret + "&")
|
|
39
|
+
|
|
40
|
+
url = "http://dysmsapi.aliyuncs.com/?Signature=" + sign + "&" + query_str
|
|
41
|
+
|
|
42
|
+
response_body = AliSms::Curl.request_url(url)
|
|
43
|
+
result = JSON.parse(response_body).with_indifferent_access
|
|
44
|
+
|
|
45
|
+
# if result.empty?
|
|
46
|
+
# result = { Message: "请求错误", RequestId: "request_error", BizId: 0 }
|
|
47
|
+
# end
|
|
48
|
+
|
|
49
|
+
return result
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# option_hash
|
|
53
|
+
# 需提供参数PhoneNumber, 手机号
|
|
54
|
+
# SendDate 年月日字符串,如20171116
|
|
55
|
+
# PageSize 结果数量
|
|
56
|
+
# CurrentPage 当前页数 以1开始
|
|
57
|
+
# 可选参数BizId,发送流水号
|
|
58
|
+
#
|
|
59
|
+
# 返回值:Hash,
|
|
60
|
+
# 详见https://help.aliyun.com/document_detail/55452.html?spm=5176.doc59840.6.563.lxmKXd
|
|
61
|
+
# 此方法暂未使用
|
|
62
|
+
def query_sms(option_hash = {})
|
|
63
|
+
option = option_hash.stringify_keys
|
|
64
|
+
|
|
65
|
+
option["AccessKeyId"] = @config.AccessKeyId
|
|
66
|
+
option["Timestamp"] = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
67
|
+
option["Format"] = "JSON"
|
|
68
|
+
option["SignatureMethod"] = "HMAC-SHA1"
|
|
69
|
+
option["SignatureVersion"] = "1.0"
|
|
70
|
+
option["SignatureNonce"] = SecureRandom.hex(16)
|
|
71
|
+
option["Action"] = "QuerySendDetails"
|
|
72
|
+
option["Version"] = "2017-05-25"
|
|
73
|
+
option["RegionId"] = "cn-hangzhou"
|
|
74
|
+
|
|
75
|
+
# 业务参数
|
|
76
|
+
#option["PhoneNumber"] = "18733848323"
|
|
77
|
+
#option["SendDate"] = "20171116"
|
|
78
|
+
option["PageSize"] = option["PageSize"] || "10"
|
|
79
|
+
option["CurrentPage"] = option["CurrentPage"] || "1"
|
|
80
|
+
|
|
81
|
+
query_str = AliSms::Util.make_query_str(option)
|
|
82
|
+
sign = AliSms::Util.make_sign(query_str, "GET", @config.AccessKeySecret + "&")
|
|
83
|
+
|
|
84
|
+
url = "http://dysmsapi.aliyuncs.com/?Signature=" + sign + "&" + query_str
|
|
85
|
+
response_body = AliSms::Curl.request_url(url)
|
|
86
|
+
result = JSON.parse(response_body).with_indifferent_access
|
|
87
|
+
|
|
88
|
+
# if result.empty?
|
|
89
|
+
# result = { Message: "请求错误", RequestId: "request_error", BizId: 0 }
|
|
90
|
+
# end
|
|
91
|
+
|
|
92
|
+
return result
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
data/lib/ali_sms/util.rb
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require "uri"
|
|
2
|
+
require 'openssl'
|
|
3
|
+
require "base64"
|
|
4
|
+
|
|
5
|
+
module AliSms
|
|
6
|
+
|
|
7
|
+
module Util
|
|
8
|
+
|
|
9
|
+
def self.make_query_str(dataHash)
|
|
10
|
+
sortHash = Hash[dataHash.sort_by { |k, v| k }]
|
|
11
|
+
if sortHash.has_key?("sign")
|
|
12
|
+
sortHash.delete("sign")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
sortQueryStr = ""
|
|
16
|
+
sortHash.each do |k, v|
|
|
17
|
+
sortQueryStr = sortQueryStr + "&" + specialUrlEncode(k) + "=" + specialUrlEncode(v)
|
|
18
|
+
end
|
|
19
|
+
sortQueryStr = sortQueryStr[1..-1]
|
|
20
|
+
|
|
21
|
+
return sortQueryStr
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.make_sign(sortQueryStr, httpMethod, key)
|
|
25
|
+
str = httpMethod + "&" + specialUrlEncode("/") + "&" + specialUrlEncode(sortQueryStr)
|
|
26
|
+
|
|
27
|
+
digest = OpenSSL::Digest.new("sha1")
|
|
28
|
+
str_8 = str.encode("UTF-8")
|
|
29
|
+
hash = OpenSSL::HMAC.digest(digest, key, str_8)
|
|
30
|
+
base64_str = Base64.encode64(hash).chomp
|
|
31
|
+
|
|
32
|
+
sign = specialUrlEncode(base64_str)
|
|
33
|
+
|
|
34
|
+
return sign
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# 此方法没有问题
|
|
38
|
+
def self.specialUrlEncode(value)
|
|
39
|
+
str = CGI.escape(value)
|
|
40
|
+
return str.gsub("+", "%20").gsub("*", "%2A").gsub("%7E", "~")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: ali_sms
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- "袁帅"
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2017-11-27 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description: "阿里云短信接口"
|
|
14
|
+
email: bysxrokr@qq.com
|
|
15
|
+
executables: []
|
|
16
|
+
extensions: []
|
|
17
|
+
extra_rdoc_files: []
|
|
18
|
+
files:
|
|
19
|
+
- lib/ali_sms.rb
|
|
20
|
+
- lib/ali_sms/config.rb
|
|
21
|
+
- lib/ali_sms/curl.rb
|
|
22
|
+
- lib/ali_sms/sms.rb
|
|
23
|
+
- lib/ali_sms/util.rb
|
|
24
|
+
homepage: http://rubygems.org/gems/ali_sms
|
|
25
|
+
licenses:
|
|
26
|
+
- MIT
|
|
27
|
+
metadata: {}
|
|
28
|
+
post_install_message:
|
|
29
|
+
rdoc_options: []
|
|
30
|
+
require_paths:
|
|
31
|
+
- lib
|
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
33
|
+
requirements:
|
|
34
|
+
- - ">="
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: '0'
|
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - ">="
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '0'
|
|
42
|
+
requirements: []
|
|
43
|
+
rubyforge_project:
|
|
44
|
+
rubygems_version: 2.4.5
|
|
45
|
+
signing_key:
|
|
46
|
+
specification_version: 4
|
|
47
|
+
summary: "阿里云短信接口"
|
|
48
|
+
test_files: []
|