unionpay 0.0.5 → 0.0.7

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 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'