aliyun_sdk_ruby 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8bed4b56791366406f79295ff0b1d3e8e41c572ef9f0e445dde097f9a619c9fb
4
+ data.tar.gz: e761bcdd4f891c3521a798361b2d80ef3e817a308ceeb4c18ae36b0a217b82bb
5
+ SHA512:
6
+ metadata.gz: d3e9f310632584d8c5387c68c2a4a37531e0dd27944f333b66d81e581f62d80cbb2d78045eecc0fb4aa1075283263bedc0e933c1a09d6d18517cd8974ecf97eb
7
+ data.tar.gz: 0d4026f7ea632b10cb7ba5242184c96989ac288cd2e6c1b3e42f524460549a42adbbe1e72dac5a74ef658ee6a81a48781d95b141ad2f3f355931380ff6c820a2
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # AliyunSDK (基础通用 Ruby SDK)
2
+
3
+ ## 安装
4
+
5
+ 添加到 Gemfile:
6
+
7
+ ```ruby
8
+ gem 'aliyun_sdk', github: "daqing/aliyun_sdk"
9
+ ```
10
+
11
+ ## 使用方法
12
+
13
+ ```ruby
14
+ require 'aliyun_sdk'
15
+
16
+ config = AliyunSDK::Config.new(
17
+ access_key_id: "YourAccessKeyID",
18
+ access_key_secret: "YourAccessKeySecret"
19
+ )
20
+
21
+ client = AliyunSDK::Client.new(config)
22
+
23
+ api = AliyunSDK::API::Id2MetaVerify.new("张三", "370503199922113344")
24
+ response = client.request(api)
25
+
26
+ puts response
27
+ ```
28
+
29
+ ---
30
+
31
+ 本 SDK 仅实现基础签名和请求封装,适合自定义扩展。
@@ -0,0 +1,64 @@
1
+ module AliyunSDK
2
+ module API
3
+ # 实人认证 - 身份二要素核验
4
+ #
5
+ # API 返回结果:
6
+ #
7
+ # 姓名和身份证匹配:
8
+ # {
9
+ # "ResultObject" => {"BizCode" => "1"},
10
+ # "RequestId" => "4924E5D4-874C-5062-9E37-992D85EDDFAE",
11
+ # "Message" => "success",
12
+ # "Code" => "200"
13
+ # }
14
+ #
15
+ # 姓名和身份证不匹配:
16
+ # {
17
+ # "ResultObject" => {"BizCode" => "2"},
18
+ # "RequestId" => "7CB9FE8B-8A9F-5E49-8C17-4DD4B1C724A2",
19
+ # "Message" => "success",
20
+ # "Code" => "200"
21
+ # }
22
+ #
23
+ # 身份证非法:
24
+ # {
25
+ # "RequestId" => "24394B83-EE10-5C5F-A0BC-FBC680A694A4",
26
+ # "HostId" => "cloudauth.cn-hangzhou.aliyuncs.com",
27
+ # "Code" => "401",
28
+ # "Message" => "参数非法(identifyNum)",
29
+ # "Recommend" => "https://api.aliyun.com/troubleshoot?q=401&product=Cloudauth&requestId=24394B83-EE10-5C5F-A0BC-FBC680A694A4"
30
+ # }
31
+ class Id2MetaVerify
32
+ # @param username [String] 姓名
33
+ # @param id_number [String] 身份证号
34
+ def initialize(username, id_number)
35
+ @username = username
36
+ @id_number = id_number
37
+ end
38
+
39
+ def request_action
40
+ "Id2MetaVerify"
41
+ end
42
+
43
+ def request_method
44
+ "POST"
45
+ end
46
+
47
+ def request_params
48
+ {
49
+ "ParamType" => "normal",
50
+ "IdentifyNum" => @id_number,
51
+ "UserName" => @username
52
+ }
53
+ end
54
+
55
+ def request_endpoint
56
+ "cloudauth.cn-hangzhou.aliyuncs.com"
57
+ end
58
+
59
+ def request_version
60
+ "2019-03-07"
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,42 @@
1
+ require "rest-client"
2
+ require "json"
3
+ require "securerandom"
4
+ require_relative "config"
5
+ require_relative "signer"
6
+
7
+ module AliyunSDK
8
+ class Client
9
+ def initialize(config)
10
+ @config = config
11
+ end
12
+
13
+ def request(api)
14
+ public_params = {
15
+ "Format" => "JSON",
16
+ "Version" => api.request_version,
17
+ "AccessKeyId" => @config.access_key_id,
18
+ "SignatureMethod" => "HMAC-SHA1",
19
+ "Timestamp" => Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
20
+ "SignatureVersion" => "1.0",
21
+ "SignatureNonce" => SecureRandom.uuid,
22
+ "Action" => api.request_action,
23
+ "RegionId" => @config.region_id
24
+ }
25
+
26
+ method = api.request_method
27
+ all_params = public_params.merge(api.request_params)
28
+ signature = Signer.sign(all_params, @config.access_key_secret, method)
29
+ all_params["Signature"] = signature
30
+
31
+ endpoint = api.request_endpoint
32
+ response = if method == "GET"
33
+ RestClient.get("https://#{endpoint}", { params: all_params })
34
+ else
35
+ RestClient.post("https://#{endpoint}", all_params)
36
+ end
37
+ JSON.parse(response.body)
38
+ rescue RestClient::ExceptionWithResponse => e
39
+ { "error" => e.response }
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,15 @@
1
+ module AliyunSDK
2
+ class Config
3
+ DEFAULT_REGION = "cn-hangzhou".freeze
4
+
5
+ attr_reader :access_key_id, :access_key_secret, :region_id
6
+
7
+ # @param access_key_id [String]
8
+ # @param access_key_secret [String]
9
+ def initialize(access_key_id:, access_key_secret:)
10
+ @access_key_id = access_key_id
11
+ @access_key_secret = access_key_secret
12
+ @region_id = DEFAULT_REGION
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ require "openssl"
2
+ require "base64"
3
+ require "cgi"
4
+
5
+ module AliyunSDK
6
+ class Signer
7
+ def self.sign(params, access_key_secret, http_method = "GET")
8
+ sorted = params.sort.to_h
9
+ canonicalized = sorted.map { |k, v| "#{percent_encode(k)}=#{percent_encode(v)}" }.join("&")
10
+ string_to_sign = "#{http_method.upcase}&%2F&" + percent_encode(canonicalized)
11
+ key = "#{access_key_secret}&"
12
+ digest = OpenSSL::HMAC.digest("sha1", key, string_to_sign)
13
+ Base64.strict_encode64(digest)
14
+ end
15
+
16
+ def self.percent_encode(str)
17
+ CGI.escape(str.to_s).gsub("+", "%20").gsub("*", "%2A").gsub("%7E", "~")
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ module AliyunSDK
2
+ VERSION = "0.1.0".freeze
3
+ end
data/lib/aliyun_sdk.rb ADDED
@@ -0,0 +1,5 @@
1
+ require_relative "aliyun_sdk/version"
2
+ require_relative "aliyun_sdk/config"
3
+ require_relative "aliyun_sdk/signer"
4
+ require_relative "aliyun_sdk/client"
5
+ require_relative "aliyun_sdk/api/id2_meta_verify"
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aliyun_sdk_ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - David Zhang
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rest-client
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.1'
26
+ description: Aliyun SDK for Ruby
27
+ email:
28
+ - daqing@mzevo.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - README.md
34
+ - lib/aliyun_sdk.rb
35
+ - lib/aliyun_sdk/api/id2_meta_verify.rb
36
+ - lib/aliyun_sdk/client.rb
37
+ - lib/aliyun_sdk/config.rb
38
+ - lib/aliyun_sdk/signer.rb
39
+ - lib/aliyun_sdk/version.rb
40
+ homepage: https://github.com/daqing/aliyun_sdk
41
+ licenses:
42
+ - MIT
43
+ metadata: {}
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '3.3'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubygems_version: 3.6.7
59
+ specification_version: 4
60
+ summary: Aliyun Ruby SDK
61
+ test_files: []