alidayu_api 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cab21f1519c50334d49a4995425f90cc127cfc48
4
+ data.tar.gz: d37fb855fd7ff8317679c407620c285ce0489a70
5
+ SHA512:
6
+ metadata.gz: 1c34f525fe9966fce35b2ceb7047bc69619ef017c862ad1ab3bde7271fb2215fddd209cafd81d7ca5cbf291d95f0a000665c3ce5ec55ecdb575ea45dbfdbc102
7
+ data.tar.gz: 27b4aad7118c9ccfb846d9c5b9e6ccf040775ea64f9f30bf1c86698fd54377f03c26e02e568dcf3f3bf306b4e79a526beaf7c02336c32a31b8f7b027f4a24e2f
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://ruby.taobao.org'
2
+
3
+ # Specify your gem's dependencies in alidayu_api.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2016 402399938
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,120 @@
1
+ # AlidayuApi
2
+
3
+ alidayu api for ruby
4
+
5
+ 阿里大鱼相关API调用,可调用
6
+
7
+ 1. 短信发送 `alibaba.aliqin.fc.sms.num.send`
8
+ 2. 短信发送记录查询 `alibaba.aliqin.fc.sms.num.query`
9
+ 3. 文本转语音通知 `alibaba.aliqin.fc.tts.num.singlecall`
10
+ 4. 语音通知 `alibaba.aliqin.fc.voice.num.singlecall`
11
+ 5. 语音双呼 `alibaba.aliqin.fc.voice.num.doublecall`
12
+
13
+ ## 安装
14
+
15
+ 添加下面的代码到Gemfile中:
16
+
17
+ ```ruby
18
+ gem 'alidayu_api'
19
+ ```
20
+
21
+ 然后执行:
22
+
23
+ $ bundle install
24
+
25
+ 或者执行下面的代码:
26
+
27
+ $ gem install alidayu_api
28
+
29
+ ## 使用
30
+ ### 配置
31
+ 创建脚本`config/initializers/alidayu.rb`填入以下代码
32
+
33
+ ```ruby
34
+ Alidayu.setup do |config|
35
+ config.server = 'http://gw.api.taobao.com/router/rest'
36
+ config.app_key = ''
37
+ config.app_secret = ''
38
+ config.sign_name = '注册验证'
39
+ end
40
+ ```
41
+
42
+ 短信发送模板请自行根据需求定义
43
+
44
+ ### 短信发送
45
+
46
+ ```ruby
47
+ options = {
48
+ mobiles: '13681695220',
49
+ template_code: 'SMS_5410467',
50
+ params: {
51
+ code: '45678',
52
+ product: '就诊通'
53
+ }
54
+ }
55
+ # params为模板内容的变量集合,根据模板中定义变量的不同而不同,若模板中未定义变量可不传
56
+
57
+ Alidayu::Sms.send(options)
58
+ ```
59
+
60
+ ### 短信发送记录查询
61
+
62
+ ```ruby
63
+ options = {
64
+ mobile: '13681695220',
65
+ query_date: 'yyyyMMdd',
66
+ current_page: 1, # 页码
67
+ page_size: 10 # 每页数量,最大50
68
+ }
69
+
70
+ Alidayu::Sms.query(options)
71
+
72
+ ```
73
+
74
+ ### 文本转语音通知
75
+
76
+ ```ruby
77
+ options = {
78
+ called_num: '',
79
+ called_show_num: '',
80
+ template_code: '', # 文本转语音(TTS)模板ID
81
+ params: { } # TTS模板变量,同短信发送的params
82
+ }
83
+
84
+ Alidayu::Tts.single_call(options)
85
+ ```
86
+
87
+ ### 语音通知
88
+
89
+ ```ruby
90
+ options = {
91
+ called_num: '',
92
+ called_show_num: '',
93
+ voice_code: '' # 语音文件ID
94
+ }
95
+
96
+ Alidayu::Voice.single_call(options)
97
+ ```
98
+
99
+ ### 语音双呼
100
+
101
+ ```ruby
102
+ options = {
103
+ caller_num: '',
104
+ caller_show_num: '',
105
+ called_num: '',
106
+ called_show_num: '',
107
+ time_out: '' # 通话超时时长,如接通后到达120秒时,通话会因为超时自动挂断。若无需设置超时时长,可不传
108
+ }
109
+
110
+ Alidayu::Voice.double_call(options)
111
+ ```
112
+
113
+
114
+ ## Contributing
115
+
116
+ 1. Fork it ( https://github.com/[my-github-username]/alidayu_api/fork )
117
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
118
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
119
+ 4. Push to the branch (`git push origin my-new-feature`)
120
+ 5. Create a new Pull Request
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'alidayu/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "alidayu_api"
8
+ spec.version = Alidayu::VERSION
9
+ spec.authors = ["wangrui"]
10
+ spec.email = ["to_wangrui@163.com"]
11
+ spec.summary = %q{阿里大鱼API}
12
+ spec.description = %q{阿里大鱼短信发送,语音双呼,文本转语音通知等API的调用}
13
+ spec.homepage = "https://github.com/wangrui438/alidayu_api"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency 'rspec', "~> 3.4"
24
+ end
@@ -0,0 +1,27 @@
1
+ require "alidayu/version"
2
+ require "alidayu/configuration"
3
+ require 'net/http'
4
+ require "json"
5
+ require "alidayu/helper"
6
+ require "alidayu/sms"
7
+ require "alidayu/tts"
8
+ require "alidayu/voice"
9
+ require "logger"
10
+
11
+
12
+ module Alidayu
13
+
14
+ class << self
15
+ def setup
16
+ yield config
17
+ end
18
+
19
+ def config
20
+ @config ||= Configuration.new
21
+ end
22
+
23
+ def logger
24
+ @logger ||= Logger.new(STDOUT)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,40 @@
1
+ module Alidayu
2
+ class Configuration
3
+ # API请求地址分为正式(http/https)和沙箱(http/https)共四个地址
4
+ # 正式-http: http://gw.api.taobao.com/router/rest
5
+ # 正式-https: https://eco.taobao.com/router/rest
6
+ # 沙箱-http: http://gw.api.tbsandbox.com/router/rest
7
+ # 沙箱-https: https://gw.api.tbsandbox.com/router/rest
8
+ def server
9
+ @server ||= 'https://eco.taobao.com/router/rest'
10
+ end
11
+
12
+ def server=(server)
13
+ @server = server
14
+ end
15
+
16
+ def app_key
17
+ @app_key ||= 'your_app_key'
18
+ end
19
+
20
+ def app_key=(app_key)
21
+ @app_key = app_key
22
+ end
23
+
24
+ def app_secret
25
+ @app_secret ||= 'your_app_secret'
26
+ end
27
+
28
+ def app_secret=(app_secret)
29
+ @app_secret = app_secret
30
+ end
31
+
32
+ def sign_name
33
+ @sign_name ||= 'sign_name'
34
+ end
35
+
36
+ def sign_name=(sign_name)
37
+ @sign_name = sign_name
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,46 @@
1
+ module Alidayu
2
+ module Helper
3
+ # 获得响应结果
4
+ def get_response(params)
5
+ uri = URI(Alidayu.config.server)
6
+ http = Net::HTTP.new(uri.host, uri.port)
7
+ if uri.scheme == "https"
8
+ http.use_ssl = true
9
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
10
+ end
11
+ request = Net::HTTP::Post.new(uri.path)
12
+ request_params = build_params(params)
13
+ request.add_field('Content-Type', 'application/json')
14
+ request.set_form_data(request_params)
15
+ response = http.request(request)
16
+ Alidayu.logger.info response.body
17
+ return JSON.parse(response.body)
18
+ end
19
+
20
+ private
21
+ # 构建请求参数
22
+ def build_params(params)
23
+ params[:app_key] = params[:app_key] || Alidayu.config.app_key
24
+ params[:timestamp] = Time.now.strftime("%Y-%m-%d %H:%M:%S")
25
+ params[:format] = 'json'
26
+ params[:v] = '2.0'
27
+ params[:sign_method] = 'hmac'
28
+
29
+ signature = generate_signature(params)
30
+
31
+ params[:sign] = signature
32
+ return params
33
+ end
34
+
35
+ # 生成签名 hmac
36
+ def generate_signature(params)
37
+ params.delete(:sign)
38
+ data = params.sort.compact.join
39
+ digest = OpenSSL::Digest.new('md5')
40
+ secret = params[:app_secret] || Alidayu.config.app_secret
41
+ hmac_sign = OpenSSL::HMAC.hexdigest(digest, secret, data).upcase
42
+ return hmac_sign
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,39 @@
1
+ module Alidayu
2
+ module Sms
3
+ class << self
4
+ include Alidayu::Helper
5
+
6
+ METHOD_HASH = {
7
+ sms_send: "alibaba.aliqin.fc.sms.num.send",
8
+ sms_query: "alibaba.aliqin.fc.sms.num.query"
9
+ }
10
+
11
+ # 短信发送
12
+ # { mobiles: '', template_code: '', params: { code: '', product: '' } }
13
+ def send(params)
14
+ params[:method] = METHOD_HASH[:sms_send]
15
+ params[:sms_type] = 'normal'
16
+ params[:sms_free_sign_name] = params.delete(:sign_name) || Alidayu.config.sign_name
17
+ if params[:params].is_a? Hash
18
+ sms_param = params[:params].to_json
19
+ params.delete(:params)
20
+ params[:sms_param] = sms_param
21
+ end
22
+ params[:rec_num] = params.delete(:mobiles)
23
+ params[:sms_template_code] = params.delete(:template_code)
24
+
25
+ response = get_response(params)
26
+ end
27
+
28
+ # 短信发送记录查询
29
+ # { mobile: '', query_date: 'yyyyMMdd', current_page: 1, page_size: 20 }
30
+ def query(params)
31
+ params[:method] = METHOD_HASH[:sms_query]
32
+ params[:rec_num] = params.delete(:mobile)
33
+
34
+ response = get_response(params)
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,20 @@
1
+ module Alidayu
2
+ module Tts
3
+ class << self
4
+ include Alidayu::Helper
5
+
6
+ # 文本转语音通知
7
+ # { called_num: '', called_show_num: '', template_code: '', params: { } }
8
+ def single_call(params)
9
+ params[:method] = 'alibaba.aliqin.fc.tts.num.singlecall'
10
+ params[:tts_code] = params.delete(:template_code)
11
+ if params[:params].is_a? Hash
12
+ tts_param = params[:params].to_json
13
+ params.delete(:params)
14
+ params[:tts_param] = tts_param
15
+ end
16
+ response = get_response(params)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ module Alidayu
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,30 @@
1
+ module Alidayu
2
+ module Voice
3
+ class << self
4
+ include Alidayu::Helper
5
+
6
+ METHOD_HASH = {
7
+ voice_double_call: "alibaba.aliqin.fc.voice.num.doublecall",
8
+ voice_single_call: "alibaba.aliqin.fc.voice.num.singlecall"
9
+ }
10
+
11
+ # 语音双呼
12
+ # { caller_num: '', caller_show_num: '', called_num: '', called_show_num: '' }
13
+ def double_call(params)
14
+ params[:method] = METHOD_HASH[:voice_double_call]
15
+ params[:session_time_out] = params.delete(:time_out)
16
+
17
+ response = get_response(params)
18
+ end
19
+
20
+ # 语音通知
21
+ # { called_num: '', called_show_num: '', voice_code: '' }
22
+ def single_call(params)
23
+ params[:method] = METHOD_HASH[:voice_single_call]
24
+
25
+ response = get_response(params)
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe "test sms api" do
4
+ it "should send message success" do
5
+ options = { mobiles: '13681695220', template_code: 'SMS_5410467', params: { code: '1234567', product: '就诊通' } }
6
+
7
+ data = Alidayu::Sms.send(options)
8
+
9
+ expect(data["alibaba_aliqin_fc_sms_num_send_response"]["result"]["success"]).to eq(true)
10
+ end
11
+
12
+ it "should send message fail" do
13
+ options = { mobiles: '13681695220', template_code: 'SMS_5410467', params: { code: '123567' } }
14
+
15
+ data = Alidayu::Sms.send(options)
16
+
17
+ expect(data["error_response"]).to be_an_instance_of(Hash)
18
+ end
19
+
20
+ it "should query message record" do
21
+ options = { mobile: '13681695220', query_date: '20160304', current_page: 1, page_size: 10 }
22
+
23
+ data = Alidayu::Sms.query(options)
24
+
25
+ expect(data["alibaba_aliqin_fc_sms_num_query_response"]).to be_an_instance_of(Hash)
26
+ end
27
+
28
+ end
@@ -0,0 +1,12 @@
1
+ require 'bundler/setup'
2
+ require 'alidayu'
3
+
4
+ Bundler.setup
5
+
6
+ Alidayu.setup do |config|
7
+ # config.server = 'http://gw.api.taobao.com/router/rest'
8
+ config.server = 'https://eco.taobao.com/router/rest'
9
+ config.app_key = '12345'
10
+ config.app_secret = '6789012345'
11
+ config.sign_name = '注册验证'
12
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe "test tts api" do
4
+ it "should send tts success" do
5
+ options = { called_num: '13681695220', called_show_num: '10086', template_code: 'TTS_5410474', params: { product: '就诊通', code: '1234567' } }
6
+
7
+ data = Alidayu::Tts.single_call(options)
8
+
9
+ expect(data["alibaba_aliqin_fc_sms_num_send_response"]["result"]["success"]).to eq(true)
10
+ end
11
+
12
+ it "should send tts fail" do
13
+ options = { called_num: '13681695220', called_show_num: '10086', template_code: 'TTS_5410474', params: { product: '就诊通' } }
14
+
15
+ data = Alidayu::Tts.single_call(options)
16
+
17
+ expect(data["error_response"]).to be_an_instance_of(Hash)
18
+ end
19
+
20
+ end
File without changes
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: alidayu_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - wangrui
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.4'
55
+ description: "阿里大鱼短信发送,语音双呼,文本转语音通知等API的调用"
56
+ email:
57
+ - to_wangrui@163.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - LICENSE.txt
65
+ - README.md
66
+ - Rakefile
67
+ - alidayu_api.gemspec
68
+ - lib/alidayu.rb
69
+ - lib/alidayu/configuration.rb
70
+ - lib/alidayu/helper.rb
71
+ - lib/alidayu/sms.rb
72
+ - lib/alidayu/tts.rb
73
+ - lib/alidayu/version.rb
74
+ - lib/alidayu/voice.rb
75
+ - spec/sms_spec.rb
76
+ - spec/spec_helper.rb
77
+ - spec/tts_spec.rb
78
+ - spec/voice_spec.rb
79
+ homepage: https://github.com/wangrui438/alidayu_api
80
+ licenses:
81
+ - MIT
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubyforge_project:
99
+ rubygems_version: 2.4.8
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: "阿里大鱼API"
103
+ test_files:
104
+ - spec/sms_spec.rb
105
+ - spec/spec_helper.rb
106
+ - spec/tts_spec.rb
107
+ - spec/voice_spec.rb
108
+ has_rdoc: