fuiou 0.1.0 → 0.1.4

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
  SHA256:
3
- metadata.gz: 39f9fe07a187ad5b56257dec8cd148cb12df1d46bf60bd00a223103bd83fe25b
4
- data.tar.gz: d52fc1de0c697d3482604e172d39b7655fff65e52407b9f1d68f7db9327f4e47
3
+ metadata.gz: ae232fcdb1b823356426238a1373b183269500de47beacf9e7585f63829a0ce3
4
+ data.tar.gz: 06d655b1a3a4fdfcf697003d6cf1c5d78b1ccd7749c6bf690fae273b754c9fa8
5
5
  SHA512:
6
- metadata.gz: f9c6cb4e695237134c5f599704036960bda0463b24b7d0c4356b3c8b9c630323b8e561d9774aa3e94b8d8a555fbfee4558025049cdf6fddeda52d99d8bab7947
7
- data.tar.gz: 458b731db237cb0e01ba47203e6e40e3becebc0694a24dd3e996f2dc984ada98c24e7b6a85ab1b6af16fe6a82dc200cadc70baec9205e99b891cff5c83d6917c
6
+ metadata.gz: a07c5893bc4e69b541d2234c23de192c7e4eb73922923c6cc385460dd67ca50be1fa0d5d87e45fadb61aedacbe6f2b5e6d72c5ad82d4ded8239df6f9112d6cbe
7
+ data.tar.gz: 1f23162d9a3392366bab681ec0967af936fd9847759aa5fc79e0f3c8db1c4f0b23408d85f9dd98fdaf07c8ccc647c12c5f91cd76fdafa556988650d34c6e95ff
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cgi'
4
+ require 'active_support/core_ext/hash/conversions'
5
+
6
+ module Fuiou
7
+ module Result
8
+ class << self
9
+ def parse(req)
10
+ Hash.from_xml(CGI.unescape(req))["xml"]
11
+ end
12
+ end
13
+ end
14
+ end
data/lib/fuiou/service.rb CHANGED
@@ -7,8 +7,6 @@ require 'active_support/core_ext/hash/conversions'
7
7
 
8
8
  module Fuiou
9
9
  module Service
10
- FUIOU_21_URL = "https://fundwx.fuiou.com/preCreate".freeze
11
- FUIOU_30_URL = "https://fundwx.fuiou.com/commonQuery".freeze
12
10
  ENCODE_TYPE_GBK = "GBK"
13
11
 
14
12
  class << self
@@ -17,7 +15,7 @@ module Fuiou
17
15
  def invoke_pre_create(params)
18
16
  check_required_options(params, INVOKE_PRE_CREATE_REQUIRED_FIELDS)
19
17
  payload = xmlify_payload(params)
20
- invoke_remote(FUIOU_21_URL, { req: payload })
18
+ invoke_remote(Fuiou.fuiou_21_url, { req: payload })
21
19
  end
22
20
 
23
21
  INVOKE_COMMON_QUERY_REQUIRED_FIELDS = %i[version ins_cd mchnt_cd term_id order_type mchnt_order_no random_str]
@@ -25,9 +23,27 @@ module Fuiou
25
23
  def invoke_common_query(params)
26
24
  check_required_options(params, INVOKE_COMMON_QUERY_REQUIRED_FIELDS)
27
25
  payload = xmlify_payload(params)
28
- invoke_remote(FUIOU_30_URL, { req: payload })
26
+ invoke_remote(Fuiou.fuiou_30_url, { req: payload })
29
27
  end
30
28
 
