zhima_auth 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +52 -22
- data/lib/zhima_auth/configuration.rb +2 -1
- data/lib/zhima_auth/error.rb +2 -2
- data/lib/zhima_auth/request.rb +52 -0
- data/lib/zhima_auth/validation.rb +22 -12
- data/lib/zhima_auth/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20c07328831c323f52ed18319126106ea7db50e5
|
4
|
+
data.tar.gz: 42594b30d81fc95e15ac28218f5c6ffdf74a6660
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad8cb899a198e178f6d4ba583e886f544955891842268ba9be2c14258b9721caf405c3b5b6199314937086f7bd61adb5967b7000298d8eedd23c5a51b681bc66
|
7
|
+
data.tar.gz: d92bb317756319d2a361c0c2c51336d72a021718b98c5ca5e2e644ba41bb328e729d1074590e9b45b144ece82a9af5fff0fbc21ba5d8dbefbb1f6bf292b3d591
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,41 +1,71 @@
|
|
1
1
|
# ZhimaAuth
|
2
2
|
|
3
|
-
|
3
|
+
[芝麻认证](https://doc.open.alipay.com/docs/doc.htm?treeId=271&articleId=105915&docType=1)是通过人脸识别、眼纹识别、银行卡验证等手段,对用户进行实人验证,可有效地核实用户身份,防止身份冒用、欺诈等风险。简单说就是验证“张三是张三”。
|
4
|
+
因为官方并没有发布针对Ruby的SDK同时市面上并没有现成的可用于Ruby的第三方开发包,于是这个针对该空缺的Ruby就诞生了,Yeah:D
|
5
|
+
由于官方暂时只支持身份证 + 人脸识别的方案。所以此Gem也不列外。使用方式非常简单,具体如下,如果觉得这个Gem对你有用请别忘了点个赞,Happy coding! Everyone!
|
4
6
|
|
5
|
-
|
7
|
+
## Usage
|
6
8
|
|
7
|
-
|
9
|
+
首先[官方文档链接](https://doc.open.alipay.com/docs/doc.htm?treeId=271&articleId=105913&docType=1), 如果遇到任何意外的问题,首先建议请一定参阅官方文档,毕竟文档才是唯一的Truth。
|
8
10
|
|
9
|
-
|
11
|
+
### STEP 1
|
12
|
+
[产品注册](https://doc.open.alipay.com/docs/doc.htm?treeId=271&articleId=105913&docType=1), 这是第一步,注册产品并获取必要的app_id, 接着[配置密钥](https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106103&docType=1),其中自己的private_key是需要配置进自己的app的。完成上述两部获得相应的app_id及private_key,一切就准备就绪了。
|
10
13
|
|
14
|
+
### STEP 2
|
15
|
+
如果你用的是Rails(下面都会以此为假设)
|
11
16
|
```ruby
|
17
|
+
# Gemfile
|
12
18
|
gem 'zhima_auth'
|
13
|
-
```
|
14
|
-
|
15
|
-
And then execute:
|
16
|
-
|
17
|
-
$ bundle
|
18
|
-
|
19
|
-
Or install it yourself as:
|
20
|
-
|
21
|
-
$ gem install zhima_auth
|
22
|
-
|
23
|
-
## Usage
|
24
19
|
|
25
|
-
|
20
|
+
bundle install
|
21
|
+
|
22
|
+
# config/initializers/zhima.rb
|
23
|
+
ZhimaAuth.configure do |config|
|
24
|
+
config.app_id = "1223232"
|
25
|
+
config.private_key = private_key
|
26
|
+
end
|
27
|
+
|
28
|
+
# private_key looks like this
|
29
|
+
private_key = <<-KEY
|
30
|
+
-----BEGIN RSA PRIVATE KEY-----
|
31
|
+
MIIEogIBAAKCAQEAtSq73+gTT7OI7psSTvXGvKo6PtHoJ3NX3KS/vcSMIju9A0uT
|
32
|
+
uBZXA3Rsz/dUTlgAZOqkNWLHDoDj+pcjX1Oj99wkKDWAfui1xcrj5qgljBKPxiYo
|
33
|
+
nJUxDrmiHwFeO6KiNs4Z+FutAposxioz1+JhHYnssuL2lm4kwc7eJxYaDls5shlg
|
34
|
+
...many lines here...
|
35
|
+
LMFBAoGAUAgyFOusxxcXaKdJY+LzMNyQLmbmvVxF0l5V0syE1a8Mv5YivFsXqIFT
|
36
|
+
x+26iF4G8GcrZtejwVrkgr9i6B4CIHa90Qs8PpAuFgzspwU4ALOsBujfC1fk+iVl
|
37
|
+
d3S+mDxT/A+hxMFsZr8CQUj/CJtG/SYcLpAWAW3akvVqacHgqOQ=
|
38
|
+
-----END RSA PRIVATE KEY-----
|
39
|
+
KEY
|
40
|
+
```
|
26
41
|
|
27
|
-
|
42
|
+
### STEP 3
|
43
|
+
配置完成之后,最简单的调用方法如下
|
44
|
+
```ruby
|
45
|
+
# 获取biz_no, certify_url
|
46
|
+
params = { cert_name: "王大锤", cert_no: "32012345678901234X", return_url: "http://www.liangboyuan.pub", transanction_id: "12345" }
|
47
|
+
# transanction_id should be given for the moment, problem will be solved in the next release
|
48
|
+
ZhimaAuth.certify params
|
49
|
+
|
50
|
+
# expected response, following response is a fake one.
|
51
|
+
{:biz_no=>"ZM201704153000000767600024912345",
|
52
|
+
:certify_url=>
|
53
|
+
"https://openapi.alipay.com/gateway.do?app_id=2017021605123456&charset=utf-8&format=JSON&sign_type=RSA2&version=1.0&method=zhima.customer.certification.certify&return_url=http%3A%2F%2Fwww.liangboyuan.pub×tamp=2017-04-15+14%3A37%3A30&biz_content=%7B%22biz_no%22%3A%22ZM201704153000000767600024912345%22%7D&sign=lXzkmaNfv%2FwZppNItxTBGIJK%2Fpw2sKwhofNf9UtN3RMl%2FFo2FSKY4LaA3Vf6J04VXNI6LK7Vkw0OiTVVfKwG2P%2F5AbpUxNeC2uevE%2FIBjOvq6QeQwZNcfjhc8M87umMWUqTpsDzye6W2KaRR7HAbDOeEG8iizVXwADqf842nkWyviFj7Jh8YK6726DsleZTb%2BQybNWmPgJ4Y7wLeSmhNSe8aP9vmVuXVbVshTU1I50BgoaSpvvFLwHzmKstrKkdgpVwQgMcloGMMK3z90vbdNNn85KamxwF4u2reUSYeavkKBvgQyog%3D%3D"}
|
54
|
+
```
|
55
|
+
获取认证结果的调用方法如下
|
56
|
+
```ruby
|
57
|
+
# 参数为之前一部获取的biz_no
|
58
|
+
ZhimaAuth::QueryRequest.new("MK8789789789787978").get_certify_result
|
28
59
|
|
29
|
-
|
60
|
+
# expected result
|
61
|
+
"true" or "false"
|
62
|
+
```
|
30
63
|
|
31
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
64
|
|
33
65
|
## Contributing
|
34
66
|
|
35
|
-
|
36
|
-
|
67
|
+
If you find any bug or want to contribute, feel free to make a pull request or create a issue, I will try my best to work with that. Or you can live me a message to my email: lby89757@hotmail.com
|
37
68
|
|
38
69
|
## License
|
39
70
|
|
40
71
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
41
|
-
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ZhimaAuth
|
2
2
|
class Configuration
|
3
|
-
attr_accessor :app_id, :private_key, :sign_type, :format, :charset, :version, :biz_code
|
3
|
+
attr_accessor :app_id, :private_key, :sign_type, :format, :charset, :version, :biz_code, :admittance_score
|
4
4
|
|
5
5
|
def initialize
|
6
6
|
@app_id = "app_id"
|
@@ -10,6 +10,7 @@ module ZhimaAuth
|
|
10
10
|
@charset = "utf-8"
|
11
11
|
@version = "1.0"
|
12
12
|
@biz_code = "FACE"
|
13
|
+
@admittance_score = 650
|
13
14
|
end
|
14
15
|
end
|
15
16
|
end
|
data/lib/zhima_auth/error.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
module ZhimaAuth
|
2
|
-
class
|
2
|
+
class InvalidParams < StandardError
|
3
3
|
attr_accessor :message
|
4
4
|
def initialize(msg=nil)
|
5
5
|
@message = msg
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
|
-
class
|
9
|
+
class InvalidResponse < StandardError
|
10
10
|
attr_accessor :message
|
11
11
|
def initialize(msg=nil)
|
12
12
|
@message = msg
|
data/lib/zhima_auth/request.rb
CHANGED
@@ -128,4 +128,56 @@ module ZhimaAuth
|
|
128
128
|
end
|
129
129
|
|
130
130
|
end
|
131
|
+
|
132
|
+
class CreditRequest < BaseRequest
|
133
|
+
|
134
|
+
def initialize biz_params
|
135
|
+
# support cert_type: IDENTITY_CARD(身份证),PASSPORT(护照),ALIPAY_USER_ID(支付宝uid)
|
136
|
+
@cert_type = biz_params[:cert_type]
|
137
|
+
@cert_name = biz_params[:cert_name]
|
138
|
+
@cert_no = biz_params[:cert_no]
|
139
|
+
@transaction_id = biz_params[:transaction_id]
|
140
|
+
@admittance_score = biz_params[:admittance_score]
|
141
|
+
end
|
142
|
+
|
143
|
+
def excute
|
144
|
+
@response ||= RestClient.post url_with_params, {}
|
145
|
+
end
|
146
|
+
|
147
|
+
def get_result
|
148
|
+
res = JSON.parse(excute)
|
149
|
+
Validation.check_credit_response res
|
150
|
+
result = res["zhima_credit_score_brief_get_response"]["is_admittance"]
|
151
|
+
biz_no = res["zhima_credit_score_brief_get_response"]["biz_no"]
|
152
|
+
{
|
153
|
+
passed: result == "Y" ? true : false,
|
154
|
+
biz_no: biz_no
|
155
|
+
}
|
156
|
+
end
|
157
|
+
|
158
|
+
private
|
159
|
+
|
160
|
+
def url_with_params
|
161
|
+
[url, WebUtil.to_query(params_with_sign)].join("?")
|
162
|
+
end
|
163
|
+
|
164
|
+
def params
|
165
|
+
@params ||= base_params.merge({
|
166
|
+
method: "zhima.credit.score.brief.get",
|
167
|
+
timestamp: Time.now.strftime("%Y-%m-%d %H:%M:%S"),
|
168
|
+
biz_content: biz_content.to_json
|
169
|
+
})
|
170
|
+
end
|
171
|
+
|
172
|
+
def biz_content
|
173
|
+
{
|
174
|
+
transaction_id: @transaction_id,
|
175
|
+
product_code: "w1010100000000002733",
|
176
|
+
cert_type: @cert_type,
|
177
|
+
cert_no: @cert_no,
|
178
|
+
name: @cert_name,
|
179
|
+
admittance_score: @admittance_score
|
180
|
+
}.delete_if { |key, value| value.to_s.strip == '' }
|
181
|
+
end
|
182
|
+
end
|
131
183
|
end
|
@@ -2,43 +2,53 @@ module ZhimaAuth
|
|
2
2
|
class Validation
|
3
3
|
class << self
|
4
4
|
def check_initialize_params biz_params
|
5
|
-
raise
|
5
|
+
raise ZhimaAuth::InvalidParams, "Params should be a hash" unless biz_params.is_a? Hash
|
6
6
|
unless biz_params[:cert_name] && biz_params[:cert_no] && biz_params[:transaction_id]
|
7
|
-
raise
|
7
|
+
raise ZhimaAuth::InvalidParams, "Params should include cert_name, cert_no and transaction_id"
|
8
8
|
end
|
9
9
|
check_name biz_params[:cert_name]
|
10
10
|
check_id_no biz_params[:cert_no]
|
11
11
|
end
|
12
12
|
|
13
13
|
def check_certify_params biz_params
|
14
|
-
raise
|
14
|
+
raise ZhimaAuth::InvalidParams, "Params should be a hash" unless biz_params.is_a? Hash
|
15
15
|
unless biz_params[:biz_no] && biz_params[:return_url]
|
16
|
-
raise
|
16
|
+
raise ZhimaAuth::InvalidParams, "Params should include biz_no and return_url"
|
17
17
|
end
|
18
18
|
check_url biz_params[:return_url]
|
19
19
|
check_biz_no biz_params[:biz_no]
|
20
20
|
end
|
21
21
|
|
22
22
|
def check_biz_no biz_no
|
23
|
-
raise
|
23
|
+
raise ZhimaAuth::InvalidParams, "Invalid biz no" unless biz_no.length == 32
|
24
24
|
end
|
25
25
|
|
26
26
|
def check_initialize_response response
|
27
|
-
raise
|
27
|
+
raise ZhimaAuth::InvalidResponse, "Initialize request failed" unless (response.is_a? Hash) && response["zhima_customer_certification_initialize_response"]
|
28
28
|
response_code = response["zhima_customer_certification_initialize_response"]["code"]
|
29
29
|
if response_code != "10000"
|
30
30
|
response_msg = response["zhima_customer_certification_initialize_response"]["sub_msg"]
|
31
|
-
raise
|
31
|
+
raise ZhimaAuth::InvalidResponse, "#{response_code}#{response_msg}"
|
32
32
|
end
|
33
33
|
true
|
34
34
|
end
|
35
35
|
|
36
36
|
def check_query_response response
|
37
|
-
raise
|
37
|
+
raise ZhimaAuth::InvalidResponse, "Query request failed" unless (response.is_a? Hash) && response["zhima_customer_certification_query_response"]
|
38
38
|
response_code = response["zhima_customer_certification_query_response"]["code"]
|
39
39
|
if response_code != "10000"
|
40
40
|
response_msg = response["zhima_customer_certification_query_response"]["sub_msg"]
|
41
|
-
raise
|
41
|
+
raise ZhimaAuth::InvalidResponse, "#{response_code}#{response_msg}"
|
42
|
+
end
|
43
|
+
true
|
44
|
+
end
|
45
|
+
|
46
|
+
def check_credit_response response
|
47
|
+
raise ZhimaAuth::InvalidResponse, "Credit request failed" unless (response.is_a? Hash) && response["zhima_credit_score_brief_get_response"]
|
48
|
+
response_code = response["zhima_credit_score_brief_get_response"]["code"]
|
49
|
+
if response_code != "10000"
|
50
|
+
response_msg = response["zhima_credit_score_brief_get_response"]["sub_msg"]
|
51
|
+
raise ZhimaAuth::InvalidResponse, "#{response_code}#{response_msg}"
|
42
52
|
end
|
43
53
|
true
|
44
54
|
end
|
@@ -46,16 +56,16 @@ module ZhimaAuth
|
|
46
56
|
private
|
47
57
|
|
48
58
|
def check_url url
|
49
|
-
raise
|
59
|
+
raise ZhimaAuth::InvalidParams, "Invalid return url" unless url =~ URI::regexp
|
50
60
|
end
|
51
61
|
|
52
62
|
def check_name name
|
53
|
-
raise
|
63
|
+
raise ZhimaAuth::InvalidParams, "Invalid name" if (name.length > 10 || name.length <= 1)
|
54
64
|
true
|
55
65
|
end
|
56
66
|
|
57
67
|
def check_id_no id_no
|
58
|
-
raise
|
68
|
+
raise ZhimaAuth::InvalidParams, "Invalid identity number" unless (id_no.length == 15 || id_no.length == 18)
|
59
69
|
true
|
60
70
|
end
|
61
71
|
end
|
data/lib/zhima_auth/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zhima_auth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- BranLiang
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|