reapal 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/lib/reapal.rb +2 -0
- data/lib/reapal/api/asset/tender_all_cancel.rb +64 -0
- data/lib/reapal/api/asset/tender_apply.rb +81 -0
- data/lib/reapal/api/asset/tender_auth_cancel.rb +66 -0
- data/lib/reapal/api/asset/tender_auth_query.rb +64 -0
- data/lib/reapal/api/asset/tender_finish.rb +78 -0
- data/lib/reapal/api/asset/tender_repayment_complete.rb +75 -0
- data/lib/reapal/api/asset/tender_repayment_project.rb +70 -0
- data/lib/reapal/api/error_codes.rb +46 -0
- data/lib/reapal/api/money/.keep +0 -0
- data/lib/reapal/api/order/.keep +0 -0
- data/lib/reapal/api/user/balance_query.rb +61 -0
- data/lib/reapal/api/user/bank_card_add_sms.rb +71 -0
- data/lib/reapal/api/user/bank_card_add_sms_again.rb +62 -0
- data/lib/reapal/api/user/bank_card_add_sms_confirm.rb +61 -0
- data/lib/reapal/api/user/bind_card_query.rb +67 -0
- data/lib/reapal/api/user/contract_query.rb +18 -0
- data/lib/reapal/api/user/mobile_query.rb +56 -0
- data/lib/reapal/api/{trust → user}/onekey_batch_contract.rb +8 -26
- data/lib/reapal/api/user/onekey_contract.rb +61 -0
- data/lib/reapal/api/user/undo_bind_bank_card.rb +60 -0
- data/lib/reapal/client.rb +6 -0
- data/lib/reapal/form/business_auth_form.rb +61 -0
- data/lib/reapal/form/find_trade_password_form.rb +48 -0
- data/lib/reapal/form/mobile_modify_form.rb +50 -0
- data/lib/reapal/form/signle_tender_transfer_form.rb +72 -0
- data/lib/reapal/form/tender_invest_form.rb +62 -0
- data/lib/reapal/form/tender_refund_form.rb +84 -0
- data/lib/reapal/form/withdraw_apply_form.rb +54 -0
- data/lib/reapal/http/communicate.rb +45 -20
- data/lib/reapal/http/response.rb +21 -0
- data/lib/reapal/utils.rb +16 -0
- data/lib/reapal/version.rb +1 -1
- metadata +29 -9
- data/lib/reapal/api/trust/balance_query.rb +0 -58
- data/lib/reapal/api/trust/contract_query.rb +0 -35
- data/lib/reapal/api/trust/find_trade_password.rb +0 -41
- data/lib/reapal/api/trust/mobile_modify.rb +0 -42
- data/lib/reapal/api/trust/onekey_contract.rb +0 -77
- data/lib/reapal/api/trust/withdraw_apply.rb +0 -44
@@ -0,0 +1,62 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Reapal
|
4
|
+
module Api
|
5
|
+
module Form
|
6
|
+
module TenderInvestForm
|
7
|
+
|
8
|
+
# 3.2 投标(Form)(PC端)
|
9
|
+
#
|
10
|
+
# @param order_no [ String ] 投标订单号
|
11
|
+
# @param tender_no [ String ] 投标的标号
|
12
|
+
# @param amount [ BigDecimal ] 金额
|
13
|
+
# @param coupon_amt [ BigDecimal ] 红包/抵用券
|
14
|
+
# @param busway [ String ] 设备通道 00:PC端;01:手机端;02:Pad端;03:其它
|
15
|
+
# @param return_url [ String ] 回调 URL
|
16
|
+
# @param notify_url [ String ] 通知 URL
|
17
|
+
# @param remark [ String ] 备注
|
18
|
+
#
|
19
|
+
# @return [ Hash ] 结果集
|
20
|
+
# * form_method [ Hash ]
|
21
|
+
# * url [ String ]
|
22
|
+
# * method [ String ]
|
23
|
+
# * form_data [ Hash ]
|
24
|
+
# * :merchant_id
|
25
|
+
# * :encryptkey
|
26
|
+
# * :data
|
27
|
+
#
|
28
|
+
def find_trade_password(order_no, tender_no, amount, coupon_amt, busway='01', return_url, notify_url, remark)
|
29
|
+
service = 'reapal.trust.tenderInvest'
|
30
|
+
post_path = '/reagw/tender/rest.htm'
|
31
|
+
|
32
|
+
params = {
|
33
|
+
order_no: contracts,
|
34
|
+
tender_no: tender_no,
|
35
|
+
amount: amount,
|
36
|
+
coupon_amt: coupon_amt,
|
37
|
+
busway: busway,
|
38
|
+
return_url: return_url,
|
39
|
+
notify_url: notify_url,
|
40
|
+
remark: remark,
|
41
|
+
applyTime: Time.now.strftime('%Y-%m-%d %H:%M:%S'),
|
42
|
+
}
|
43
|
+
|
44
|
+
request = Http.get_body(service, params, @config)
|
45
|
+
|
46
|
+
{
|
47
|
+
form_method: {
|
48
|
+
:url => config[:server_url] + post_path,
|
49
|
+
:method => :post,
|
50
|
+
},
|
51
|
+
form_data: {
|
52
|
+
:merchant_id => request[:merchant_id],
|
53
|
+
:encryptkey => request[:encryptkey],
|
54
|
+
:data => request[:data]
|
55
|
+
},
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Reapal
|
4
|
+
module Api
|
5
|
+
module Form
|
6
|
+
module TenderRefund
|
7
|
+
|
8
|
+
# 3.9 还款(Form)
|
9
|
+
#
|
10
|
+
# @param flow_id [String] 还款订单号
|
11
|
+
# @param tender_no [String] 标的号
|
12
|
+
# @param debit_contrats [String] 借款方协议号
|
13
|
+
# @param debit_detail [JSON] 借款方还款
|
14
|
+
# *seria_no [String] 还款流水号
|
15
|
+
# *payee_contracts [String] 收款方协议号
|
16
|
+
# *amount [String] 金额
|
17
|
+
# *remark [String] 备注
|
18
|
+
# @param invest_detail [JSON] 投资方分账
|
19
|
+
# *seria_no [String] 还款分账流水号
|
20
|
+
# *invest_contracts [String] 投资方协议号
|
21
|
+
# *payee_contracts [String] 收款方协议号
|
22
|
+
# *amount [String] 金额
|
23
|
+
# *remark [String] 备注
|
24
|
+
# @param busway [String] '00':PC端;'01':手机端(默认);'02':Pad端;'03':其它
|
25
|
+
# @param return_url [String] 回调 url
|
26
|
+
# @param notify_url [String] 通知 url
|
27
|
+
|
28
|
+
|
29
|
+
# @return [ Hash ] 结果集
|
30
|
+
# * form_method
|
31
|
+
# * url
|
32
|
+
# * method
|
33
|
+
# * form_data
|
34
|
+
# * :merchant_id
|
35
|
+
# * :encryptkeyÍ
|
36
|
+
# * :data
|
37
|
+
#
|
38
|
+
def tender_refund_form(flow_id, tender_no, debit_contrats, debit_detail,
|
39
|
+
invest_details, busway='01', return_url, notify_url )
|
40
|
+
|
41
|
+
service = 'reapal.trust.tenderRefund'
|
42
|
+
post_path = '/reagw/tender/rest.htm'
|
43
|
+
|
44
|
+
debit_details[:serialNo] = debit_detail[:seria_no]
|
45
|
+
debit_details[:payeeContracts] = debit_detail[:payee_contracts]
|
46
|
+
debit_details[:amount] = debit_detail[:amount]
|
47
|
+
debit_details[:remark] = debit_detail[:remark]
|
48
|
+
|
49
|
+
invest_details[:seriaNo] = invest_detail[:seria_no]
|
50
|
+
invest_details[:investContracts] = invest_detail[:invest_contracts]
|
51
|
+
invest_details[:payeeContracts] = invest_detail[:payee_contracts]
|
52
|
+
invest_details[:amount] = invest_detail[:amount]
|
53
|
+
invest_details[:mark] = invest_detail[:mark]
|
54
|
+
|
55
|
+
|
56
|
+
params = {
|
57
|
+
orderNo: flow_id,
|
58
|
+
tenderNo: tender_no,
|
59
|
+
debitContracts: debit_contrats,
|
60
|
+
debitDetails: debit_details,
|
61
|
+
investDetails: invest_details,
|
62
|
+
busway: busway,
|
63
|
+
returnUrl: return_url,
|
64
|
+
notifyUrl: notify_url,
|
65
|
+
applyTime: Time.now.strftime('%Y-%m-%d %H:%M:%S')
|
66
|
+
}
|
67
|
+
|
68
|
+
request = Http.get_body(service, params, @config)
|
69
|
+
|
70
|
+
{
|
71
|
+
form_method: {
|
72
|
+
:url => config[:server_url] + post_path,
|
73
|
+
:method => :post,
|
74
|
+
},
|
75
|
+
form_data: request
|
76
|
+
|
77
|
+
}
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
end #TenderRefund
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Reapal
|
4
|
+
module Form
|
5
|
+
module WithdrawApplyForm
|
6
|
+
|
7
|
+
# 2.7 提现申请
|
8
|
+
#
|
9
|
+
# @param contract [String] 用户协议
|
10
|
+
# @param flow_id [String] 订单号
|
11
|
+
# @param money [Number] 提现金额,2位小数
|
12
|
+
# @param charge [Number] 手续费,2位小数
|
13
|
+
# @param return_url [String] 回调 url
|
14
|
+
# @param notify_url [String] 通知 url
|
15
|
+
# @param buyway [String] 设备通道,默认手机端。00:PC端;01:手机端;02:Pad端;03:其它
|
16
|
+
#
|
17
|
+
# @return [ Hash ] 结果集
|
18
|
+
# * :form_method
|
19
|
+
# * :method
|
20
|
+
# * :url
|
21
|
+
# * :form_data
|
22
|
+
# * :merchant_id
|
23
|
+
# * :encryptkey
|
24
|
+
# * :data
|
25
|
+
#
|
26
|
+
def withdraw_apply_form(contract, flow_id, money, charge, return_url, notify_url, busway='01')
|
27
|
+
service = 'reapal.trust.withdrawApply'
|
28
|
+
post_path = '/reagw/service/withdraw.htm'
|
29
|
+
|
30
|
+
params = {
|
31
|
+
orderNo: flow_id,
|
32
|
+
contracts: contract,
|
33
|
+
amount: money,
|
34
|
+
charge: charge,
|
35
|
+
busway: busway,
|
36
|
+
returnUrl: return_url,
|
37
|
+
notifyUrl: notify_url,
|
38
|
+
applyTime: Time.now.strftime('%Y-%m-%d %H:%M:%S'),
|
39
|
+
}
|
40
|
+
|
41
|
+
form_data = Http.get_body(service, params, @config)
|
42
|
+
|
43
|
+
{
|
44
|
+
form_method: {
|
45
|
+
method: :post,
|
46
|
+
url: config[:server_url] + post_path,
|
47
|
+
},
|
48
|
+
form_data: form_data
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -5,20 +5,20 @@ module Reapal
|
|
5
5
|
SIGN_TYPE = '0' # 0 表示 md5
|
6
6
|
VERSION = '1.0' # 版本号
|
7
7
|
|
8
|
-
def self.post(service, params, config, post_path)
|
9
|
-
post_body = get_body(service, params, config)
|
8
|
+
def self.post(service, params, config, post_path, version=VERSION)
|
9
|
+
post_body = get_body(service, params, config, version)
|
10
10
|
uri = URI(config[:server_url] + post_path)
|
11
11
|
|
12
12
|
Reapal.logger.info "[#{service}] 请求内容为:\n#{params}\n"
|
13
13
|
Reapal.logger.info "[#{service}(#{uri})] 最终发送内容为:\n#{post_body}\n"
|
14
14
|
|
15
|
-
result =
|
15
|
+
result = nil
|
16
16
|
|
17
17
|
begin
|
18
18
|
response = Net::HTTP.post_form(uri, post_body)
|
19
19
|
Reapal.logger.info "[#{service}] 返回的报文为:\n#{response.body}"
|
20
20
|
|
21
|
-
if response.is_a?(Net::HTTPSuccess)
|
21
|
+
if response.is_a?(Net::HTTPSuccess)
|
22
22
|
response_raw_body = unpack_body(response.body, config)
|
23
23
|
result = Reapal::Http::Response.new(service: service,
|
24
24
|
flow_id: params[:orderNo],
|
@@ -27,18 +27,17 @@ module Reapal
|
|
27
27
|
data: response_raw_body[:resData],
|
28
28
|
data_valid: response_raw_body[:data_valid])
|
29
29
|
else
|
30
|
-
#
|
30
|
+
# 不成功的不解密, 500, 300, 400
|
31
31
|
result = Reapal::Http::Response.new(service: service,
|
32
32
|
flow_id: params[:orderNo],
|
33
33
|
http_response: response,
|
34
34
|
raw_body: response.body,
|
35
35
|
data_valid: true)
|
36
36
|
end
|
37
|
-
rescue
|
38
|
-
# 请求超时等网络原因,结果为 pending,等待下次查询
|
37
|
+
rescue Net::ReadTimeout
|
39
38
|
result = Reapal::Http::Response.new(service: service,
|
40
39
|
flow_id: params[:orderNo],
|
41
|
-
http_response:
|
40
|
+
http_response: nil,
|
42
41
|
data_valid: true)
|
43
42
|
end
|
44
43
|
|
@@ -48,9 +47,9 @@ module Reapal
|
|
48
47
|
end
|
49
48
|
|
50
49
|
# 表单的 body
|
51
|
-
def self.get_body(service, params, config)
|
50
|
+
def self.get_body(service, params, config, version=VERSION)
|
52
51
|
data = {
|
53
|
-
version:
|
52
|
+
version: version,
|
54
53
|
service: service,
|
55
54
|
partner: config[:partner_id],
|
56
55
|
sign: Sign::MD5.sign(params.to_json, config[:md5_key]),
|
@@ -66,24 +65,27 @@ module Reapal
|
|
66
65
|
}
|
67
66
|
end
|
68
67
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
68
|
+
def self.decode_data(encryptkey, data, config)
|
69
|
+
if encryptkey.nil? || data.nil? || encryptkey.empty? || data.empty?
|
70
|
+
return {
|
71
|
+
resData: {
|
72
|
+
errorCode: 'error_decode_params',
|
73
|
+
errorMsg: '解密参数不正确'
|
74
|
+
},
|
75
|
+
data_valid: true,
|
76
|
+
}
|
77
|
+
end
|
74
78
|
|
75
79
|
# 1. 拿到用来加密的16位随机字符串
|
76
|
-
random_key = Encrypt::RSA.decrypt(
|
77
|
-
config[:private_key])
|
80
|
+
random_key = Encrypt::RSA.decrypt(encryptkey, config[:private_key])
|
78
81
|
|
79
82
|
# 2. 用16位随机字符串解密返回的数据
|
80
|
-
data_string = Encrypt::AES.decrypt(
|
83
|
+
data_string = Encrypt::AES.decrypt(data, random_key)
|
81
84
|
data = parse_data_string(data_string)
|
82
85
|
data[:resData] = Utils.symbolize_keys(JSON.parse(data[:resData]))
|
83
86
|
|
84
87
|
# 3. 验签,错误时候 sign 是没有值的
|
85
|
-
if (data[:sign]
|
86
|
-
|| (data[:sign] && Sign::MD5.verify?(data[:resData].to_json, config[:md5_key], data[:sign]))
|
88
|
+
if data[:resData][:errorCode] || (data[:sign] && Sign::MD5.verify?(data[:resData].to_json, config[:md5_key], data[:sign]))
|
87
89
|
data[:data_valid] = true
|
88
90
|
else
|
89
91
|
data[:data_valid] = false
|
@@ -92,6 +94,29 @@ module Reapal
|
|
92
94
|
data
|
93
95
|
end
|
94
96
|
|
97
|
+
private
|
98
|
+
|
99
|
+
def self.unpack_body(body_string, config)
|
100
|
+
begin
|
101
|
+
# 返回是 json 字符串格式
|
102
|
+
body = Utils.symbolize_keys(JSON.parse(body_string))
|
103
|
+
rescue
|
104
|
+
body = {}
|
105
|
+
end
|
106
|
+
|
107
|
+
if body[:encryptkey].nil? || body[:data].nil?
|
108
|
+
return {
|
109
|
+
resData: {
|
110
|
+
errorCode: 'error_decode_params',
|
111
|
+
errorMsg: '解密参数不正确'
|
112
|
+
},
|
113
|
+
data_valid: true,
|
114
|
+
}
|
115
|
+
end
|
116
|
+
|
117
|
+
self.decode_data(body[:encryptkey], body[:data], config)
|
118
|
+
end
|
119
|
+
|
95
120
|
# 正确的返回字符串例子:
|
96
121
|
# 'version=1.0&service=reapal.trust.onekeyContract&signType=0&sign=cdab41a05d595d6a5f5a818af2b39398&resData={"contracts":"RB1711167FYG9U29","userName":"王五","userIdentity":"330602198711160034","userMobile":"18357101332","orderNo":"5a0d488fe0c016049a000001","resultCode":"0007","processTime":"2017-11-16 16:13:04"}'
|
97
122
|
#
|
data/lib/reapal/http/response.rb
CHANGED
@@ -13,6 +13,13 @@ module Reapal
|
|
13
13
|
params.each do |key, value|
|
14
14
|
instance_variable_set("@#{key}", value)
|
15
15
|
end
|
16
|
+
|
17
|
+
self.data = {} if self.data.nil? # 默认一定要有
|
18
|
+
|
19
|
+
unless self.data_valid
|
20
|
+
self.data[:errorCode] = 'sign_valid_fail'
|
21
|
+
self.data[:errorMsg] = '数据签名错误'
|
22
|
+
end
|
16
23
|
end
|
17
24
|
|
18
25
|
def [] key
|
@@ -28,6 +35,20 @@ module Reapal
|
|
28
35
|
arr.join("\n")
|
29
36
|
end
|
30
37
|
|
38
|
+
def http_success?
|
39
|
+
http_response && http_response.is_a?(Net::HTTPSuccess)
|
40
|
+
end
|
41
|
+
|
42
|
+
def http_fail?
|
43
|
+
# 而 400 错误一般都是地址不存在或者没有权限,都当成错误处理
|
44
|
+
http_response && http_response.code.to_s == '404'
|
45
|
+
end
|
46
|
+
|
47
|
+
def http_pending?
|
48
|
+
# nil 的时候是超时,非 404 的其他错误都是 pending
|
49
|
+
http_response.nil? || (!http_success? && !http_fail?)
|
50
|
+
end
|
51
|
+
|
31
52
|
end
|
32
53
|
|
33
54
|
end
|
data/lib/reapal/utils.rb
CHANGED
@@ -43,5 +43,21 @@ module Reapal
|
|
43
43
|
((0..9).to_a + ('a'..'z').to_a + ('A'..'Z').to_a).sample(size).join()
|
44
44
|
end
|
45
45
|
|
46
|
+
# api 通用返回数据结构
|
47
|
+
# @param request_params [Object] 请求参数
|
48
|
+
# @param response [Object] 响应对象
|
49
|
+
# @return [Object]
|
50
|
+
def self.api_result(request_params, response)
|
51
|
+
{
|
52
|
+
result: 'P', # 默认
|
53
|
+
request_params: request_params,
|
54
|
+
response: response,
|
55
|
+
flow_id: response.nil? ? nil : response.flow_id,
|
56
|
+
error_code: response.nil? ? nil : response.data[:errorCode],
|
57
|
+
error_msg: response.nil? ? nil : response.data[:errorMsg],
|
58
|
+
data: response.nil? ? nil : response.data,
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
46
62
|
end
|
47
63
|
end
|
data/lib/reapal/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reapal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tony
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -124,17 +124,37 @@ files:
|
|
124
124
|
- bin/console
|
125
125
|
- bin/setup
|
126
126
|
- lib/reapal.rb
|
127
|
-
- lib/reapal/api/
|
128
|
-
- lib/reapal/api/
|
129
|
-
- lib/reapal/api/
|
130
|
-
- lib/reapal/api/
|
131
|
-
- lib/reapal/api/
|
132
|
-
- lib/reapal/api/
|
133
|
-
- lib/reapal/api/
|
127
|
+
- lib/reapal/api/asset/tender_all_cancel.rb
|
128
|
+
- lib/reapal/api/asset/tender_apply.rb
|
129
|
+
- lib/reapal/api/asset/tender_auth_cancel.rb
|
130
|
+
- lib/reapal/api/asset/tender_auth_query.rb
|
131
|
+
- lib/reapal/api/asset/tender_finish.rb
|
132
|
+
- lib/reapal/api/asset/tender_repayment_complete.rb
|
133
|
+
- lib/reapal/api/asset/tender_repayment_project.rb
|
134
|
+
- lib/reapal/api/error_codes.rb
|
135
|
+
- lib/reapal/api/money/.keep
|
136
|
+
- lib/reapal/api/order/.keep
|
137
|
+
- lib/reapal/api/user/balance_query.rb
|
138
|
+
- lib/reapal/api/user/bank_card_add_sms.rb
|
139
|
+
- lib/reapal/api/user/bank_card_add_sms_again.rb
|
140
|
+
- lib/reapal/api/user/bank_card_add_sms_confirm.rb
|
141
|
+
- lib/reapal/api/user/bind_card_query.rb
|
142
|
+
- lib/reapal/api/user/contract_query.rb
|
143
|
+
- lib/reapal/api/user/mobile_query.rb
|
144
|
+
- lib/reapal/api/user/onekey_batch_contract.rb
|
145
|
+
- lib/reapal/api/user/onekey_contract.rb
|
146
|
+
- lib/reapal/api/user/undo_bind_bank_card.rb
|
134
147
|
- lib/reapal/client.rb
|
135
148
|
- lib/reapal/encrypt/aes.rb
|
136
149
|
- lib/reapal/encrypt/rsa.rb
|
137
150
|
- lib/reapal/extensions.rb
|
151
|
+
- lib/reapal/form/business_auth_form.rb
|
152
|
+
- lib/reapal/form/find_trade_password_form.rb
|
153
|
+
- lib/reapal/form/mobile_modify_form.rb
|
154
|
+
- lib/reapal/form/signle_tender_transfer_form.rb
|
155
|
+
- lib/reapal/form/tender_invest_form.rb
|
156
|
+
- lib/reapal/form/tender_refund_form.rb
|
157
|
+
- lib/reapal/form/withdraw_apply_form.rb
|
138
158
|
- lib/reapal/http/communicate.rb
|
139
159
|
- lib/reapal/http/response.rb
|
140
160
|
- lib/reapal/railtie.rb
|