alipay-easysdk-ruby 1.0.0 → 1.0.2
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 +4 -4
- data/examples/demo.rb +3 -4
- data/examples/demo_with_get.rb +33 -0
- data/examples/demo_with_post.rb +4 -4
- data/lib/alipay/easysdk/kernel/config.rb +59 -15
- data/lib/alipay/easysdk/kernel/easy_sdk_kernel.rb +65 -32
- data/lib/alipay/easysdk/kernel/factory.rb +14 -2
- data/lib/alipay/easysdk/payment/common/client.rb +29 -2
- data/lib/alipay/easysdk/payment/page/client.rb +2 -1
- data/lib/alipay/easysdk/payment/page/models/alipay_trade_page_pay_response.rb +2 -1
- data/lib/alipay/easysdk/payment/wap/client.rb +2 -1
- data/lib/alipay/easysdk/payment/wap/models/alipay_trade_wap_pay_response.rb +2 -1
- data/lib/alipay/easysdk/version.rb +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e0448e76a0838f021e25e4181ca71d3f28586426a636eda913b93ba9ef221740
|
|
4
|
+
data.tar.gz: de78cb3ee1ba2e4643e1ee6c7b804f38d5c99fff93b92b59ea5aaced4a9a2702
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1f6efbf67c297f1bb264c388095e715f6774e3a6bbf555d38d1ddf4a1d28d3d3580c6843b1ec721bb8dc61644261e16c39a816695c5cb06b49026aef82ed6235
|
|
7
|
+
data.tar.gz: 0d8aec51df7f3f588bf58aa3255840785fbe3357e1fb36870195abe7e308098f69d8f5e50c385cfcec959a876ee71445f61efb8d257ba2043b4a29878b69edc3
|
data/examples/demo.rb
CHANGED
|
@@ -14,8 +14,8 @@ def get_options
|
|
|
14
14
|
gateway_host: 'openapi-sandbox.dl.alipaydev.com',
|
|
15
15
|
sign_type: 'RSA2',
|
|
16
16
|
app_id: '9021000156667919',
|
|
17
|
-
merchant_private_key: '
|
|
18
|
-
alipay_public_key: '
|
|
17
|
+
merchant_private_key: 'MIIEogIBAAKCAQEAmy8gfxY5RFBKixIWoflLqULF1gZ43QdlEYln+1f0k+tbiWbhi3DBOKp9gjgGmOJmBzVuaDQ+VMDmrolIc8tOz6urQU2PSjMSSqLub3xwyxiZO2qjfkn5riO68ITkr3RN7zVyZcheoaTfexygtg7xH8eqbqhghnVs97KwKnkIt7mzhIvbs60qrV8YAkbm6Hw85s4BVBoBleFZPQCBDXffVTz72GGu5iFHcbVoZdtT2GKPWWiaYb9BEuzzmUo41pPdHrMYP0VnR9UdGnLZyC70YXQ6ZshRux0/rkIrxLGVlk5UBTqdxtP8r2oqoVLl4L5tBcTw4gRPqL4+UiDQ7YE3ZQIDAQABAoIBAHhcqhjIFOy+VcLd6b4BjMSgbK+e33mXtbVPXN4ejy13e8zrhf5QGx2nZqdsavmDh90JfTPHaZz07TbsdcySIPOD09VXoc7MI+DN1J+V5iowTxE9mcdm+wgs4F6SxIitbZEeZDc7nOJE7a0gPCpZFn4usCsZ35wKUdUgu/CFZdSRNdSKBdwdDQcMA/rClHqDvIeCBAbK979cr4/ltAofBQTt9YhZsXpChSQZOnyYFRBPtlblthPcJQOhN6ZH7EsNftdh+elHNjNaH+a6fcCiS4J9yhEtqeQs0ZGDSsE3b7zHW+cOaicvE4X9U651ipVxkYXRK1WhfctRF/cjzqsVtNUCgYEA30NT2kk3CLc8/gXEm/oitEkLx3gp+eH5gLrAE41fcTUloeg+bHXPqQh0IFyLTNUIJ4RF/HdlqHFciKVDUN5HVZeG/RAB3BgTpQV174LuebRs6Fuj3T/qvaV9GdKsTMwnZpljsTJJFiQNMW/vczmy+HbPeMO4r1TWk8GgaD4580MCgYEAsfBObh5dC9D9hIkPIaxZFdAIhmWN8MF3WbEg0LI3YzjW9b6Qd6rn9IyB2UtM4u+lseiLe5XMrR1nzwgxyELyr/w2Mov2F9Zf/DhUqPv/qpegu7xD6U8ca4fJMYfN3sT9R2M3P074U15MlPjBEojtSwg/4oBEcono43+lcRiI/DcCgYAHp6BNYKtBYj72Gq6GBoqAEe0UdrtBtQy/7Cc/xF4cXI0gwvy47UUkb4TDw0iHZtpzuGZJ5LIYl2Jr0PbA5A4gEiTvskfOCwlJZCmJ/7w7cgM16EZzBIkA3ZavdvivXWSQcPvpDGdTGgNVyZe1JKpNOI2ef19qq4b74+yjBlcoTwKBgA/vUkbAR1rgi2OMFqPQWGYArFLE03JFERgiKasm2pjzJST6vNtKnd0jnBlGigskpPUKuzsFDkBOitZaiILDpBIohv391LsLwqrGrKY5cwrm60kEshw5rnTewyDBZalWgMwc0XzE6K4mmrsYj8nGI2H9yiLRk8+iFA4Th1BafyH/AoGAcQHDXuNR0inKvsoEX1hYAoYmE7GwYcxl88AdrAnfqJHgdxHaWCKb/gYiXqRR0RFhiAEZCuVm9IvJ6Dh2eR2psC9lyixgQiyiJYLSA1sLzVzQS/OkSpC3w5srcwxOWzRTBreZbGzV+zJqh9NBCQt0S3Bq2Mi1qYxzxUAytlYSdrQ=',
|
|
18
|
+
alipay_public_key: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmy8gfxY5RFBKixIWoflLqULF1gZ43QdlEYln+1f0k+tbiWbhi3DBOKp9gjgGmOJmBzVuaDQ+VMDmrolIc8tOz6urQU2PSjMSSqLub3xwyxiZO2qjfkn5riO68ITkr3RN7zVyZcheoaTfexygtg7xH8eqbqhghnVs97KwKnkIt7mzhIvbs60qrV8YAkbm6Hw85s4BVBoBleFZPQCBDXffVTz72GGu5iFHcbVoZdtT2GKPWWiaYb9BEuzzmUo41pPdHrMYP0VnR9UdGnLZyC70YXQ6ZshRux0/rkIrxLGVlk5UBTqdxtP8r2oqoVLl4L5tBcTw4gRPqL4+UiDQ7YE3ZQIDAQAB',
|
|
19
19
|
encrypt_key: 'rEoolKE9DfJIQHMMelZapw=='
|
|
20
20
|
)
|
|
21
21
|
end
|
|
@@ -94,8 +94,7 @@ begin
|
|
|
94
94
|
|
|
95
95
|
response = Alipay::EasySDK::Kernel::Factory.payment
|
|
96
96
|
.wap
|
|
97
|
-
|
|
98
|
-
.pay(
|
|
97
|
+
.pay(
|
|
99
98
|
'1123',
|
|
100
99
|
'70501111111S001111119',
|
|
101
100
|
'9.00',
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'alipay/easysdk'
|
|
4
|
+
|
|
5
|
+
# 配置 SDK
|
|
6
|
+
Alipay::EasySDK.configure(
|
|
7
|
+
protocol: 'https',
|
|
8
|
+
gateway_host: 'openapi-sandbox.dl.alipaydev.com',
|
|
9
|
+
sign_type: 'RSA2',
|
|
10
|
+
app_id: '9021000156667919',
|
|
11
|
+
merchant_private_key: 'MIIEogIBAAKCAQEAmy8gfxY5RFBKixIWoflLqULF1gZ43QdlEYln+1f0k+tbiWbhi3DBOKp9gjgGmOJmBzVuaDQ+VMDmrolIc8tOz6urQU2PSjMSSqLub3xwyxiZO2qjfkn5riO68ITkr3RN7zVyZcheoaTfexygtg7xH8eqbqhghnVs97KwKnkIt7mzhIvbs60qrV8YAkbm6Hw85s4BVBoBleFZPQCBDXffVTz72GGu5iFHcbVoZdtT2GKPWWiaYb9BEuzzmUo41pPdHrMYP0VnR9UdGnLZyC70YXQ6ZshRux0/rkIrxLGVlk5UBTqdxtP8r2oqoVLl4L5tBcTw4gRPqL4+UiDQ7YE3ZQIDAQABAoIBAHhcqhjIFOy+VcLd6b4BjMSgbK+e33mXtbVPXN4ejy13e8zrhf5QGx2nZqdsavmDh90JfTPHaZz07TbsdcySIPOD09VXoc7MI+DN1J+V5iowTxE9mcdm+wgs4F6SxIitbZEeZDc7nOJE7a0gPCpZFn4usCsZ35wKUdUgu/CFZdSRNdSKBdwdDQcMA/rClHqDvIeCBAbK979cr4/ltAofBQTt9YhZsXpChSQZOnyYFRBPtlblthPcJQOhN6ZH7EsNftdh+elHNjNaH+a6fcCiS4J9yhEtqeQs0ZGDSsE3b7zHW+cOaicvE4X9U651ipVxkYXRK1WhfctRF/cjzqsVtNUCgYEA30NT2kk3CLc8/gXEm/oitEkLx3gp+eH5gLrAE41fcTUloeg+bHXPqQh0IFyLTNUIJ4RF/HdlqHFciKVDUN5HVZeG/RAB3BgTpQV174LuebRs6Fuj3T/qvaV9GdKsTMwnZpljsTJJFiQNMW/vczmy+HbPeMO4r1TWk8GgaD4580MCgYEAsfBObh5dC9D9hIkPIaxZFdAIhmWN8MF3WbEg0LI3YzjW9b6Qd6rn9IyB2UtM4u+lseiLe5XMrR1nzwgxyELyr/w2Mov2F9Zf/DhUqPv/qpegu7xD6U8ca4fJMYfN3sT9R2M3P074U15MlPjBEojtSwg/4oBEcono43+lcRiI/DcCgYAHp6BNYKtBYj72Gq6GBoqAEe0UdrtBtQy/7Cc/xF4cXI0gwvy47UUkb4TDw0iHZtpzuGZJ5LIYl2Jr0PbA5A4gEiTvskfOCwlJZCmJ/7w7cgM16EZzBIkA3ZavdvivXWSQcPvpDGdTGgNVyZe1JKpNOI2ef19qq4b74+yjBlcoTwKBgA/vUkbAR1rgi2OMFqPQWGYArFLE03JFERgiKasm2pjzJST6vNtKnd0jnBlGigskpPUKuzsFDkBOitZaiILDpBIohv391LsLwqrGrKY5cwrm60kEshw5rnTewyDBZalWgMwc0XzE6K4mmrsYj8nGI2H9yiLRk8+iFA4Th1BafyH/AoGAcQHDXuNR0inKvsoEX1hYAoYmE7GwYcxl88AdrAnfqJHgdxHaWCKb/gYiXqRR0RFhiAEZCuVm9IvJ6Dh2eR2psC9lyixgQiyiJYLSA1sLzVzQS/OkSpC3w5srcwxOWzRTBreZbGzV+zJqh9NBCQt0S3Bq2Mi1qYxzxUAytlYSdrQ=',
|
|
12
|
+
alipay_public_key: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmy8gfxY5RFBKixIWoflLqULF1gZ43QdlEYln+1f0k+tbiWbhi3DBOKp9gjgGmOJmBzVuaDQ+VMDmrolIc8tOz6urQU2PSjMSSqLub3xwyxiZO2qjfkn5riO68ITkr3RN7zVyZcheoaTfexygtg7xH8eqbqhghnVs97KwKnkIt7mzhIvbs60qrV8YAkbm6Hw85s4BVBoBleFZPQCBDXffVTz72GGu5iFHcbVoZdtT2GKPWWiaYb9BEuzzmUo41pPdHrMYP0VnR9UdGnLZyC70YXQ6ZshRux0/rkIrxLGVlk5UBTqdxtP8r2oqoVLl4L5tBcTw4gRPqL4+UiDQ7YE3ZQIDAQAB',
|
|
13
|
+
encrypt_key: 'rEoolKE9DfJIQHMMelZapw=='
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
# 直接获取支付链接(GET 方式)
|
|
17
|
+
response = Alipay::EasySDK.page
|
|
18
|
+
.pay(
|
|
19
|
+
'小程序会员充值',
|
|
20
|
+
'ORDER1234567890',
|
|
21
|
+
'19.80',
|
|
22
|
+
'https://merchant.test/return'
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
if response.success?
|
|
26
|
+
puts '支付表单:'
|
|
27
|
+
puts response.form
|
|
28
|
+
puts
|
|
29
|
+
puts '支付链接:'
|
|
30
|
+
puts response.payment_url
|
|
31
|
+
else
|
|
32
|
+
warn "调用失败: #{response.error_message}"
|
|
33
|
+
end
|
data/examples/demo_with_post.rb
CHANGED
|
@@ -179,14 +179,14 @@ begin
|
|
|
179
179
|
gateway_host: 'openapi-sandbox.dl.alipaydev.com',
|
|
180
180
|
sign_type: 'RSA2',
|
|
181
181
|
app_id: '9021000156667919',
|
|
182
|
-
merchant_private_key: '
|
|
183
|
-
alipay_public_key: '
|
|
182
|
+
merchant_private_key: 'MIIEogIBAAKCAQEAmy8gfxY5RFBKixIWoflLqULF1gZ43QdlEYln+1f0k+tbiWbhi3DBOKp9gjgGmOJmBzVuaDQ+VMDmrolIc8tOz6urQU2PSjMSSqLub3xwyxiZO2qjfkn5riO68ITkr3RN7zVyZcheoaTfexygtg7xH8eqbqhghnVs97KwKnkIt7mzhIvbs60qrV8YAkbm6Hw85s4BVBoBleFZPQCBDXffVTz72GGu5iFHcbVoZdtT2GKPWWiaYb9BEuzzmUo41pPdHrMYP0VnR9UdGnLZyC70YXQ6ZshRux0/rkIrxLGVlk5UBTqdxtP8r2oqoVLl4L5tBcTw4gRPqL4+UiDQ7YE3ZQIDAQABAoIBAHhcqhjIFOy+VcLd6b4BjMSgbK+e33mXtbVPXN4ejy13e8zrhf5QGx2nZqdsavmDh90JfTPHaZz07TbsdcySIPOD09VXoc7MI+DN1J+V5iowTxE9mcdm+wgs4F6SxIitbZEeZDc7nOJE7a0gPCpZFn4usCsZ35wKUdUgu/CFZdSRNdSKBdwdDQcMA/rClHqDvIeCBAbK979cr4/ltAofBQTt9YhZsXpChSQZOnyYFRBPtlblthPcJQOhN6ZH7EsNftdh+elHNjNaH+a6fcCiS4J9yhEtqeQs0ZGDSsE3b7zHW+cOaicvE4X9U651ipVxkYXRK1WhfctRF/cjzqsVtNUCgYEA30NT2kk3CLc8/gXEm/oitEkLx3gp+eH5gLrAE41fcTUloeg+bHXPqQh0IFyLTNUIJ4RF/HdlqHFciKVDUN5HVZeG/RAB3BgTpQV174LuebRs6Fuj3T/qvaV9GdKsTMwnZpljsTJJFiQNMW/vczmy+HbPeMO4r1TWk8GgaD4580MCgYEAsfBObh5dC9D9hIkPIaxZFdAIhmWN8MF3WbEg0LI3YzjW9b6Qd6rn9IyB2UtM4u+lseiLe5XMrR1nzwgxyELyr/w2Mov2F9Zf/DhUqPv/qpegu7xD6U8ca4fJMYfN3sT9R2M3P074U15MlPjBEojtSwg/4oBEcono43+lcRiI/DcCgYAHp6BNYKtBYj72Gq6GBoqAEe0UdrtBtQy/7Cc/xF4cXI0gwvy47UUkb4TDw0iHZtpzuGZJ5LIYl2Jr0PbA5A4gEiTvskfOCwlJZCmJ/7w7cgM16EZzBIkA3ZavdvivXWSQcPvpDGdTGgNVyZe1JKpNOI2ef19qq4b74+yjBlcoTwKBgA/vUkbAR1rgi2OMFqPQWGYArFLE03JFERgiKasm2pjzJST6vNtKnd0jnBlGigskpPUKuzsFDkBOitZaiILDpBIohv391LsLwqrGrKY5cwrm60kEshw5rnTewyDBZalWgMwc0XzE6K4mmrsYj8nGI2H9yiLRk8+iFA4Th1BafyH/AoGAcQHDXuNR0inKvsoEX1hYAoYmE7GwYcxl88AdrAnfqJHgdxHaWCKb/gYiXqRR0RFhiAEZCuVm9IvJ6Dh2eR2psC9lyixgQiyiJYLSA1sLzVzQS/OkSpC3w5srcwxOWzRTBreZbGzV+zJqh9NBCQt0S3Bq2Mi1qYxzxUAytlYSdrQ=',
|
|
183
|
+
alipay_public_key: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmy8gfxY5RFBKixIWoflLqULF1gZ43QdlEYln+1f0k+tbiWbhi3DBOKp9gjgGmOJmBzVuaDQ+VMDmrolIc8tOz6urQU2PSjMSSqLub3xwyxiZO2qjfkn5riO68ITkr3RN7zVyZcheoaTfexygtg7xH8eqbqhghnVs97KwKnkIt7mzhIvbs60qrV8YAkbm6Hw85s4BVBoBleFZPQCBDXffVTz72GGu5iFHcbVoZdtT2GKPWWiaYb9BEuzzmUo41pPdHrMYP0VnR9UdGnLZyC70YXQ6ZshRux0/rkIrxLGVlk5UBTqdxtP8r2oqoVLl4L5tBcTw4gRPqL4+UiDQ7YE3ZQIDAQAB',
|
|
184
184
|
encrypt_key: 'rEoolKE9DfJIQHMMelZapw=='
|
|
185
185
|
)
|
|
186
186
|
|
|
187
187
|
# 2. 发起WAP支付API调用 - 与PHP版本完全相同的参数
|
|
188
188
|
response = Alipay::EasySDK.wap
|
|
189
|
-
.optional("seller_id", "
|
|
189
|
+
.optional("seller_id", "2036665393371081") # 可选:设置卖家支付宝用户ID
|
|
190
190
|
.pay(
|
|
191
191
|
"1123", # 商品名称 - 与PHP版本一致
|
|
192
192
|
"70501111111S001111119", # 商户订单号
|
|
@@ -236,4 +236,4 @@ rescue => e
|
|
|
236
236
|
puts "调用遭遇异常,原因:#{e.message}"
|
|
237
237
|
puts e.backtrace.join("\n") if ENV['DEBUG']
|
|
238
238
|
raise e
|
|
239
|
-
end
|
|
239
|
+
end
|
|
@@ -4,23 +4,48 @@ module Alipay
|
|
|
4
4
|
module EasySDK
|
|
5
5
|
module Kernel
|
|
6
6
|
class Config
|
|
7
|
-
attr_accessor :protocol,
|
|
8
|
-
:
|
|
9
|
-
:
|
|
7
|
+
attr_accessor :protocol,
|
|
8
|
+
:gateway_host,
|
|
9
|
+
:app_id,
|
|
10
|
+
:sign_type,
|
|
11
|
+
:alipay_public_key,
|
|
12
|
+
:merchant_private_key,
|
|
13
|
+
:merchant_cert_path,
|
|
14
|
+
:alipay_cert_path,
|
|
15
|
+
:alipay_root_cert_path,
|
|
16
|
+
:merchant_cert_sn,
|
|
17
|
+
:alipay_cert_sn,
|
|
18
|
+
:alipay_root_cert_sn,
|
|
19
|
+
:notify_url,
|
|
20
|
+
:encrypt_key,
|
|
21
|
+
:http_proxy,
|
|
22
|
+
:ignore_ssl,
|
|
23
|
+
:charset,
|
|
24
|
+
:format,
|
|
25
|
+
:version
|
|
10
26
|
|
|
11
27
|
def initialize(options = {})
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@
|
|
15
|
-
@
|
|
16
|
-
@
|
|
17
|
-
@sign_type =
|
|
18
|
-
@
|
|
19
|
-
@
|
|
20
|
-
@
|
|
21
|
-
@
|
|
22
|
-
@
|
|
23
|
-
@
|
|
28
|
+
opts = options || {}
|
|
29
|
+
|
|
30
|
+
@protocol = fetch_option(opts, :protocol, 'protocol') || 'https'
|
|
31
|
+
@gateway_host = fetch_option(opts, :gateway_host, 'gateway_host', :gatewayHost, 'gatewayHost') || 'openapi.alipay.com/gateway.do'
|
|
32
|
+
@app_id = fetch_option(opts, :app_id, 'app_id', :appId, 'appId')
|
|
33
|
+
@sign_type = fetch_option(opts, :sign_type, 'sign_type', :signType, 'signType') || AlipayConstants::DEFAULT_SIGN_TYPE
|
|
34
|
+
@alipay_public_key = fetch_option(opts, :alipay_public_key, 'alipay_public_key', :alipayPublicKey, 'alipayPublicKey')
|
|
35
|
+
@merchant_private_key = fetch_option(opts, :merchant_private_key, 'merchant_private_key', :merchantPrivateKey, 'merchantPrivateKey')
|
|
36
|
+
@merchant_cert_path = fetch_option(opts, :merchant_cert_path, 'merchant_cert_path', :merchantCertPath, 'merchantCertPath')
|
|
37
|
+
@alipay_cert_path = fetch_option(opts, :alipay_cert_path, 'alipay_cert_path', :alipayCertPath, 'alipayCertPath')
|
|
38
|
+
@alipay_root_cert_path = fetch_option(opts, :alipay_root_cert_path, 'alipay_root_cert_path', :alipayRootCertPath, 'alipayRootCertPath')
|
|
39
|
+
@merchant_cert_sn = fetch_option(opts, :merchant_cert_sn, 'merchant_cert_sn', :merchantCertSN, 'merchantCertSN')
|
|
40
|
+
@alipay_cert_sn = fetch_option(opts, :alipay_cert_sn, 'alipay_cert_sn', :alipayCertSN, 'alipayCertSN')
|
|
41
|
+
@alipay_root_cert_sn = fetch_option(opts, :alipay_root_cert_sn, 'alipay_root_cert_sn', :alipayRootCertSN, 'alipayRootCertSN')
|
|
42
|
+
@notify_url = fetch_option(opts, :notify_url, 'notify_url', :notifyUrl, 'notifyUrl')
|
|
43
|
+
@encrypt_key = fetch_option(opts, :encrypt_key, 'encrypt_key', :encryptKey, 'encryptKey')
|
|
44
|
+
@http_proxy = fetch_option(opts, :http_proxy, 'http_proxy', :httpProxy, 'httpProxy')
|
|
45
|
+
@ignore_ssl = fetch_option(opts, :ignore_ssl, 'ignore_ssl', :ignoreSSL, 'ignoreSSL')
|
|
46
|
+
@charset = fetch_option(opts, :charset, 'charset') || AlipayConstants::DEFAULT_CHARSET
|
|
47
|
+
@format = fetch_option(opts, :format, 'format') || AlipayConstants::DEFAULT_FORMAT
|
|
48
|
+
@version = fetch_option(opts, :version, 'version') || AlipayConstants::DEFAULT_VERSION
|
|
24
49
|
end
|
|
25
50
|
|
|
26
51
|
def gateway_url
|
|
@@ -32,6 +57,25 @@ module Alipay
|
|
|
32
57
|
raise "merchant_private_key is required" if @merchant_private_key.nil? || @merchant_private_key.empty?
|
|
33
58
|
raise "alipay_public_key is required" if @alipay_public_key.nil? || @alipay_public_key.empty?
|
|
34
59
|
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
def fetch_option(options, *keys)
|
|
64
|
+
keys.each do |key|
|
|
65
|
+
if key.is_a?(String)
|
|
66
|
+
symbol_key = key.tr('-', '_').to_sym
|
|
67
|
+
return options[key] if options.key?(key)
|
|
68
|
+
return options[symbol_key] if options.key?(symbol_key)
|
|
69
|
+
elsif key.is_a?(Symbol)
|
|
70
|
+
string_key = key.to_s
|
|
71
|
+
camel_case_key = string_key.gsub(/_([a-z])/) { Regexp.last_match(1).upcase }
|
|
72
|
+
return options[key] if options.key?(key)
|
|
73
|
+
return options[string_key] if options.key?(string_key)
|
|
74
|
+
return options[camel_case_key] if options.key?(camel_case_key)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
nil
|
|
78
|
+
end
|
|
35
79
|
end
|
|
36
80
|
end
|
|
37
81
|
end
|
|
@@ -6,6 +6,7 @@ require_relative 'util/sign_content_extractor'
|
|
|
6
6
|
require 'net/http'
|
|
7
7
|
require 'uri'
|
|
8
8
|
require 'cgi'
|
|
9
|
+
require 'json'
|
|
9
10
|
|
|
10
11
|
module Alipay
|
|
11
12
|
module EasySDK
|
|
@@ -38,28 +39,47 @@ module Alipay
|
|
|
38
39
|
end
|
|
39
40
|
|
|
40
41
|
def get_config(key)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
42
|
+
lookup = {
|
|
43
|
+
'protocol' => :protocol,
|
|
44
|
+
'gatewayHost' => :gateway_host,
|
|
45
|
+
'gateway_host' => :gateway_host,
|
|
46
|
+
'appId' => :app_id,
|
|
47
|
+
'app_id' => :app_id,
|
|
48
|
+
'merchantPrivateKey' => :merchant_private_key,
|
|
49
|
+
'merchant_private_key' => :merchant_private_key,
|
|
50
|
+
'alipayPublicKey' => :alipay_public_key,
|
|
51
|
+
'alipay_public_key' => :alipay_public_key,
|
|
52
|
+
'signType' => :sign_type,
|
|
53
|
+
'sign_type' => :sign_type,
|
|
54
|
+
'charset' => :charset,
|
|
55
|
+
'format' => :format,
|
|
56
|
+
'version' => :version,
|
|
57
|
+
'notifyUrl' => :notify_url,
|
|
58
|
+
'notify_url' => :notify_url,
|
|
59
|
+
'encryptKey' => :encrypt_key,
|
|
60
|
+
'encrypt_key' => :encrypt_key,
|
|
61
|
+
'httpProxy' => :http_proxy,
|
|
62
|
+
'http_proxy' => :http_proxy,
|
|
63
|
+
'ignoreSSL' => :ignore_ssl,
|
|
64
|
+
'ignore_ssl' => :ignore_ssl,
|
|
65
|
+
'merchantCertPath' => :merchant_cert_path,
|
|
66
|
+
'merchant_cert_path' => :merchant_cert_path,
|
|
67
|
+
'alipayCertPath' => :alipay_cert_path,
|
|
68
|
+
'alipay_cert_path' => :alipay_cert_path,
|
|
69
|
+
'alipayRootCertPath' => :alipay_root_cert_path,
|
|
70
|
+
'alipay_root_cert_path' => :alipay_root_cert_path,
|
|
71
|
+
'merchantCertSN' => :merchant_cert_sn,
|
|
72
|
+
'merchant_cert_sn' => :merchant_cert_sn,
|
|
73
|
+
'alipayCertSN' => :alipay_cert_sn,
|
|
74
|
+
'alipay_cert_sn' => :alipay_cert_sn,
|
|
75
|
+
'alipayRootCertSN' => :alipay_root_cert_sn,
|
|
76
|
+
'alipay_root_cert_sn' => :alipay_root_cert_sn
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
method = lookup[key]
|
|
80
|
+
return unless method
|
|
81
|
+
|
|
82
|
+
@config.public_send(method)
|
|
63
83
|
end
|
|
64
84
|
|
|
65
85
|
def get_sdk_version
|
|
@@ -88,22 +108,22 @@ module Alipay
|
|
|
88
108
|
|
|
89
109
|
def generate_page(method, system_params, biz_params, text_params, sign)
|
|
90
110
|
puts "[DEBUG] generate_page - sign长度: #{sign.length}" if ENV['DEBUG']
|
|
111
|
+
signed_params = build_signed_params(system_params, biz_params, text_params, sign)
|
|
91
112
|
if method == 'GET'
|
|
92
|
-
|
|
93
|
-
sorted_map = get_sorted_map(system_params, biz_params, text_params)
|
|
94
|
-
sorted_map[AlipayConstants::SIGN_FIELD] = sign
|
|
95
|
-
return get_gateway_server_url + '?' + build_query_string(sorted_map)
|
|
113
|
+
return build_gateway_url(signed_params)
|
|
96
114
|
elsif method == 'POST'
|
|
97
|
-
#
|
|
98
|
-
|
|
99
|
-
sorted_map[AlipayConstants::SIGN_FIELD] = sign
|
|
100
|
-
puts "[DEBUG] generate_page POST - sorted_map中sign长度: #{sorted_map[AlipayConstants::SIGN_FIELD].length}" if ENV['DEBUG']
|
|
101
|
-
return build_form(get_gateway_server_url, sorted_map)
|
|
115
|
+
puts "[DEBUG] generate_page POST - sorted_map中sign长度: #{signed_params[AlipayConstants::SIGN_FIELD].length}" if ENV['DEBUG']
|
|
116
|
+
return build_form(get_gateway_server_url, signed_params)
|
|
102
117
|
else
|
|
103
118
|
raise "不支持" + method
|
|
104
119
|
end
|
|
105
120
|
end
|
|
106
121
|
|
|
122
|
+
def generate_payment_url(system_params, biz_params, text_params, sign)
|
|
123
|
+
signed_params = build_signed_params(system_params, biz_params, text_params, sign)
|
|
124
|
+
build_gateway_url(signed_params)
|
|
125
|
+
end
|
|
126
|
+
|
|
107
127
|
def get_merchant_cert_sn
|
|
108
128
|
return @config.merchant_cert_sn
|
|
109
129
|
end
|
|
@@ -220,7 +240,7 @@ module Alipay
|
|
|
220
240
|
if @biz_params != nil
|
|
221
241
|
biz_params = json.to_json_string(@biz_params)
|
|
222
242
|
end
|
|
223
|
-
sorted_map = system_params || {}
|
|
243
|
+
sorted_map = (system_params || {}).dup
|
|
224
244
|
if !biz_params.nil? && !biz_params.empty?
|
|
225
245
|
# 模拟PHP json_encode($bizParams, JSON_UNESCAPED_UNICODE)
|
|
226
246
|
json_string = JSON.generate(JSON.parse(biz_params)).gsub('/', "\\/")
|
|
@@ -322,6 +342,19 @@ module Alipay
|
|
|
322
342
|
<script>document.forms['alipaysubmit'].submit();</script>
|
|
323
343
|
HTML
|
|
324
344
|
end
|
|
345
|
+
|
|
346
|
+
def build_signed_params(system_params, biz_params, text_params, sign)
|
|
347
|
+
sorted_map = get_sorted_map(system_params, biz_params, text_params)
|
|
348
|
+
sorted_map[AlipayConstants::SIGN_FIELD] = sign
|
|
349
|
+
sorted_map
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
def build_gateway_url(signed_params)
|
|
353
|
+
base_url = get_gateway_server_url + "?charset=#{AlipayConstants::DEFAULT_CHARSET}"
|
|
354
|
+
query = build_query_string(signed_params)
|
|
355
|
+
return base_url if query.nil? || query.empty?
|
|
356
|
+
base_url + '&' + query
|
|
357
|
+
end
|
|
325
358
|
end
|
|
326
359
|
end
|
|
327
360
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require_relative 'alipay_constants'
|
|
2
2
|
require_relative 'config'
|
|
3
|
+
require_relative 'cert_environment'
|
|
3
4
|
require_relative 'easy_sdk_kernel'
|
|
4
5
|
require_relative '../payment/wap/client'
|
|
5
6
|
require_relative '../payment/page/client'
|
|
@@ -56,11 +57,12 @@ module Alipay
|
|
|
56
57
|
|
|
57
58
|
def normalize_config(options)
|
|
58
59
|
raise ArgumentError, '配置参数不能为空' if options.nil?
|
|
59
|
-
|
|
60
|
-
Config.new(options)
|
|
60
|
+
options.is_a?(Config) ? options : Config.new(options)
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
def initialize_context(config)
|
|
64
|
+
apply_cert_environment(config)
|
|
65
|
+
config.validate
|
|
64
66
|
@config = config
|
|
65
67
|
@kernel = EasySDKKernel.new(config)
|
|
66
68
|
@payment = Payment.new(@kernel)
|
|
@@ -70,6 +72,16 @@ module Alipay
|
|
|
70
72
|
def ensure_context_set!
|
|
71
73
|
raise ConfigurationNotSetError, '请先调用Factory.set_options(config)设置SDK配置' unless @config
|
|
72
74
|
end
|
|
75
|
+
|
|
76
|
+
def apply_cert_environment(config)
|
|
77
|
+
return if config.alipay_cert_path.nil? || config.alipay_cert_path.to_s.strip.empty?
|
|
78
|
+
|
|
79
|
+
cert_env = CertEnvironment.new
|
|
80
|
+
cert_env.setup(config.merchant_cert_path, config.alipay_cert_path, config.alipay_root_cert_path)
|
|
81
|
+
config.merchant_cert_sn = cert_env.merchant_cert_sn
|
|
82
|
+
config.alipay_root_cert_sn = cert_env.root_cert_sn
|
|
83
|
+
config.alipay_public_key ||= cert_env.cached_alipay_public_key
|
|
84
|
+
end
|
|
73
85
|
end
|
|
74
86
|
|
|
75
87
|
class Payment
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'net/http'
|
|
2
2
|
require 'uri'
|
|
3
3
|
require 'cgi'
|
|
4
|
+
require 'openssl'
|
|
4
5
|
|
|
5
6
|
require_relative '../../kernel/easy_sdk_kernel'
|
|
6
7
|
require_relative 'models/alipay_trade_create_response'
|
|
@@ -163,9 +164,9 @@ module Alipay
|
|
|
163
164
|
end
|
|
164
165
|
|
|
165
166
|
def perform_http_request(uri, request)
|
|
166
|
-
http =
|
|
167
|
+
http = build_http_client(uri)
|
|
167
168
|
http.use_ssl = uri.scheme == 'https'
|
|
168
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl?
|
|
169
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl? && ignore_ssl?
|
|
169
170
|
http.open_timeout = 15
|
|
170
171
|
http.read_timeout = 15
|
|
171
172
|
http.request(request)
|
|
@@ -183,6 +184,32 @@ module Alipay
|
|
|
183
184
|
@kernel.optional_text_params.clear if @kernel.optional_text_params
|
|
184
185
|
@kernel.optional_biz_params.clear if @kernel.optional_biz_params
|
|
185
186
|
end
|
|
187
|
+
|
|
188
|
+
def build_http_client(uri)
|
|
189
|
+
proxy_settings = http_proxy_settings
|
|
190
|
+
if proxy_settings
|
|
191
|
+
Net::HTTP.new(uri.host, uri.port, *proxy_settings)
|
|
192
|
+
else
|
|
193
|
+
Net::HTTP.new(uri.host, uri.port)
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def http_proxy_settings
|
|
198
|
+
raw_proxy = @kernel.get_config('httpProxy')
|
|
199
|
+
return nil if raw_proxy.nil? || raw_proxy.to_s.strip.empty?
|
|
200
|
+
|
|
201
|
+
proxy_uri = raw_proxy =~ %r{^https?://} ? URI(raw_proxy) : URI("http://#{raw_proxy}")
|
|
202
|
+
[proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password]
|
|
203
|
+
rescue URI::InvalidURIError
|
|
204
|
+
nil
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def ignore_ssl?
|
|
208
|
+
value = @kernel.get_config('ignoreSSL')
|
|
209
|
+
return false if value.nil?
|
|
210
|
+
|
|
211
|
+
value == true || value.to_s.strip.downcase == 'true'
|
|
212
|
+
end
|
|
186
213
|
end
|
|
187
214
|
end
|
|
188
215
|
end
|
|
@@ -36,7 +36,8 @@ module Alipay
|
|
|
36
36
|
sign = @kernel.sign(system_params, biz_params, text_params, @kernel.get_config('merchantPrivateKey'))
|
|
37
37
|
|
|
38
38
|
response = {
|
|
39
|
-
'body' => @kernel.generate_page('POST', system_params, biz_params, text_params, sign)
|
|
39
|
+
'body' => @kernel.generate_page('POST', system_params, biz_params, text_params, sign),
|
|
40
|
+
'payment_url' => @kernel.generate_payment_url(system_params, biz_params, text_params, sign)
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
Models::AlipayTradePagePayResponse.from_map(response)
|
|
@@ -4,11 +4,12 @@ module Alipay
|
|
|
4
4
|
module Page
|
|
5
5
|
module Models
|
|
6
6
|
class AlipayTradePagePayResponse
|
|
7
|
-
attr_accessor :body
|
|
7
|
+
attr_accessor :body, :payment_url
|
|
8
8
|
|
|
9
9
|
def self.from_map(response)
|
|
10
10
|
new.tap do |instance|
|
|
11
11
|
instance.body = response['body']
|
|
12
|
+
instance.payment_url = response['payment_url']
|
|
12
13
|
end
|
|
13
14
|
end
|
|
14
15
|
|
|
@@ -39,7 +39,8 @@ module Alipay
|
|
|
39
39
|
sign = @kernel.sign(system_params, biz_params, text_params, @kernel.get_config("merchantPrivateKey"))
|
|
40
40
|
|
|
41
41
|
response = {
|
|
42
|
-
"body" => @kernel.generate_page("POST", system_params, biz_params, text_params, sign)
|
|
42
|
+
"body" => @kernel.generate_page("POST", system_params, biz_params, text_params, sign),
|
|
43
|
+
"payment_url" => @kernel.generate_payment_url(system_params, biz_params, text_params, sign)
|
|
43
44
|
}
|
|
44
45
|
return Alipay::EasySDK::Payment::Wap::Models::AlipayTradeWapPayResponse.from_map(response)
|
|
45
46
|
end
|
|
@@ -4,11 +4,12 @@ module Alipay
|
|
|
4
4
|
module Wap
|
|
5
5
|
module Models
|
|
6
6
|
class AlipayTradeWapPayResponse
|
|
7
|
-
attr_accessor :body, :code, :sub_code
|
|
7
|
+
attr_accessor :body, :code, :sub_code, :payment_url
|
|
8
8
|
|
|
9
9
|
def self.from_map(response)
|
|
10
10
|
new.tap do |instance|
|
|
11
11
|
instance.body = response['body']
|
|
12
|
+
instance.payment_url = response['payment_url']
|
|
12
13
|
end
|
|
13
14
|
end
|
|
14
15
|
|
metadata
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: alipay-easysdk-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alipay EasySDK Team
|
|
8
|
+
autorequire:
|
|
8
9
|
bindir: exe
|
|
9
10
|
cert_chain: []
|
|
10
|
-
date:
|
|
11
|
+
date: 2025-10-28 00:00:00.000000000 Z
|
|
11
12
|
dependencies:
|
|
12
13
|
- !ruby/object:Gem::Dependency
|
|
13
14
|
name: bundler
|
|
@@ -75,6 +76,7 @@ files:
|
|
|
75
76
|
- README.md
|
|
76
77
|
- Rakefile
|
|
77
78
|
- examples/demo.rb
|
|
79
|
+
- examples/demo_with_get.rb
|
|
78
80
|
- examples/demo_with_post.rb
|
|
79
81
|
- lib/alipay/easysdk.rb
|
|
80
82
|
- lib/alipay/easysdk/kernel/alipay_constants.rb
|
|
@@ -110,6 +112,7 @@ metadata:
|
|
|
110
112
|
documentation_uri: https://github.com/gaozuo/alipay-easysdk-ruby/blob/main/README.md
|
|
111
113
|
bug_tracker_uri: https://github.com/gaozuo/alipay-easysdk-ruby/issues
|
|
112
114
|
wiki_uri: https://github.com/gaozuo/alipay-easysdk-ruby/wiki
|
|
115
|
+
post_install_message:
|
|
113
116
|
rdoc_options: []
|
|
114
117
|
require_paths:
|
|
115
118
|
- lib
|
|
@@ -124,7 +127,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
124
127
|
- !ruby/object:Gem::Version
|
|
125
128
|
version: '0'
|
|
126
129
|
requirements: []
|
|
127
|
-
rubygems_version: 3.
|
|
130
|
+
rubygems_version: 3.0.3.1
|
|
131
|
+
signing_key:
|
|
128
132
|
specification_version: 4
|
|
129
133
|
summary: 支付宝开放平台Alipay EasySDK的Ruby版本实现
|
|
130
134
|
test_files: []
|