29
+ INVOKE_HIS_TRADE_QUERY_REQUIRED_FIELDS = %i[version ins_cd mchnt_cd term_id order_type]
30
+ # 历史订单查询: https://fundwx.fuiou.com/doc/#/scanpay/api?id=_310-%e5%8e%86%e5%8f%b2%e8%ae%a2%e5%8d%95%e6%9f%a5%e8%af%a2
31
+ def invoke_his_trade_query(params)
32
+ check_required_options(params, INVOKE_HIS_TRADE_QUERY_REQUIRED_FIELDS)
33
+ payload = xmlify_payload(params)
34
+ invoke_remote(Fuiou.his_trade_query_url, { req: payload })
35
+ end
36
+
37
+ INVOKE_WX_PRE_CREATE_REQUIRED_FIELDS = %i[version addn_inf ins_cd mchnt_cd term_id random_str goods_des goods_detail goods_tag product_id mchnt_order_no curr_type order_amt term_ip txn_begin_ts notify_url limit_pay trade_type openid sub_openid sub_appid]
38
+ # 公众号/服务窗统一下单: https://fundwx.fuiou.com/doc/#/scanpay/api?id=_33-%e5%85%ac%e4%bc%97%e5%8f%b7%e6%9c%8d%e5%8a%a1%e7%aa%97%e7%bb%9f%e4%b8%80%e4%b8%8b%e5%8d%95
39
+ def invoke_wx_pre_create(params)
40
+ check_required_options(params, INVOKE_WX_PRE_CREATE_REQUIRED_FIELDS)
41
+ payload = xmlify_payload(params)
42
+ invoke_remote(Fuiou.wx_pre_create_url, { req: payload })
43
+ end
44
+
45
+ private
46
+
31
47
  def invoke_remote(url, payload, options = {})
32
48
  resp = RestClient.post(
33
49
  url,
@@ -37,26 +53,24 @@ module Fuiou
37
53
  charset: ENCODE_TYPE_GBK
38
54
  }
39
55
  )
40
- Hash.from_xml(CGI.unescape(resp.body))["xml"]
56
+ Fuiou::Result.parse(resp.body)
41
57
  end
42
58
 
43
- private
44
-
45
59
  def xmlify_payload(params)
46
60
  rsa_string = params.sort.map{|k,v| "#{k}=#{v}&" unless k.start_with?("sign") || k.start_with?("reserved")}.join
47
- rsa_string = rsa_string.delete_suffix("&") if rsa_string.end_with?("&")
61
+ rsa_string = rsa_string.chop if rsa_string.end_with?("&")
48
62
 
49
63
  sign = Fuiou::Sign.rsa_sign(rsa_string)
50
64
 
51
- xml = "<?xml version=\"1.0\" encoding=\"GBK\" standalone=\"yes\"?><xml>#{params.except(:sign).sort.map { |k, v| "<#{k}>#{v}</#{k}>" }.join}<sign>#{sign}</sign></xml>"
52
- (xml.force_encoding(ENCODE_TYPE_GBK)).force_encoding(ENCODE_TYPE_GBK)
65
+ xml = "<?xml version=\"1.0\" encoding=\"GBK\" standalone=\"yes\"?><xml>#{params.sort.map { |k, v| "<#{k}>#{v}</#{k}>" }.join}<sign>#{sign}</sign></xml>"
66
+ (xml.encode(ENCODE_TYPE_GBK)).encode(ENCODE_TYPE_GBK)
53
67
  end
54
68
 
55
69
  def check_required_options(options, names)
56
70
  names.each do |name|
57
71
  warn("Fuiou Warn: missing required option: #{name}") unless options.has_key?(name)
58
72
  end
59
- end
73
+ end
60
74
  end
61
75
  end
62
- end
76
+ end
data/lib/fuiou/sign.rb CHANGED
@@ -13,7 +13,6 @@ module Fuiou
13
13
  def rsa_sign(rsa_string)
14
14
  rsa = OpenSSL::PKey::RSA.new(Fuiou.ins_private_key)
15
15
  sign = rsa.sign(SIGN_TYPE_MD5, rsa_string.encode(ENCODE_TYPE_GBK))
16
- Base64.strict_encode64(sign)
17
16
  CGI.escape(Base64.strict_encode64(sign))
18
17
  end
19
18
 
data/lib/fuiou/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fuiou
4
- VERSION = "0.1.0".freeze
4
+ VERSION = "0.1.4".freeze
5
5
  end
