ll_pay 0.1.0 → 0.2.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 +4 -4
- data/README.md +12 -2
- data/lib/ll_pay/notify.rb +7 -0
- data/lib/ll_pay/query_order.rb +40 -0
- data/lib/ll_pay/service.rb +26 -0
- data/lib/ll_pay/sign/md5.rb +15 -0
- data/lib/ll_pay/sign/rsa.rb +18 -0
- data/lib/ll_pay/sign.rb +53 -0
- data/lib/ll_pay/utils.rb +11 -0
- data/lib/ll_pay/version.rb +1 -1
- data/lib/ll_pay.rb +18 -2
- metadata +10 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 791510ce280d6c3f20c4e96e6714cd0aa85665ed
|
4
|
+
data.tar.gz: 59919fc5997650a09c8af3f623233f954913d899
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ac0d647acd857a3e446ec78442c04da6faaca2c013f6d8ba8fd92f14f73c3e099ba75fd324d50fd2a1881212a49166345884d282816b31feb26b89954ca2ddf
|
7
|
+
data.tar.gz: 7e89e51c6abbbc516a1616ee8a8014bd484b60c34a7796e02406d4c1b9ebec2808151f09b187561830284dad5abe3ae5071d9d11988b20c75e683115eeb7e925
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
LlPay [![Gem Version][version-badge]][rubygems] [![Build Status][travis-badge]][travis] [![Code Climate][codeclimate-badge]][codeclimate] [![Code Coverage][codecoverage-badge]][codecoverage]
|
2
|
+
=======
|
2
3
|
|
3
4
|
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/ll_pay`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
5
|
|
@@ -22,7 +23,16 @@ Or install it yourself as:
|
|
22
23
|
|
23
24
|
## Usage
|
24
25
|
|
25
|
-
|
26
|
+
### Config
|
27
|
+
|
28
|
+
Create `config/initializers/ll_pay.rb` and put following configurations into it.
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
|
32
|
+
LlPay.oid_partner = "oid_partner" # lianlian pay 商户编号
|
33
|
+
LlPay.rsa_pri_key = "rsa_pri_key" # 商户RSA密钥
|
34
|
+
LlPay.md5_key = "md5_key" # 商户 MD5
|
35
|
+
```
|
26
36
|
|
27
37
|
## Development
|
28
38
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'date'
|
2
|
+
require 'uri'
|
3
|
+
require 'http' # https://github.com/httprb/http
|
4
|
+
|
5
|
+
module LlPay
|
6
|
+
module QueryOrder
|
7
|
+
def self.query_single_order(sign_type, no_order, dt_order)
|
8
|
+
query_order_hash = { oid_partner: LlPay.oid_partner, dt_order: dt_order, no_order: no_order }
|
9
|
+
|
10
|
+
if sign_type == 'RSA'
|
11
|
+
query_order_hash[:sign_type] = 'RSA'
|
12
|
+
query_order_hash[:sign] = LlPay::Sign::RSA.sign(LlPay.rsa_pri_key, params_to_string(query_order_hash))
|
13
|
+
else
|
14
|
+
query_order_hash[:sign_type] = 'MD5'
|
15
|
+
query_order_hash[:sign] = LlPay::Sign::MD5.sign(LlPay.md5_key, params_to_string(query_order_hash))
|
16
|
+
end
|
17
|
+
|
18
|
+
http_response = HTTP.post('https://yintong.com.cn/queryapi/orderquery.htm',
|
19
|
+
json: query_order_hash)
|
20
|
+
|
21
|
+
response_hash = JSON.parse(http_response.body.to_s)
|
22
|
+
|
23
|
+
if http_response.code == 200
|
24
|
+
if response_hash['ret_code'] == 0000 && LlPay::Sign.verify?(params_to_string(response_hash))
|
25
|
+
return response_hash
|
26
|
+
else
|
27
|
+
return response_hash
|
28
|
+
end
|
29
|
+
else
|
30
|
+
return
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.params_to_string(params)
|
35
|
+
params.sort.map do |k, v|
|
36
|
+
"#{k}=#{v}" if v.to_s != '' && k.to_s != 'sign'
|
37
|
+
end.compact.join('&')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module LlPay
|
4
|
+
module Service
|
5
|
+
|
6
|
+
SECURITY_PAY_REQUIRED_PARAMS = %w(notify_url no_order dt_order busi_partner money_order valid_order user_id)
|
7
|
+
def self.securitypay_pay_json(params, options = {})
|
8
|
+
params = LlPay::Utils.stringify_keys(params)
|
9
|
+
options = LlPay::Utils.stringify_keys(options)
|
10
|
+
|
11
|
+
params[:sign_type] = options[:sign_type] || LlPay.sign_type
|
12
|
+
|
13
|
+
params = { oid_partner: LlPay.oid_partner }.merge(params)
|
14
|
+
|
15
|
+
params[:sign] = LlPay::Sign.generate(params)
|
16
|
+
|
17
|
+
params.to_json
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.check_required_params(params, names)
|
21
|
+
names.each do |name|
|
22
|
+
warn("ll_pay Warn: missing required option: #{name}") unless params.has_key?(name)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
require 'base64'
|
3
|
+
|
4
|
+
module LlPay
|
5
|
+
module Sign
|
6
|
+
class RSA
|
7
|
+
def self.sign(prikey, string)
|
8
|
+
rsa = OpenSSL::PKey::RSA.new(prikey)
|
9
|
+
Base64.strict_encode64(rsa.sign('sha1', string))
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.verify?(pubkey, string, sign)
|
13
|
+
rsa = OpenSSL::PKey::RSA.new(pubkey)
|
14
|
+
rsa.verify('sha1', Base64.strict_decode64(sign), string)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/ll_pay/sign.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'digest/md5'
|
2
|
+
|
3
|
+
module LlPay
|
4
|
+
module Sign
|
5
|
+
def self.generate(params, options = {})
|
6
|
+
params = LlPay::Utils.stringify_keys(params)
|
7
|
+
options = LlPay::Utils.stringify_keys(options)
|
8
|
+
|
9
|
+
sign_type = params[:sign_type]
|
10
|
+
md5_key = options[:md5_key] || LlPay.md5_key
|
11
|
+
rsa_pri_key = options[:rsa_pri_key] || LlPay.rsa_pri_key
|
12
|
+
string = params_to_string(params)
|
13
|
+
|
14
|
+
case sign_type
|
15
|
+
when 'MD5'
|
16
|
+
MD5.sign(md5_key, string)
|
17
|
+
when 'RSA'
|
18
|
+
RSA.sign(rsa_pri_key, string)
|
19
|
+
else
|
20
|
+
raise ArgumentError, "invalid sign_type #{sign_type}, allow value: 'MD5', 'RSA'"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.verify?(params, options = {})
|
25
|
+
params = LlPay::Utils.stringify_keys(params)
|
26
|
+
options = LlPay::Utils.stringify_keys(options)
|
27
|
+
|
28
|
+
sign_type = params[:sign_type]
|
29
|
+
sign = params.delete(:sign)
|
30
|
+
string = params_to_string(params)
|
31
|
+
|
32
|
+
case sign_type
|
33
|
+
when 'MD5'
|
34
|
+
md5_key = options[:md5_key] || LlPay.md5_key
|
35
|
+
MD5.verify?(md5_key, string, sign)
|
36
|
+
when 'RSA'
|
37
|
+
RSA.verify?(options[:rsa_pub_key] || LlPay::YT_PUB_KEY, string, sign)
|
38
|
+
else
|
39
|
+
false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.params_to_string(params)
|
44
|
+
params_string = params.sort.map do |k, v|
|
45
|
+
"#{k}=#{v}" if v.to_s != '' && k.to_s != 'sign'
|
46
|
+
end.compact.join('&')
|
47
|
+
|
48
|
+
params_string[0] = '' if params_string[0] == '&'
|
49
|
+
|
50
|
+
params_string
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/ll_pay/utils.rb
ADDED
data/lib/ll_pay/version.rb
CHANGED
data/lib/ll_pay.rb
CHANGED
@@ -1,5 +1,21 @@
|
|
1
|
-
require
|
1
|
+
require 'll_pay/version'
|
2
|
+
require 'll_pay/sign'
|
3
|
+
require 'll_pay/sign/md5'
|
4
|
+
require 'll_pay/sign/rsa'
|
5
|
+
require 'll_pay/notify'
|
6
|
+
require 'll_pay/query_order'
|
7
|
+
require 'll_pay/service'
|
8
|
+
require 'll_pay/utils'
|
2
9
|
|
3
10
|
module LlPay
|
4
|
-
#
|
11
|
+
# 银通公钥
|
12
|
+
YT_PUB_KEY = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCSS/DiwdCf/aZsxxcacDnooGph3d2JOj5GXWi+q3gznZauZjkNP8SKl3J2liP0O6rU/Y/29+IUe+GTMhMOFJuZm1htAtKiu5ekW0GlBMWxf4FPkYlQkPE0FtaoMP3gYfh+OwI+fIRrpW3ySn3mScnc6Z700nU/VYrRkfcSCbSnRwIDAQAB\n-----END PUBLIC KEY-----".freeze
|
13
|
+
@sign_type = 'MD5'
|
14
|
+
|
15
|
+
class << self
|
16
|
+
attr_accessor :oid_partner # 商户编号
|
17
|
+
attr_accessor :rsa_pri_key # 私钥
|
18
|
+
attr_accessor :md5_key # md5
|
19
|
+
attr_accessor :sign_type
|
20
|
+
end
|
5
21
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ll_pay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- houdelin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -85,6 +85,13 @@ files:
|
|
85
85
|
- LICENSE.txt
|
86
86
|
- README.md
|
87
87
|
- lib/ll_pay.rb
|
88
|
+
- lib/ll_pay/notify.rb
|
89
|
+
- lib/ll_pay/query_order.rb
|
90
|
+
- lib/ll_pay/service.rb
|
91
|
+
- lib/ll_pay/sign.rb
|
92
|
+
- lib/ll_pay/sign/md5.rb
|
93
|
+
- lib/ll_pay/sign/rsa.rb
|
94
|
+
- lib/ll_pay/utils.rb
|
88
95
|
- lib/ll_pay/version.rb
|
89
96
|
homepage: https://github.com/bayetech/ll_pay
|
90
97
|
licenses:
|
@@ -106,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
113
|
version: '0'
|
107
114
|
requirements: []
|
108
115
|
rubyforge_project:
|
109
|
-
rubygems_version: 2.
|
116
|
+
rubygems_version: 2.4.8
|
110
117
|
signing_key:
|
111
118
|
specification_version: 4
|
112
119
|
summary: An unofficial lianlian (for apple pay) pay gem.
|