unionpei 0.0.5 → 1.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.
@@ -1,82 +1,88 @@
1
- #encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- require "date"
3
+ require 'date'
4
4
  require_relative 'sdk_config'
5
5
  require_relative 'acp_service'
6
-
7
6
  module UnionPei
8
7
  class Payment
9
8
  class << self
10
- def b2c
11
- req = {}
12
-
13
- req["version"] = UnionPei::SDKConfig.instance.version
14
- req["encoding"] = UnionPei::SDKConfig.instance.encoding
15
- req["signMethod"] = UnionPei::SDKConfig.instance.signMethod
16
-
17
- req["frontUrl"] = UnionPei::SDKConfig.instance.frontUrl
18
- req["backUrl"] = UnionPei::SDKConfig.instance.backUrl
19
-
20
- req["txnType"] = "01"
21
- req["txnSubType"] = "01"
22
- req["bizType"] = "000201" # 000201 是b2c / 000202 是 b2b
23
- req["channelType"] = "07"
24
- req["currencyCode"] = "156"
25
- req["txnAmt"] = "881000"
26
-
27
- req["merId"] = "777290058189920"
28
- req["orderId"] = DateTime.parse(Time.now.to_s).strftime("%Y%m%d%H%M%S").to_s
29
- req["txnTime"] = DateTime.parse(Time.now.to_s).strftime("%Y%m%d%H%M%S").to_s
30
- req["accessType"] = "0"
31
-
32
- #签名示例
9
+ @@default_b2c_req = {
10
+ 'version' => UnionPei::SDKConfig.instance.version,
11
+ 'encoding' => UnionPei::SDKConfig.instance.encoding,
12
+ 'signMethod' => UnionPei::SDKConfig.instance.signMethod,
13
+ 'frontUrl' => UnionPei::SDKConfig.instance.frontUrl,
14
+ 'backUrl' => UnionPei::SDKConfig.instance.backUrl,
15
+ 'txnType' => '01',
16
+ 'txnSubType' => '01',
17
+ 'bizType' => '000201', # 000201 是b2c / 000202 是 b2b
18
+ 'channelType' => '07',
19
+ 'currencyCode' => '156',
20
+ 'txnAmt' => '881000',
21
+ 'merId' => '777290058189920',
22
+ 'orderId' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s,
23
+ 'txnTime' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s,
24
+ 'accessType' => '0'
25
+ }
26
+
27
+ # 【默认大于配置】哲学
28
+ def b2c(req = @@default_b2c_req)
29
+ req = @@default_b2c_req.merge(req)
33
30
  UnionPei::AcpService.sign(req)
34
31
  url = UnionPei::SDKConfig.instance.frontTransUrl
35
-
36
- #前台自提交表单示例
37
- resp = UnionPei::AcpService.createAutoFormHtml(req, url)
38
- resp
32
+ UnionPei::AcpService.createAutoFormHtml(req, url)
39
33
  end
40
34
 
41
- def b2b
42
- req = {}
43
-
44
- req["version"] = Com::UnionPay::Acp::Sdk::SDKConfig.instance.version
45
- req["encoding"] = Com::UnionPay::Acp::Sdk::SDKConfig.instance.encoding
46
- req["signMethod"] = Com::UnionPay::Acp::Sdk::SDKConfig.instance.signMethod
47
-
48
- req["frontUrl"] = Com::UnionPay::Acp::Sdk::SDKConfig.instance.frontUrl
49
- req["backUrl"] = Com::UnionPay::Acp::Sdk::SDKConfig.instance.backUrl
50
-
51
- req["txnType"] = "01"
52
- req["txnSubType"] = "01"
53
- req["bizType"] = "000202" # 000201 是b2c / 000202 是 b2b
54
- req["channelType"] = "07"
55
- req["currencyCode"] = "156"
56
- req["txnAmt"] = "881000"
57
-
58
- req["merId"] = "777290058189920"
59
- req["orderId"] = DateTime.parse(Time.now.to_s).strftime("%Y%m%d%H%M%S").to_s
60
- req["txnTime"] = DateTime.parse(Time.now.to_s).strftime("%Y%m%d%H%M%S").to_s
61
- req["accessType"] = "0"
62
-
63
-
64
- req["payTimeout"] = DateTime.parse((Time.now + 15 * 60 * 1000).to_s).strftime("%Y%m%d%H%M%S").to_s
65
- req["bizScene"] = "110001"
66
- req["payeeAcctNm"] = "xx商户"
67
- req["payeeAcctNo"] = "12345678"
68
- req["payeeBankName"] = "xx行"
69
-
70
-
71
- #签名示例
72
- Com::UnionPay::Acp::Sdk::AcpService.sign(req)
73
- url = Com::UnionPay::Acp::Sdk::SDKConfig.instance.frontTransUrl
35
+ @@default_b2b_req = {
36
+ 'version' => UnionPei::SDKConfig.instance.version,
37
+ 'encoding' => UnionPei::SDKConfig.instance.encoding,
38
+ 'signMethod' => UnionPei::SDKConfig.instance.signMethod,
39
+ 'frontUrl' => UnionPei::SDKConfig.instance.frontUrl,
40
+ 'backUrl' => UnionPei::SDKConfig.instance.backUrl,
41
+ 'txnType' => '01',
42
+ 'txnSubType' => '01',
43
+ 'bizType' => '000202', # 000201 是b2c / 000202 是 b2b,
44
+ 'channelType' => '07',
45
+ 'currencyCode' => '156',
46
+ 'txnAmt' => '881000',
47
+ 'merId' => '777290058189920',
48
+ 'orderId' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s,
49
+ 'txnTime' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s,
50
+ 'accessType' => '0',
51
+ 'payTimeout' => DateTime.parse((Time.now + 15 * 60 * 1000).to_s).strftime('%Y%m%d%H%M%S').to_s,
52
+ 'bizScene' => '110001',
53
+ 'payeeAcctNm' => 'xx商户',
54
+ 'payeeAcctNo' => '12345678',
55
+ 'payeeBankName' => 'xx行'
56
+ }
57
+
58
+ def b2b(req = @@default_b2b_req)
59
+ req = @@default_b2b_req.merge(req)
60
+ UnionPei::AcpService.sign(req)
61
+ url = UnionPei::SDKConfig.instance.frontTransUrl
62
+ UnionPei::AcpService.createAutoFormHtml(req, url)
63
+ end
74
64
 
