unionpei 1.0.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
-