unionpay 0.0.5 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f48073a80b07c6fd61921bcc1388898f84833fb2
4
- data.tar.gz: 245748a08af3eb86f98742e091ba53fb2b26ad68
3
+ metadata.gz: c330478dd7bddd9619bcd800e66926d355d20ca1
4
+ data.tar.gz: 8f3f0baa67df1ee8943f61e9956e4ea36f2cf406
5
5
  SHA512:
6
- metadata.gz: e5b7b187138754c8aa138d81a9df4e0abe98e07f4fa878a85881930896124e134bf176fdc8ddb16575a2e85b69f39552f32c792940bcc6379045c895e2b6fa37
7
- data.tar.gz: 409320bf75366b6353b76cffe8dada0a365d72b1c4b62e1e64f303279dd3447d88285fb078ee99c3c465685efa3bc1394703b154369c62c70ab051c588c5bcdd
6
+ metadata.gz: e1aefe1ba238eb936e61337dd8884f8ccbd034d95f6825954a7d9c84acfbb997d36bc31143f661bb66e85b98b26a5d989cf9ab614f3c62f3c46f47efec297c5f
7
+ data.tar.gz: 75e0ad1e18b10857592377d592c2ceadb20ad6ccd9003984363cb4fa65fbabf4c44b580538a81d619602852695e6aca3ddba9bfab32d8ff746e0df8708410441
data/README.md CHANGED
@@ -60,8 +60,6 @@ def unionpay_notify
60
60
  end
61
61
  ```
62
62
 
63
-
64
-
65
63
  ### Generate back payment post params
66
64
 
67
65
  ```ruby
@@ -71,8 +69,7 @@ param = {}
71
69
  param['transType'] = UnionPay::REFUND
72
70
  param['origQid'] = '201110281442120195882' #原交易返回的qid, 从数据库中获取
73
71
  param['orderAmount'] = 11000 #交易金额
74
- param['orderNumber'] = '20131220151706'
75
- param['orderTime'] = '20131220151706'
72
+ param['orderNumber'] = '20131220151706' #订单号,必须唯一(不能与原交易相同)
76
73
  param['customerIp'] = '127.0.0.1' #用户IP
77
74
  param['frontEndUrl'] = "" #前台回调URL, 后台交易可为空
78
75
  param['backEndUrl'] = "http://www.example.com/sdk/utf8/back_notify.php" #后台回调URL
@@ -81,3 +78,29 @@ service = UnionPay::Service.back_pay(param)
81
78
  service.args ## get args
82
79
  service.post ## do post
