chan_pay 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b3d9ed83edfada8388e102fcd1345977c5cf9108
4
- data.tar.gz: d9b0a665d39ed30a1600844cfd1ec8ff87a28b9c
3
+ metadata.gz: 1b660e51012104b31a2a35ef0125c38529d2892d
4
+ data.tar.gz: bbc38f701057995bacae192f2a213f5937af6494
5
5
  SHA512:
6
- metadata.gz: 122a3f26eefd382947f1b2dacd3cc6c18bbefdbb75f1fe71c5bbffc3ab238e42d73eeded8c7c5c0181acf48725a48dd6d5698595a3745b3060c945e65b9778ab
7
- data.tar.gz: ed1397100c2a5f4d73aa66db390305b7b475d471615b9fee0bea1370d8a84edc9653763b1b7e9aaeec717da4a8017afdc5f8a4f7a651aefda32143d80acb70ec
6
+ metadata.gz: b83041be93f3df9426f921a8d811c9afe2bf45af5b225f7a53d488b48a1d33bdd88461c026333b28997adb673edae36d6a5ba51ee46d856f27e10370445f0b07
7
+ data.tar.gz: 90d589f11edd3f67c205de143389cc6eebdb921866c45f3551fbdfe172e9b26a32ef94077ccf91c90e46f3c7306430cd025379f084769f7f6a95b96cfa2f7391
data/README.md CHANGED
@@ -1,39 +1,63 @@
1
1
  # ChanPay
2
2
 
3
- 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/chan_pay`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ 用友畅捷支付 API ruby sdk,目前提供以下接口
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ 1. 直接支付请求接口
6
+ 2. 支付确认接口
7
+ 3. 短信验证码重发接口
8
+ 4. 确认收货接口
9
+ 5. 商户余额查询
10
+ 6. 快捷代扣请求接口
6
11
 
7
- ## Installation
12
+ ## 安装
8
13
 
9
- Add this line to your application's Gemfile:
14
+ Gemfile 中增加:
10
15
 
11
16
  ```ruby
12
17
  gem 'chan_pay'
