unionpei 1.0.0 → 1.3.1

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,4 +1,4 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'singleton'
4
4
  require 'logger'
@@ -8,75 +8,68 @@ require_relative 'sdk_config'
8
8
 
9
9
  module UnionPei
10
10
  class LogUtil
11
-
12
11
  @@logger = nil
13
12
 
14
13
  private_class_method :new
15
14
 
16
- private
17
-
18
- def LogUtil.getLogger
19
- if !@@logger
20
- puts "init LogUtil"
21
- if SDKConfig.instance.logFilePath.nil?
22
- @@logger = Logger.new(STDOUT)
23
- else
24
- @@logger = Logger.new(SDKConfig.instance.logFilePath)
25
- end
15
+ def self.getLogger
16
+ unless @@logger
17
+ @@logger = if SDKConfig.instance.logFilePath.nil?
18
+ Logger.new($stdout)
19
+ else
20
+ Logger.new(SDKConfig.instance.logFilePath)
21
+ end
26
22
  @@logger.datetime_format = '%Y-%m-%d %H:%M:%S'
27
23
  @@logger.formatter = proc do |severity, datetime, progname, msg|
28
24
  "#{datetime} [#{severity}] #{progname}: #{msg}\n"
29
25
  end
30
26
  @@logger.level = case SDKConfig.instance.logLevel.upcase
31
- when 'INFO' then
27
+ when 'INFO'
32
28
  Logger::INFO
33
- when 'DEBUG' then
29
+ when 'DEBUG'
34
30
  Logger::DEBUG
35
- when 'WARN' then
31
+ when 'WARN'
36
32
  Logger::WARN
37
- when 'ERROR' then
33
+ when 'ERROR'
38
34
  Logger::ERROR
39
- when 'FATAL' then
35
+ when 'FATAL'
40
36
  Logger::FATAL
41
37
  else
42
38
  Logger::UNKNOWN
43
- end
39
+ end
44
40
  end
45
41
  p = LogUtil.parse_caller(caller(0)[2])
46
- @@logger.progname = p[0].to_s + ":" + p[1].to_s
42
+ @@logger.progname = "#{p[0]}:#{p[1]}"
47
43
  @@logger
48
44
  end
49
45
 
