unionpei 0.0.5 → 1.2.0

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