13
18
  ```
14
19
 
15
- And then execute:
20
+ 然后执行命令:
16
21
 
17
22
  $ bundle
18
23
 
19
- Or install it yourself as:
24
+ 或者直接安装:
20
25
 
21
26
  $ gem install chan_pay
22
27
 
23
- ## Usage
28
+ ## 快速指南
24
29
 
25
- TODO: Write usage instructions here
30
+ 1. 初始化
26
31
 
27
- ## Development
32
+ ```ruby
33
+ client = ChanPay::Client.new(
34
+ partner_id: partner_id,
35
+ seller_id: seller_id,
36
+ server_url: server_url,
37
+ private_key: private_key,
38
+ public_key: public_key,
39
+ )
40
+ ```
28
41
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
42
+ 2. 调用各个 api,比如查询接口:
30
43
 
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).
44
+ ```ruby
45
+ client.query_balance(商户自定义唯一订单号)
46
+ ```
32
47
 
33
48
  ## Contributing
34
49
 
35
50
  Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/chan_pay. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
36
51
 
52
+ ## Make a pull request
53
+
54
+ 1. Fork it
55
+ 2. Create your feature branch (git checkout -b my-new-feature)
56
+ 3. Commit your changes (git commit -am 'Add some feature')
57
+ 4. Push to the branch (git push origin my-new-feature)
58
+ 5. Create new Pull Request
59
+ 6. Please write unit test with your code if necessary.
60
+
37
61
 
38
62
  ## License
39
63
 
data/chan_pay.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["tony@omniaccount.com"]
11
11
 
12
12
  spec.summary = %q{"畅捷支付"}
13
- spec.description = %q{"畅捷支付"}
13
+ spec.description = %q{"畅捷支付SDK"}
14
14
  spec.homepage = "https://github.com/omniaccountcorp/chan_pay"
15
15
  spec.license = "MIT"
16
16
 
@@ -22,13 +22,15 @@ module ChanPay
22
22
  :TradeType => 'pay_order',
23
23
  }
24
24
 
25
- response = Http.post(@partner_id, @private_key, @public_key, @server_uri, SERVICE_NAME, params)
25
+ response = Http.post(@partner_id,
26
+ @private_key, @public_key, @server_uri,
27
+ SERVICE_NAME, params)
26
28
 
27
29
  res = {
28
30
  result: 'P', # 默认 pending
29
31
  msg: response[:RetMsg],
30
32
  ret_code: response[:RetCode],
31
- flow_id: response[:TrxId],
33
+ flow_id: flow_id,
32
34
  vendor_order_id: response[:OrderTrxid],
33
35
  extension: response[:Extension],
34
36
  log: [params.to_json, response.to_json],
@@ -0,0 +1,45 @@
1
+ # coding: utf-8
2
+
3
+ # 查询代付代收订单
4
+
5
+ module ChanPay
6
+ module Api
7
+ module QueryQuickOrder
8
+
9
+ SERVICE_NAME = 'cjt_dsf'
10
+
11
+ def query_quick_order(flow_id, ori_flow_id)
12
+ params = {
13
+ :TransCode => 'C00000',
14
+ :OutTradeNo => flow_id,
15
+ :OriOutTradeNo => ori_flow_id,
16
+ }
17
+
18
+ response = Http.post(@partner_id, @private_key, @public_key, @server_uri, SERVICE_NAME, params)
19
+
20
+ res = {
21
+ result: 'P', # 默认 pending
22
+ msg: response[:OriginalErrorMessage] || response[:PlatformErrorMessage],
23
+ ret_code: response[:OriginalRetCode],
24
+ flow_id: flow_id,
25
+ vendor_order_id: response[:FlowNo],
26
+ log: [params.to_json, response.to_json],
27
+ }
28
+
29
+ # AcceptStatus 是请求是否成功, PlatformRetCode 是畅捷支付是否受理成功了,OriginalRetCode 是否交易成功,只要看 OriginalRetCode 是否成功即可
30
+
31
+ # 受理成功但是结果失败
32
+ if response[:AcceptStatus] == 'S' && Http::OriginalRetCode.query_quick_order_fail?(response[:OriginalRetCode])
33
+ res[:result] = 'F'
34
+ end
35
+
36
+ if response[:AcceptStatus] == 'S' && Http::OriginalRetCode.success?(response[:OriginalRetCode])
37
+ res[:result] = 'S'
38
+ end
39
+
40
+ res
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,60 @@
1
+ # coding: utf-8
2
+
3
+ # 单笔同步代付
4
+
5
+ module ChanPay
6
+ module Api
7
+ module QuickDraw
8
+
9
+ SERVICE_NAME = 'cjt_dsf'
10
+
11
+ def quick_draw(flow_id,
12
+ bank_business_name, card_id, true_name,
13
+ money,
14
+ business_type='0')
15
+
16
+ params = {
17
+ :TransCode => 'T10000',
18
+ :OutTradeNo => flow_id,
19
+ :BusinessType => business_type, # 0=私人,1=公司
20
+ :BankCommonName => bank_business_name,
21
+ :AcctNo => card_id,
22
+ :AcctName => true_name,
23
+ :TransAmt => money,
24
+ }
25
+
26
+ # 这里是明文参数输出
27
+ puts "\n[#{SERVICE_NAME}] 请求参数为:\n#{params.inspect}"
28
+
29
+ # 敏感字段加密
30
+ params[:AcctNo] = Encrypt::RSA.encrypt(@public_key, card_id)
31
+ params[:AcctName] = Encrypt::RSA.encrypt(@public_key, true_name)
32
+
33
+ response = Http.post(@partner_id, @private_key, @public_key, @server_uri, SERVICE_NAME, params)
34
+
35
+ res = {
36
+ result: 'P', # 默认 pending
37
+ msg: response[:OriginalErrorMessage],
38
+ ret_code: response[:OriginalRetCode],
39
+ flow_id: flow_id,
40
+ vendor_order_id: response[:FlowNo],
41
+ log: [params.to_json, response.to_json],
42
+ }
43
+
44
+ # AcceptStatus 是请求是否成功, PlatformRetCode 是畅捷支付是否受理成功了,OriginalRetCode 是否交易成功,只要看 OriginalRetCode 是否成功即可
45
+
46
+ # 受理失败 || 受理成功但是结果失败
47
+ if response[:AcceptStatus] == 'F' || (response[:AcceptStatus] == 'S' && Http::OriginalRetCode.quick_draw_fail?(response[:OriginalRetCode]))
48
+ res[:result] = 'F'
49
+ end
50
+
51
+ if response[:AcceptStatus] == 'S' && Http::OriginalRetCode.success?(response[:OriginalRetCode])
52
+ res[:result] = 'S'
53
+ end
54
+
55
+ res
56
+ end
57
+
58
+ end # module QuickPay
59
+ end # module Api
60
+ end # module Chanpay
@@ -55,7 +55,7 @@ module ChanPay
55
55
  result: 'P', # 默认 pending
56
56
  msg: response[:RetMsg],
57
57
  ret_code: response[:RetCode],
58
- flow_id: response[:TrxId],
58
+ flow_id: flow_id,
59
59
  vendor_order_id: response[:OrderTrxid],
60
60
  extension: response[:Extension],
61
61
  log: [params.to_json, response.to_json],
@@ -4,7 +4,7 @@
4
4
 
5
5
  module ChanPay
6
6
  module Api
7
- module QuickPay
7
+ module WithholdPay
8
8
 
9
9
  SERVICE_NAME = 'nmg_api_quickpay_withhold'
10
10
 
@@ -19,7 +19,7 @@ module ChanPay
19
19
  #
20
20
  # @return [Hash] 返回结果集
21
21
  #
22
- def quick_pay(flow_id, card_id, identity_id, true_name, phone, money)
22
+ def withhold_pay(flow_id, card_id, identity_id, true_name, phone, money)
23
23
 
24
24
  params = {
25
25
  :TrxId => flow_id.to_s, # 最长 32 位唯一订单号
@@ -52,7 +52,7 @@ module ChanPay
52
52
  result: 'P', # 默认 pending
53
53
  msg: response[:RetMsg],
54
54
  ret_code: response[:RetCode],
55
- flow_id: response[:TrxId],
55
+ flow_id: flow_id,
56
56
  vendor_order_id: response[:OrderTrxid],
57
57
  extension: response[:Extension],
58
58
  log: [params.to_json, response.to_json],
@@ -5,12 +5,17 @@
5
5
  module ChanPay
6
6
  class Client
7
7
 
8
- include ChanPay::Api::QuickPay
9
- include ChanPay::Api::QueryOrder
10
- include ChanPay::Api::QueryBalance
8
+ # 快捷支付的 api
11
9
  include ChanPay::Api::SmsPayRequest
12
10
  include ChanPay::Api::SmsPayConfirm
13
11
  include ChanPay::Api::SmsPayResend
12
+ include ChanPay::Api::WithholdPay
13
+ include ChanPay::Api::QueryOrder
14
+ # 代付代扣的 api
15
+ include ChanPay::Api::QuickDraw
16
+ include ChanPay::Api::QueryQuickOrder
17
+ # 通用 api
18
+ include ChanPay::Api::QueryBalance
14
19
 
15
20
  def initialize(options_arg)
16
21
  options = Utils.symbolize_keys(options_arg)
@@ -1,8 +1,8 @@
1
1
  # coding: utf-8
2
2
  module ChanPay
3
3
  module Http
4
- module RetCode
5
4
 
5
+ module RetCode
6
6
  UNKNOWN_ERROR = 'UNKNOWN_ERROR'
7
7
  NET_TIMEOUT = 'NET_TIMEOUT'
8
8
 
@@ -14,7 +14,40 @@ module ChanPay
14
14
  :Status => "F", # 业务失败
15
15
  }
16
16
  end
17
-
18
17
  end
19
- end
20
- end
18
+
19
+ module OriginalRetCode
20
+ Codes = {
21
+ "000000" => "成功",
22
+ "111111" => "失败",
23
+ "000001" => "未知",
24
+ "000002" => "已发送",
25
+ "000004" => "已受理",
26
+ "000005" => "错误",
27
+ "000006" => "未受理",
28
+ "000010" => "超时",
29
+ "000050" => "重复",
30
+ "900001" => "无对应批次信息",
31
+ "900002" => "批次下无明细信息",
32
+ "900003" => "无对应明细",
33
+ }
34
+
35
+ def self.success?(code)
36
+ ['000000'].include?(code.to_s)
37
+ end
38
+
39
+ # 同步代付错误代码
40
+ def self.quick_draw_fail?(code)
41
+ ['111111', '000005', '000006', '000010', '000050'].include?(code.to_s)
42
+ end
43
+
44
+ # 订单错误代码
45
+ # TODO(tony): 还需和用友畅捷支付的人沟通确认
46
+ def self.query_quick_order_fail?(code)
47
+ ['111111'].include?(code.to_s)
48
+ end
49
+
50
+ end # OriginalRetCode
51
+
52
+ end # Http
53
+ end # ChanPay
@@ -1,3 +1,3 @@
1
1
  module ChanPay
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/chan_pay.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # coding: utf-8
1
2
  require "uri"
2
3
  require "net/http"
3
4
  require "json"
@@ -6,16 +7,24 @@ require "base64"
6
7
 
7
8
  require "chan_pay/version"
8
9
  require "chan_pay/utils"
10
+ # 加密验签
9
11
  require "chan_pay/sign/rsa"
10
12
  require "chan_pay/encrypt/rsa"
13
+ # 通信
11
14
  require "chan_pay/http/ret_code"
12
15
  require "chan_pay/http/communicate"
16
+ # 快捷支付的 api
13
17
  require "chan_pay/api/sms_pay_request"
14
18
  require "chan_pay/api/sms_pay_confirm"
15
19
  require "chan_pay/api/sms_pay_resend"
16
- require "chan_pay/api/quick_pay"
20
+ require "chan_pay/api/withhold_pay"
17
21
  require "chan_pay/api/query_order"
22
+ # 代付代扣的 api
23
+ require "chan_pay/api/quick_draw"
24
+ require "chan_pay/api/query_quick_order"
25
+ # 通用 api
18
26
  require "chan_pay/api/query_balance"
27
+
19
28
  require "chan_pay/client"
20
29
 
21
30
  module ChanPay
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chan_pay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tony
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-20 00:00:00.000000000 Z
11
+ date: 2017-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
- description: '"畅捷支付"'
55
+ description: '"畅捷支付SDK"'
56
56
  email:
57
57
  - tony@omniaccount.com
58
58
  executables: []
@@ -73,10 +73,12 @@ files:
73
73
  - lib/chan_pay.rb
74
74
  - lib/chan_pay/api/query_balance.rb
75
75
  - lib/chan_pay/api/query_order.rb
76
- - lib/chan_pay/api/quick_pay.rb
76
+ - lib/chan_pay/api/query_quick_order.rb
77
+ - lib/chan_pay/api/quick_draw.rb
77
78
  - lib/chan_pay/api/sms_pay_confirm.rb
78
79
  - lib/chan_pay/api/sms_pay_request.rb
79
80
  - lib/chan_pay/api/sms_pay_resend.rb
81
+ - lib/chan_pay/api/withhold_pay.rb
80
82
  - lib/chan_pay/client.rb
81
83
  - lib/chan_pay/encrypt/rsa.rb
82
84
  - lib/chan_pay/http/communicate.rb