50
- def LogUtil.parse_caller(at)
46
+ def self.parse_caller(at)
51
47
  if /^(.+?):(\d+)(?::in `(.*)')?/ =~ at
52
- file = $1
53
- line = $2.to_i
54
- method = $3
48
+ file = Regexp.last_match(1)
49
+ line = Regexp.last_match(2).to_i
50
+ method = Regexp.last_match(3)
55
51
  [file, line, method]
56
52
  end
57
53
  end
58
54
 
59
- public
60
-
61
- def LogUtil.info(msg)
55
+ def self.info(msg)
62
56
  LogUtil.getLogger.info(msg)
63
57
  end
64
58
 
65
- def LogUtil.debug(msg)
59
+ def self.debug(msg)
66
60
  LogUtil.getLogger.debug(msg)
67
61
  end
68
62
 
69
- def LogUtil.warn(msg)
63
+ def self.warn(msg)
70
64
  LogUtil.getLogger.warn(msg)
71
65
  end
72
66
 
73
- def LogUtil.error(msg)
67
+ def self.error(msg)
74
68
  LogUtil.getLogger.error(msg)
75
69
  end
76
70
 
77
- def LogUtil.fatal(msg)
71
+ def self.fatal(msg)
78
72
  LogUtil.getLogger.fatal(msg)
79
73
  end
80
-
81
74
  end
82
75
  end
@@ -1,67 +1,97 @@
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
6
  module UnionPei
7
7
  class Payment
8
8
  class << self
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
- }
9
+ def default_b2c_req
10
+ {
11
+ 'version' => UnionPei::SDKConfig.instance.version,
12
+ 'encoding' => UnionPei::SDKConfig.instance.encoding,
13
+ 'signMethod' => UnionPei::SDKConfig.instance.signMethod,
14
+ 'frontUrl' => UnionPei::SDKConfig.instance.frontUrl,
15
+ 'backUrl' => UnionPei::SDKConfig.instance.backUrl,
16
+ 'txnType' => '01',
17
+ 'txnSubType' => '01',
18
+ 'bizType' => '000201', # 000201 是b2c / 000202 是 b2b
19
+ 'channelType' => '07',
20
+ 'currencyCode' => '156',
21
+ 'txnAmt' => '881000',
22
+ 'merId' => '777290058189920',
23
+ 'orderId' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s,
24
+ 'txnTime' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s,
25
+ 'accessType' => '0'
26
+ }
27
+ end
26
28
 
27
29
  # 【默认大于配置】哲学
28
- def b2c(req=@@default_b2c_req)
29
- req = @@default_b2c_req.merge(req)
30
- UnionPei::AcpService.sign(req)
30
+ def b2c(req = {})
31
+ req = default_b2c_req.merge(req)
32
+ signature = UnionPei::AcpService.sign(req)
33
+ req['signature'] = signature
31
34
  url = UnionPei::SDKConfig.instance.frontTransUrl
32
35
  UnionPei::AcpService.createAutoFormHtml(req, url)
33
36
  end
34
37
 
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
- }
38
+ def default_b2b_req
39
+ {
40
+ 'version' => UnionPei::SDKConfig.instance.version,
41
+ 'encoding' => UnionPei::SDKConfig.instance.encoding,
42
+ 'signMethod' => UnionPei::SDKConfig.instance.signMethod,
43
+ 'frontUrl' => UnionPei::SDKConfig.instance.frontUrl,
44
+ 'backUrl' => UnionPei::SDKConfig.instance.backUrl,
45
+ 'txnType' => '01',
46
+ 'txnSubType' => '01',
47
+ 'bizType' => '000202', # 000201 是b2c / 000202 是 b2b,
48
+ 'channelType' => '07',
49
+ 'currencyCode' => '156',
50
+ 'txnAmt' => '881000',
51
+ 'merId' => '777290058189920',
52
+ 'orderId' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s,
53
+ 'txnTime' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s,
54
+ 'accessType' => '0',
55
+ 'payTimeout' => DateTime.parse((Time.now + 15 * 60 * 1000).to_s).strftime('%Y%m%d%H%M%S').to_s,
56
+ 'bizScene' => '110001',
57
+ 'payeeAcctNm' => 'xx商户',
58
+ 'payeeAcctNo' => '12345678',
59
+ 'payeeBankName' => 'xx行'
60
+ }
61
+ end
57
62
 
58
- def b2b(req=@@default_b2b_req)
59
- req = @@default_b2b_req.merge(req)
60
- UnionPei::AcpService.sign(req)
63
+ def b2b(req = {})
64
+ req = default_b2b_req.merge(req)
65
+ signature = UnionPei::AcpService.sign(req)
66
+ req['signature'] = signature
61
67
  url = UnionPei::SDKConfig.instance.frontTransUrl
62
68
  UnionPei::AcpService.createAutoFormHtml(req, url)
63
69
  end
70
+
71
+ def default_trans_req
72
+ {
73
+ 'version' => UnionPei::SDKConfig.instance.version,
74
+ 'encoding' => UnionPei::SDKConfig.instance.encoding,
75
+ 'bizType' => '000000',
76
+ 'txnTime' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s,
77
+ 'txnType' => '00',
78
+ 'txnSubType' => '00',
79
+ 'accessType' => '0',
80
+ 'signMethod' => UnionPei::SDKConfig.instance.signMethod,
81
+ 'merId' => '777290058189920',
82
+ 'orderId' => DateTime.parse(Time.now.to_s).strftime('%Y%m%d%H%M%S').to_s
83
+ }
84
+ end
85
+
86
+ # query single transaction info
87
+ # doc https://open.unionpay.com/tjweb/acproduct/APIList?acpAPIId=757&apiservId=448&version=V2.2&bussType=0
88
+ def query_trans(req = {})
89
+ req = default_trans_req.merge(req)
90
+ signature = UnionPei::AcpService.sign(req)
91
+ req['signature'] = signature
92
+ url = UnionPei::SDKConfig.instance.singleQueryUrl
93
+ UnionPei::AcpService.post(req, url)
94
+ end
64
95
  end
65
96
  end
66
97
  end
67
-
@@ -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,61 @@ 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
+ @frontTransUrl = acpsdk['acpsdk.frontTransUrl']
20
+ @singleQueryUrl = acpsdk['acpsdk.singleQueryUrl']
21
+ @backTransUrl = acpsdk['acpsdk.backTransUrl']
22
+ @batchTransUrl = acpsdk['acpsdk.batchTransUrl']
23
+ @fileTransUrl = acpsdk['acpsdk.fileTransUrl']
24
+ @appTransUrl = acpsdk['acpsdk.appTransUrl']
25
+ @cardTransUrl = acpsdk['acpsdk.cardTransUrl']
26
+
27
+ @jfFrontTransUrl = acpsdk['acpsdk.jfFrontTransUrl']
28
+ @jfSingleQueryUrl = acpsdk['acpsdk.jfSingleQueryUrl']
29
+ @jfBackTransUrl = acpsdk['acpsdk.jfBackTransUrl']
30
+ @jfCardTransUrl = acpsdk['acpsdk.jfCardTransUrl']
31
+ @jfAppTransUrl = acpsdk['acpsdk.jfAppTransUrl']
32
+
33
+ @qrcBackTransUrl = acpsdk['acpsdk.qrcBackTransUrl']
34
+ @qrcB2cIssBackTransUrl = acpsdk['acpsdk.qrcB2cIssBackTransUrl']
35
+ @qrcB2cMerBackTransUrl = acpsdk['acpsdk.qrcB2cMerBackTransUrl']
36
+
37
+ @signMethod = acpsdk['acpsdk.signMethod']
38
+ @signMethod = @signMethod.to_s unless @signMethod.nil?
39
+ @version = acpsdk['acpsdk.version']
40
+ @version = '5.0.0' if @version.nil?
41
+
42
+ @ifValidateCNName = acpsdk['acpsdk.ifValidateCNName']
46
43
  @ifValidateCNName = true if @ifValidateCNName.nil?
47
- @ifValidateRemoteCert = ini["acpsdk"]["acpsdk.ifValidateRemoteCert"]
44
+ @ifValidateRemoteCert = acpsdk['acpsdk.ifValidateRemoteCert']
48
45
  @ifValidateRemoteCert = false if @ifValidateRemoteCert.nil?
49
46
 
50
- @signCertPath = ini["acpsdk"]["acpsdk.signCert.path"]
51
- @signCertPwd = ini["acpsdk"]["acpsdk.signCert.pwd"]
52
- @signCertPwd = @signCertPwd.to_s if !@signCertPwd.nil?
47
+ @signCertPath = acpsdk['acpsdk.signCert.path']
48
+ @signCertPwd = acpsdk['acpsdk.signCert.pwd']
49
+ @signCertPwd = @signCertPwd.to_s unless @signCertPwd.nil?
53
50
 
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"]
51
+ @validateCertDir = acpsdk['acpsdk.validateCert.dir']
52
+ @encryptCertPath = acpsdk['acpsdk.encryptCert.path']
53
+ @rootCertPath = acpsdk['acpsdk.rootCert.path']
54
+ @middleCertPath = acpsdk['acpsdk.middleCert.path']
58
55
 
59
- @frontUrl = ini["acpsdk"]["acpsdk.frontUrl"]
60
- @backUrl = ini["acpsdk"]["acpsdk.backUrl"]
56
+ @frontUrl = acpsdk['acpsdk.frontUrl']
57
+ @backUrl = acpsdk['acpsdk.backUrl']
61
58
 
62
- @encoding = ini["acpsdk"]["acpsdk.encoding"]
63
- @secureKey = ini["acpsdk"]["acpsdk.secureKey"]
64
- @secureKey = @secureKey.to_s if !@secureKey.nil?
59
+ @encoding = acpsdk['acpsdk.encoding']
60
+ @secureKey = acpsdk['acpsdk.secureKey']
61
+ @secureKey = @secureKey.to_s unless @secureKey.nil?
65
62
 
66
- @logFilePath = ini["acpsdk"]["acpsdk.log.file.path"]
67
- @logLevel = ini["acpsdk"]["acpsdk.log.level"]
63
+ @logFilePath = acpsdk['acpsdk.log.file.path']
64
+ @logLevel = acpsdk['acpsdk.log.level']
68
65
 
69
66
  @encoding = 'UTF-8'
67
+ end
70
68
 
69
+ def parse_acpsdk
70
+ acp_sdk_config_path = ::UnionPei.configuration.acp_sdk_config_path
71
+ IniParse.parse(File.read(acp_sdk_config_path).force_encoding('UTF-8'))
71
72
  end
72
73
  end
73
74
  end
74
-
75
-
76
-