83
80
  ```
81
+
82
+ ### Query
83
+
84
+ ```ruby
85
+ param = {}
86
+ param['transType'] = UnionPay::CONSUME
87
+ param['orderNumber'] = "20111108150703852"
88
+ param['orderTime'] = "20111108150703"
89
+ query = UnionPay::Service.query(param)
90
+ res = query.post
91
+ responce = UnionPay::Service.responce res.body_str
92
+
93
+ query_result = responce['queryResult']
94
+ resp_code = responce['respCode']
95
+
96
+ if query_result == UnionPay::QUERY_FAIL
97
+ puts "交易失败[respCode:#{resp_code}]!"
98
+ elsif query_result == UnionPay::QUERY_INVALID
99
+ puts "不存在此交易!"
100
+ elsif resp_code==UnionPay::RESP_SUCCESS && query_result == UnionPay::QUERY_SUCCESS
101
+ puts '交易成功!'
102
+ elsif resp_code==UnionPay::RESP_SUCCESS && query_result == UnionPay::QUERY_WAIT
103
+ puts '交易处理中,下次再查!'
104
+ end
105
+ #
106
+ ```
@@ -44,7 +44,7 @@ module UnionPay
44
44
  raise('consume OR pre_auth transactions need cardNumber!')
45
45
  end
46
46
  else
47
- raise('origQid is not provided') if self.args['origQid'] !~ /[^[:space:]]/
47
+ raise('origQid is not provided') if UnionPay.empty? self.args['origQid']
48
48
  end
49
49
  service
50
50
  end
@@ -52,8 +52,17 @@ module UnionPay
52
52
 
53
53
  def self.responce(param)
54
54
  new.instance_eval do
55
- cup_reserved = (param['cupReserved'] ||= '')
56
- cup_reserved = Rack::Utils.parse_nested_query cup_reserved[1..-2]
55
+ if param.is_a? String
56
+ pattern = /cupReserved=(\{.*?\})/
57
+ cup_reserved = pattern.match(param)
58
+ if cup_reserved
59
+ cup_reserved = cup_reserved[1]
60
+ param.sub! pattern, 'cupReserved='
61
+ end
62
+ param = Rack::Utils.parse_nested_query param
63
+ end
64
+ cup_reserved ||= (param['cupReserved'] ||= '')
65
+ arr_reserved = Rack::Utils.parse_nested_query cup_reserved[1..-2]
57
66
  if !param['signature'] || !param['signMethod']
58
67
  raise('No signature Or signMethod set in notify data!')
59
68
  end
@@ -62,13 +71,35 @@ module UnionPay
62
71
  if param.delete('signature') != Service.sign(param)
63
72
  raise('Bad signature returned!')
64
73
  end
65
- param.merge! cup_reserved
66
- param.delete 'cupReserved'
67
- self.args = param
74
+ self.args = param.merge arr_reserved
75
+ self.args.delete 'cupReserved'
68
76
  self
69
77
  end
70
78
  end
71
79
 
80
+ def self.query(param)
81
+ new.instance_eval do
82
+ @api_url = UnionPay.query_url
83
+ param['version'] = UnionPay::PayParams['version']
84
+ param['charset'] = UnionPay::PayParams['charset']
85
+ param['merId'] = UnionPay::PayParams['merId']
86
+
87
+ if UnionPay.empty?(UnionPay::PayParams['merId']) && UnionPay.empty?(UnionPay::PayParams['acqCode'])
88
+ raise('merId and acqCode can\'t be both empty')
89
+ end
90
+ if !UnionPay.empty?(UnionPay::PayParams['acqCode'])
91
+ acqCode = UnionPay::PayParams['acqCode']
92
+ param['merReserved'] = "{acqCode=#{acqCode}}"
93
+ else
94
+ param['merReserved'] = ''
95
+ end
96
+
97
+ self.args = param
98
+ @param_check = UnionPay::QueryParamsCheck
99
+
100
+ service
101
+ end
102
+ end
72
103
 
73
104
  def self.sign(args)
74
105
  sign_str = args.sort.map do |k,v|
@@ -0,0 +1,7 @@
1
+ module UnionPay
2
+ class << self
3
+ def empty? str
4
+ str !~ /[^[:space:]]/
5
+ end
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module UnionPay
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.7"
3
3
  end
data/lib/unionpay.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/unionpay/conf'
2
2
  require File.dirname(__FILE__) + '/unionpay/service'
3
3
  require File.dirname(__FILE__) + '/unionpay/version'
4
+ require File.dirname(__FILE__) + '/unionpay/utils'
4
5
 
5
6
  module UnionPay
6
7
  class << self
@@ -19,18 +19,13 @@ class UnionPay::ServiceTest < Test::Unit::TestCase
19
19
  # PRE_AUTH_VOID(预授权撤销), PRE_AUTH_COMPLETE(预授权完成), PRE_AUTH_VOID_COMPLETE(预授权完成撤销)
20
20
  param = {}
21
21
  param['transType'] = UnionPay::REFUND
22
-
23
22
  param['origQid'] = '201110281442120195882'; #原交易返回的qid, 从数据库中获取
24
-
25
23
  param['orderAmount'] = 11000; #交易金额
26
24
  param['orderNumber'] = '20131220151706'
27
- param['orderTime'] = '20131220151706'
28
-
29
25
  param['customerIp'] = '127.0.0.1'; #用户IP
30
26
  param['frontEndUrl'] = "" #前台回调URL, 后台交易可为空
31
27
  param['backEndUrl'] = "http://www.example.com/sdk/utf8/back_notify.php" #后台回调URL
32
28
  UnionPay::Service.back_pay(param)
33
-
34
29
  end
35
30
 
36
31
  def test_generate_form
@@ -47,8 +42,7 @@ class UnionPay::ServiceTest < Test::Unit::TestCase
47
42
 
48
43
  def test_back_pay_service
49
44
  dev_form = generate_back_pay_service
50
- p dev_form.args
51
- assert dev_form.post
45
+ assert_not_nil dev_form.post
52
46
  end
53
47
  def test_responce
54
48
  test = {
@@ -65,4 +59,17 @@ class UnionPay::ServiceTest < Test::Unit::TestCase
65
59
  assert UnionPay::Service.responce(test).args['respCode'] == UnionPay::RESP_SUCCESS
66
60
  end
67
61
 
62
+ def test_query
63
+ assert_raise_message 'Bad signature returned!' do
64
+ param = {}
65
+ param['transType'] = UnionPay::CONSUME
66
+ param['orderNumber'] = "20111108150703852"
67
+ param['orderTime'] = "20111108150703"
68
+ UnionPay.environment = :production
69
+ query = UnionPay::Service.query(param)
70
+ res = query.post
71
+ responce = UnionPay::Service.responce res.body_str
72
+ end
73
+ end
74
+
68
75
  end
data/unionpay.gemspec CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_runtime_dependency "curb"
21
22
  spec.add_development_dependency "bundler", "~> 1.3"
22
23
  spec.add_development_dependency "rake"
23
24
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unionpay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-25 00:00:00.000000000 Z
11
+ date: 2013-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: curb
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -45,12 +59,12 @@ executables: []
45
59
  extensions: []
46
60
  extra_rdoc_files: []
47
61
  files:
48
- - Gemfile
49
62
  - README.md
50
63
  - Rakefile
51
64
  - lib/unionpay.rb
52
65
  - lib/unionpay/conf.rb
53
66
  - lib/unionpay/service.rb
67
+ - lib/unionpay/utils.rb
54
68
  - lib/unionpay/version.rb
55
69
  - test/test_helper.rb
56
70
  - test/unionpay/service_test.rb
data/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
3
- gem 'curb'