75
- #前台自提交表单示例
76
- resp = Com::UnionPay::Acp::Sdk::AcpService.createAutoFormHtml(req, url)
77
- resp
65
+ @@default_trans_req = {
66
+ 'version' => UnionPei::SDKConfig.instance.version,
67
+ 'encoding' => UnionPei::SDKConfig.instance.encoding,
68
+ 'bizType' => '000000',
69
+ 'txnTime' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s,
70
+ 'txnType' => '00',
71
+ 'txnSubType' => '00',
72
+ 'accessType' => '0',
73
+ 'signMethod' => UnionPei::SDKConfig.instance.signMethod,
74
+ 'merId' => '777290058189920',
75
+ 'orderId' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s
76
+ }
77
+
78
+ # query single transaction info
79
+ # doc https://open.unionpay.com/tjweb/acproduct/APIList?acpAPIId=757&apiservId=448&version=V2.2&bussType=0
80
+ def query_trans(req = @@default_trans_req)
81
+ req = @@default_trans_req.merge(req)
82
+ UnionPei::AcpService.sign(req)
83
+ url = UnionPei::SDKConfig.instance.singleQueryUrl
84
+ UnionPei::AcpService.post(req, url)
78
85
  end
79
86
  end
80
87
  end
81
88
  end
82
-
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'iniparse'
4
4
  require 'singleton'
@@ -14,63 +14,62 @@ module UnionPei
14
14
  :encoding, :secureKey, :logFilePath, :logLevel
15
15
 
16
16
  def initialize
17
-
18
- path = File.dirname(__FILE__)
19
- ini = IniParse.parse(File.read("#{path}/acp_sdk.ini").force_encoding("UTF-8"))
20
- puts 'load config: ' + "#{path}/acp_sdk.ini"
21
-
22
- @frontTransUrl = ini["acpsdk"]["acpsdk.frontTransUrl"]
23
- @singleQueryUrl = ini["acpsdk"]["acpsdk.singleQueryUrl"]
24
- @backTransUrl = ini["acpsdk"]["acpsdk.backTransUrl"]
25
- @batchTransUrl = ini["acpsdk"]["acpsdk.batchTransUrl"]
26
- @fileTransUrl = ini["acpsdk"]["acpsdk.fileTransUrl"]
27
- @appTransUrl = ini["acpsdk"]["acpsdk.appTransUrl"]
28
- @cardTransUrl = ini["acpsdk"]["acpsdk.cardTransUrl"]
29
-
30
- @jfFrontTransUrl = ini["acpsdk"]["acpsdk.jfFrontTransUrl"]
31
- @jfSingleQueryUrl = ini["acpsdk"]["acpsdk.jfSingleQueryUrl"]
32
- @jfBackTransUrl = ini["acpsdk"]["acpsdk.jfBackTransUrl"]
33
- @jfCardTransUrl = ini["acpsdk"]["acpsdk.jfCardTransUrl"]
34
- @jfAppTransUrl = ini["acpsdk"]["acpsdk.jfAppTransUrl"]
35
-
36
- @qrcBackTransUrl = ini["acpsdk"]["acpsdk.qrcBackTransUrl"]
37
- @qrcB2cIssBackTransUrl = ini["acpsdk"]["acpsdk.qrcB2cIssBackTransUrl"]
38
- @qrcB2cMerBackTransUrl = ini["acpsdk"]["acpsdk.qrcB2cMerBackTransUrl"]
39
-
40
- @signMethod = ini["acpsdk"]["acpsdk.signMethod"]
41
- @signMethod = @signMethod.to_s if !@signMethod.nil?
42
- @version = ini["acpsdk"]["acpsdk.version"]
43
- @version = "5.0.0" if @version.nil?
44
-
45
- @ifValidateCNName = ini["acpsdk"]["acpsdk.ifValidateCNName"]
17
+ ini = parse_acpsdk
18
+ acpsdk = ini['acpsdk']
19
+
20
+ @frontTransUrl = acpsdk['acpsdk.frontTransUrl']
21
+ @singleQueryUrl = acpsdk['acpsdk.singleQueryUrl']
22
+ @backTransUrl = acpsdk['acpsdk.backTransUrl']
23
+ @batchTransUrl = acpsdk['acpsdk.batchTransUrl']
24
+ @fileTransUrl = acpsdk['acpsdk.fileTransUrl']
25
+ @appTransUrl = acpsdk['acpsdk.appTransUrl']
26
+ @cardTransUrl = acpsdk['acpsdk.cardTransUrl']
27
+
28
+ @jfFrontTransUrl = acpsdk['acpsdk.jfFrontTransUrl']
29
+ @jfSingleQueryUrl = acpsdk['acpsdk.jfSingleQueryUrl']
30
+ @jfBackTransUrl = acpsdk['acpsdk.jfBackTransUrl']
31
+ @jfCardTransUrl = acpsdk['acpsdk.jfCardTransUrl']
32
+ @jfAppTransUrl = acpsdk['acpsdk.jfAppTransUrl']
33
+
34
+ @qrcBackTransUrl = acpsdk['acpsdk.qrcBackTransUrl']
35
+ @qrcB2cIssBackTransUrl = acpsdk['acpsdk.qrcB2cIssBackTransUrl']
36
+ @qrcB2cMerBackTransUrl = acpsdk['acpsdk.qrcB2cMerBackTransUrl']
37
+
38
+ @signMethod = acpsdk['acpsdk.signMethod']
39
+ @signMethod = @signMethod.to_s unless @signMethod.nil?
40
+ @version = acpsdk['acpsdk.version']
41
+ @version = '5.0.0' if @version.nil?
42
+
43
+ @ifValidateCNName = acpsdk['acpsdk.ifValidateCNName']
46
44
  @ifValidateCNName = true if @ifValidateCNName.nil?