data/lib/fuiou.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'fuiou/result'
3
4
  require 'fuiou/service'
4
5
  require 'fuiou/sign'
5
6
  require 'fuiou/version'
6
- require 'openssl'
7
7
 
8
8
  module Fuiou
9
9
  class << self
@@ -12,7 +12,11 @@ module Fuiou
12
12
  # ins_private_key 机构号私钥
13
13
  # ins_public_key 机构号公钥
14
14
  # notify_url 回调通知地址
15
+ # fuiou_21_url 统一下单地址
16
+ # fuiou_30_url 订单查询地址
17
+ # his_trade_query_url 历史交易查询地址
15
18
  attr_accessor :mch_id, :notify_url
16
19
  attr_accessor :ins_id, :ins_private_key, :ins_public_key
20
+ attr_accessor :fuiou_21_url, :fuiou_30_url, :his_trade_query_url, :wx_pre_create_url
17
21
  end
18
22
  end
data/test/test_helper.rb CHANGED
@@ -8,6 +8,8 @@ require "webmock/minitest"
8
8
  Fuiou.mch_id = "0002900F0370542"
9
9
  Fuiou.notify_url = "http://www.wrx.cn"
10
10
  Fuiou.ins_id = "08A9999999"
11
+ Fuiou.fuiou_21_url = "https://fundwx.fuiou.com/preCreate"
12
+ Fuiou.fuiou_30_url = "https://fundwx.fuiou.com/commonQuery"
11
13
 
12
14
  Fuiou.ins_private_key = "-----BEGIN RSA PRIVATE KEY-----\nMIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJgAzD8fEvBHQTyxUEeK963mjziMWG7nxpi+pDMdtWiakc6xVhhbaipLaHo4wVI92A2wr3ptGQ1/YsASEHm3m2wGOpT2vrb2Ln/S7lz1ShjTKaT8U6rKgCdpQNHUuLhBQlpJer2mcYEzG/nGzcyalOCgXC/6CySiJCWJmPyR45bJAgMBAAECgYBHFfBvAKBBwIEQ2jeaDbKBIFcQcgoVa81jt5xgz178WXUg/awu3emLeBKXPh2i0YtN87hM/+J8fnt3KbuMwMItCsTD72XFXLM4FgzJ4555CUCXBf5/tcKpS2xT8qV8QDr8oLKA18sQxWp8BMPrNp0epmwun/gwgxoyQrJUB5YgZQJBAOiVXHiTnc3KwvIkdOEPmlfePFnkD4zzcv2UwTlHWgCyM/L8SCAFclXmSiJfKSZZS7o0kIeJJ6xe3Mf4/HSlhdMCQQCnTow+TnlEhDTPtWa+TUgzOys83Q/VLikqKmDzkWJ7I12+WX6AbxxEHLD+THn0JGrlvzTEIZyCe0sjQy4LzQNzAkEAr2SjfVJkuGJlrNENSwPHMugmvusbRwH3/38ET7udBdVdE6poga1Z0al+0njMwVypnNwy+eLWhkhrWmpLh3OjfQJAI3BV8JS6xzKh5SVtn/3Kv19XJ0tEIUnn2lCjvLQdAixZnQpj61ydxie1rggRBQ/5vLSlvq3H8zOelNeUF1fT1QJADNo+tkHVXLY9H2kdWFoYTvuLexHAgrsnHxONOlSA5hcVLd1B3p9utOt3QeDf6x2i1lqhTH2w8gzjvsnx13tWqg==\n-----END RSA PRIVATE KEY-----\n"
13
15
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fuiou
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - wen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-11 00:00:00.000000000 Z
11
+ date: 2021-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -89,6 +89,7 @@ extra_rdoc_files: []
89
89
  files:
90
90
  - Rakefile
91
91
  - lib/fuiou.rb
92
+ - lib/fuiou/result.rb
92
93
  - lib/fuiou/service.rb
93
94
  - lib/fuiou/sign.rb
94
95
  - lib/fuiou/version.rb