47
- @ifValidateRemoteCert = ini["acpsdk"]["acpsdk.ifValidateRemoteCert"]
45
+ @ifValidateRemoteCert = acpsdk['acpsdk.ifValidateRemoteCert']
48
46
  @ifValidateRemoteCert = false if @ifValidateRemoteCert.nil?
49
47
 
50
- @signCertPath = ini["acpsdk"]["acpsdk.signCert.path"]
51
- @signCertPwd = ini["acpsdk"]["acpsdk.signCert.pwd"]
52
- @signCertPwd = @signCertPwd.to_s if !@signCertPwd.nil?
48
+ @signCertPath = acpsdk['acpsdk.signCert.path']
49
+ @signCertPwd = acpsdk['acpsdk.signCert.pwd']
50
+ @signCertPwd = @signCertPwd.to_s unless @signCertPwd.nil?
53
51
 
54
- @validateCertDir = ini["acpsdk"]["acpsdk.validateCert.dir"]
55
- @encryptCertPath = ini["acpsdk"]["acpsdk.encryptCert.path"]
56
- @rootCertPath = ini["acpsdk"]["acpsdk.rootCert.path"]
57
- @middleCertPath = ini["acpsdk"]["acpsdk.middleCert.path"]
52
+ @validateCertDir = acpsdk['acpsdk.validateCert.dir']
53
+ @encryptCertPath = acpsdk['acpsdk.encryptCert.path']
54
+ @rootCertPath = acpsdk['acpsdk.rootCert.path']
55
+ @middleCertPath = acpsdk['acpsdk.middleCert.path']
58
56
 
59
- @frontUrl = ini["acpsdk"]["acpsdk.frontUrl"]
60
- @backUrl = ini["acpsdk"]["acpsdk.backUrl"]
57
+ @frontUrl = acpsdk['acpsdk.frontUrl']
58
+ @backUrl = acpsdk['acpsdk.backUrl']
61
59
 
62
- @encoding = ini["acpsdk"]["acpsdk.encoding"]
63
- @secureKey = ini["acpsdk"]["acpsdk.secureKey"]
64
- @secureKey = @secureKey.to_s if !@secureKey.nil?
60
+ @encoding = acpsdk['acpsdk.encoding']
61
+ @secureKey = acpsdk['acpsdk.secureKey']
62
+ @secureKey = @secureKey.to_s unless @secureKey.nil?
65
63
 
66
- @logFilePath = ini["acpsdk"]["acpsdk.log.file.path"]
67
- @logLevel = ini["acpsdk"]["acpsdk.log.level"]
64
+ @logFilePath = acpsdk['acpsdk.log.file.path']
65
+ @logLevel = acpsdk['acpsdk.log.level']
68
66
 
69
67
  @encoding = 'UTF-8'
68
+ end
70
69
 
70
+ def parse_acpsdk
71
+ path = File.dirname(__FILE__)
72
+ @ini ||= IniParse.parse(File.read("#{path}/acp_sdk.ini").force_encoding('UTF-8'))
71
73
  end
72
74
  end
73
75
  end
74
-
75
-
76
-