paypal-sdk-rest 0.5.0
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 +15 -0
- data/Gemfile +12 -0
- data/README.md +136 -0
- data/Rakefile +9 -0
- data/lib/paypal-sdk-rest.rb +2 -0
- data/lib/paypal-sdk/rest.rb +38 -0
- data/lib/paypal-sdk/rest/api.rb +23 -0
- data/lib/paypal-sdk/rest/data_types.rb +420 -0
- data/lib/paypal-sdk/rest/error_hash.rb +39 -0
- data/lib/paypal-sdk/rest/get_api.rb +20 -0
- data/lib/paypal-sdk/rest/request_data_type.rb +56 -0
- data/lib/paypal-sdk/rest/set_api.rb +42 -0
- data/lib/paypal-sdk/rest/version.rb +7 -0
- data/lib/paypal.rb +5 -0
- data/spec/config/cacert.pem +171 -0
- data/spec/config/cert_key.pem +33 -0
- data/spec/config/paypal.yml +8 -0
- data/spec/log/http.log +0 -0
- data/spec/payments_examples_spec.rb +210 -0
- data/spec/spec_helper.rb +24 -0
- metadata +98 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
module PayPal
|
2
|
+
module SDK
|
3
|
+
module REST
|
4
|
+
class ErrorHash < Core::Util::OrderedHash
|
5
|
+
def self.convert(hash)
|
6
|
+
error_hash = new
|
7
|
+
hash.each{|key, value|
|
8
|
+
error_hash[key] = value
|
9
|
+
}
|
10
|
+
error_hash
|
11
|
+
end
|
12
|
+
|
13
|
+
def []=(key, value)
|
14
|
+
value =
|
15
|
+
if value.is_a? Hash
|
16
|
+
ErrorHash.convert(hash)
|
17
|
+
elsif value.is_a? Array and value[0].is_a? Hash
|
18
|
+
value.map{|array_value| ErrorHash.convert(array_value) }
|
19
|
+
else
|
20
|
+
value
|
21
|
+
end
|
22
|
+
super(key, value)
|
23
|
+
end
|
24
|
+
|
25
|
+
def [](name)
|
26
|
+
super(name.to_s) || super(name.to_sym)
|
27
|
+
end
|
28
|
+
|
29
|
+
def method_missing(name, *args)
|
30
|
+
if keys.include?(name) or keys.include?(name.to_s)
|
31
|
+
self[name]
|
32
|
+
else
|
33
|
+
super
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module PayPal
|
2
|
+
module SDK
|
3
|
+
module REST
|
4
|
+
module GetAPI
|
5
|
+
# Get API object
|
6
|
+
# === Example
|
7
|
+
# Payment.api
|
8
|
+
# payment.api
|
9
|
+
def api
|
10
|
+
@api || parent_api
|
11
|
+
end
|
12
|
+
|
13
|
+
# Parent API object
|
14
|
+
def parent_api
|
15
|
+
superclass.respond_to?(:api) ? superclass.api : RequestDataType.api
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module PayPal
|
2
|
+
module SDK
|
3
|
+
module REST
|
4
|
+
|
5
|
+
module RequestDataType
|
6
|
+
|
7
|
+
# Get a local API object or Class level API object
|
8
|
+
def api
|
9
|
+
@api || self.class.api
|
10
|
+
end
|
11
|
+
|
12
|
+
# Convert Hash object to ErrorHash object
|
13
|
+
def error=(hash)
|
14
|
+
@error =
|
15
|
+
if hash.is_a? Hash
|
16
|
+
ErrorHash.convert(hash)
|
17
|
+
else
|
18
|
+
hash
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class << self
|
23
|
+
# Global API object
|
24
|
+
# === Example
|
25
|
+
# RequestDataType.api
|
26
|
+
def api
|
27
|
+
@api ||= API.new
|
28
|
+
end
|
29
|
+
|
30
|
+
# Setter for RequestDataType.api
|
31
|
+
# === Example
|
32
|
+
# RequestDataType.set_config(..)
|
33
|
+
include SetAPI
|
34
|
+
|
35
|
+
# Configure depended module, when RequestDataType is include.
|
36
|
+
# === Example
|
37
|
+
# class Payment < DataTypes
|
38
|
+
# include RequestDataType
|
39
|
+
# end
|
40
|
+
# Payment.set_config(..)
|
41
|
+
# payment.set_config(..)
|
42
|
+
# Payment.api
|
43
|
+
# payment.api
|
44
|
+
def included(klass)
|
45
|
+
klass.class_eval do
|
46
|
+
extend GetAPI
|
47
|
+
extend SetAPI
|
48
|
+
include SetAPI
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module PayPal
|
2
|
+
module SDK
|
3
|
+
module REST
|
4
|
+
module SetAPI
|
5
|
+
# Set new api
|
6
|
+
# === Examples
|
7
|
+
# payment.set_config(:development)
|
8
|
+
# payment.set_config(:client_id => "XYZ", :client_secret => "SECRET")
|
9
|
+
# payment.set_config
|
10
|
+
# payment.api = API.new(:development)
|
11
|
+
def set_config(*args)
|
12
|
+
if args[0].is_a?(API)
|
13
|
+
@api = args[0]
|
14
|
+
else
|
15
|
+
@api ||= API.new({})
|
16
|
+
@api.set_config(*args) # Just override the configuration and Not
|
17
|
+
@api
|
18
|
+
end
|
19
|
+
end
|
20
|
+
alias_method :config=, :set_config
|
21
|
+
alias_method :set_api, :set_config
|
22
|
+
alias_method :api=, :set_config
|
23
|
+
|
24
|
+
# Override token
|
25
|
+
def token=(token)
|
26
|
+
set_config( :client_id => nil, :client_secret => nil ).token = token
|
27
|
+
end
|
28
|
+
alias_method :"auth=", :"token="
|
29
|
+
|
30
|
+
# Override client id
|
31
|
+
def client_id=(client_id)
|
32
|
+
set_config(:client_id => client_id).token = nil
|
33
|
+
end
|
34
|
+
|
35
|
+
# Override client secret
|
36
|
+
def client_secret=(client_secret)
|
37
|
+
set_config(:client_secret => client_secret).token = nil
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/paypal.rb
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
Verisign Class 3 Public Primary Certification Authority
|
2
|
+
=======================================================
|
3
|
+
-----BEGIN CERTIFICATE-----
|
4
|
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
|
5
|
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
6
|
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
|
7
|
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
8
|
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
9
|
+
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
10
|
+
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
11
|
+
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
|
12
|
+
TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
|
13
|
+
WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
|
14
|
+
Tqj/ZA1k
|
15
|
+
-----END CERTIFICATE-----
|
16
|
+
|
17
|
+
Verisign Class 3 Public Primary Certification Authority - G2
|
18
|
+
============================================================
|
19
|
+
-----BEGIN CERTIFICATE-----
|
20
|
+
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
21
|
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
22
|
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
23
|
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
24
|
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
25
|
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
26
|
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
27
|
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
28
|
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
|
29
|
+
FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
|
30
|
+
lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
|
31
|
+
MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
|
32
|
+
1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
|
33
|
+
Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
|
34
|
+
-----END CERTIFICATE-----
|
35
|
+
|
36
|
+
|
37
|
+
Verisign Class 3 Public Primary Certification Authority - G3
|
38
|
+
============================================================
|
39
|
+
-----BEGIN CERTIFICATE-----
|
40
|
+
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
41
|
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
42
|
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
43
|
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
44
|
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
45
|
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
46
|
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
47
|
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
|
48
|
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
49
|
+
ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
|
50
|
+
EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
|
51
|
+
cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
|
52
|
+
EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
|
53
|
+
055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
54
|
+
ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
|
55
|
+
j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
56
|
+
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
|
57
|
+
xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
|
58
|
+
t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
59
|
+
-----END CERTIFICATE-----
|
60
|
+
|
61
|
+
Verisign Class 4 Public Primary Certification Authority - G3
|
62
|
+
============================================================
|
63
|
+
-----BEGIN CERTIFICATE-----
|
64
|
+
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
65
|
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
66
|
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
67
|
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
68
|
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
69
|
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
70
|
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
71
|
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
|
72
|
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
73
|
+
ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
|
74
|
+
tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
|
75
|
+
8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
|
76
|
+
Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
|
77
|
+
Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
78
|
+
j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
|
79
|
+
mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
|
80
|
+
fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
|
81
|
+
RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
|
82
|
+
UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
|
83
|
+
-----END CERTIFICATE-----
|
84
|
+
VeriSign Class 3 Public Primary Certification Authority - G5
|
85
|
+
============================================================
|
86
|
+
-----BEGIN CERTIFICATE-----
|
87
|
+
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
|
88
|
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
89
|
+
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
90
|
+
IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
|
91
|
+
ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
|
92
|
+
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
|
93
|
+
biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
|
94
|
+
dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
|
95
|
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
96
|
+
ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
|
97
|
+
j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
|
98
|
+
Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
|
99
|
+
Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
|
100
|
+
fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
|
101
|
+
BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
|
102
|
+
Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
103
|
+
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
|
104
|
+
SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
|
105
|
+
X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
|
106
|
+
KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
|
107
|
+
Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
|
108
|
+
ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
109
|
+
-----END CERTIFICATE-----
|
110
|
+
VeriSign Universal Root Certification Authority
|
111
|
+
===============================================
|
112
|
+
-----BEGIN CERTIFICATE-----
|
113
|
+
MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
|
114
|
+
BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
|
115
|
+
ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
|
116
|
+
IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
|
117
|
+
IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
|
118
|
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
119
|
+
cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
120
|
+
IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
|
121
|
+
aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
|
122
|
+
1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
|
123
|
+
MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
|
124
|
+
9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
|
125
|
+
AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
|
126
|
+
tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
|
127
|
+
CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
|
128
|
+
a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
|
129
|
+
DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
|
130
|
+
Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
|
131
|
+
Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
|
132
|
+
P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
|
133
|
+
wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
|
134
|
+
mJO37M2CYfE45k+XmCpajQ==
|
135
|
+
-----END CERTIFICATE-----
|
136
|
+
|
137
|
+
VeriSign Class 3 Public Primary Certification Authority - G4
|
138
|
+
============================================================
|
139
|
+
-----BEGIN CERTIFICATE-----
|
140
|
+
MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
|
141
|
+
VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
|
142
|
+
b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
|
143
|
+
ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
|
144
|
+
YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
|
145
|
+
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
|
146
|
+
cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
|
147
|
+
b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
148
|
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
|
149
|
+
Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
|
150
|
+
rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
|
151
|
+
/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
|
152
|
+
HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
|
153
|
+
Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
|
154
|
+
A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
|
155
|
+
AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
|
156
|
+
-----END CERTIFICATE-----
|
157
|
+
Verisign Class 3 Public Primary Certification Authority
|
158
|
+
=======================================================
|
159
|
+
-----BEGIN CERTIFICATE-----
|
160
|
+
MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
|
161
|
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
162
|
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
|
163
|
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
164
|
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
165
|
+
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
166
|
+
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
167
|
+
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
|
168
|
+
CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
|
169
|
+
bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
|
170
|
+
D/xwzoiQ
|
171
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,33 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIICXAIBAAKBgQCx/rJhKDRYhs9WZj66FA+HidsrKwvep3g+YNbm1fXmjcg2rEmC
|
3
|
+
kq71+Ftw9rx0Uz7vmg6vcsASUgOyeNG7mVB1SsXc6j+JAzZsmpzxHI0QKm+nBNTS
|
4
|
+
OAp5NWn6NZQfu3BNAJ/Mok/iL3am2DWXV6dU74J66rBpwIJfzs9kmw8ZGwIDAQAB
|
5
|
+
AoGAa/V1sCQ4i7FItLjTNv3P5X+h5W74hhXBguQttFj2Ct7YHwEknQPnBt2aaMve
|
6
|
+
xhdvxtgELDpHcVU5VNifLU/yUg3+DSr/YkpBWOcNTCt1seW/z5s+jr2fQERQKbyf
|
7
|
+
SXWMTqwrQ19iQoCPYaj7Drf68JhksQCaYN650g7+B/QmSBECQQDp6r75fzDtEWrr
|
8
|
+
O4Sl9plK6CRLqQQ3LveAw4JV31N2UAqgAYtzRqD6K+SviAVtX9xxuv983qQxsfX4
|
9
|
+
ozE9sGXPAkEAwsxwR1s2Acuy10h3Xj6VtnFB3PpUrkSI9c9ZxF4CMf/+AS/b2UEe
|
10
|
+
QhH60WHY8ccgKT/DoPWBcEu2o0f9nPw29QJBAI480zHNeMe/Hp+5iliM0fvtmxxy
|
11
|
+
wwB3S8L9n4RuD0dTNpLDPbO0D/DvvdhKwtoWP2rcxbx9eaRKTYKKYUfcupsCQAkP
|
12
|
+
SQmIjHJ47tBkZmjTsFLT4aRNYDLarSQBiMNBPAjnRwD3INpx1N5tx6SFUHmuMSi5
|
13
|
+
9nc9888tNklRx9HNSSECQHgs9ExBpA6WbRVcgiizOKH7fmNxAB5f6TQ2W1QHMUb+
|
14
|
+
UhZpwuDelOIfzJAQUZGTZk8a8uVmyXU5hTf3ZDbrnJ8=
|
15
|
+
-----END RSA PRIVATE KEY-----
|
16
|
+
|
17
|
+
-----BEGIN CERTIFICATE-----
|
18
|
+
MIICpjCCAg+gAwIBAgIDD96nMA0GCSqGSIb3DQEBBQUAMIGfMQswCQYDVQQGEwJV
|
19
|
+
UzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8GA1UEBxMIU2FuIEpvc2UxFTATBgNV
|
20
|
+
BAoTDFBheVBhbCwgSW5jLjEWMBQGA1UECxQNc2FuZGJveF9jZXJ0czEbMBkGA1UE
|
21
|
+
AxQSc2FuZGJveF9jYW1lcmNoYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwu
|
22
|
+
Y29tMB4XDTA5MTAxNTA2Mzg1N1oXDTE5MTAxMzA2Mzg1N1owgYAxLTArBgNVBAMU
|
23
|
+
JHBsYXRmb18xMjU1MTcwNjk0X2Jpel9hcGkxLmdtYWlsLmNvbTEiMCAGA1UEChMZ
|
24
|
+
cGxhdGZvcm0gc2RrJ3MgVGVzdCBTdG9yZTERMA8GA1UEBxMIU2FuIEpvc2UxCzAJ
|
25
|
+
BgNVBAgTAkNBMQswCQYDVQQGEwJVUzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
|
26
|
+
gYEAsf6yYSg0WIbPVmY+uhQPh4nbKysL3qd4PmDW5tX15o3INqxJgpKu9fhbcPa8
|
27
|
+
dFM+75oOr3LAElIDsnjRu5lQdUrF3Oo/iQM2bJqc8RyNECpvpwTU0jgKeTVp+jWU
|
28
|
+
H7twTQCfzKJP4i92ptg1l1enVO+CeuqwacCCX87PZJsPGRsCAwEAAaMNMAswCQYD
|
29
|
+
VR0TBAIwADANBgkqhkiG9w0BAQUFAAOBgQCgH3kwXMJtcAaCBQLKz5TGFogJp/C3
|
30
|
+
06MvjYzdbDrx9Rjf/252UhD8dMPUP5FhU1KXduL+KIEYawPbDQ9+lV58JgM12R0p
|
31
|
+
EhCODDI/lDvzbfxUnYgkJ5cnFhTZpcAqVzWuinUnG8jAL9XKiEyu/C73ePMPWPbt
|
32
|
+
otoWi+Tk828Qlw==
|
33
|
+
-----END CERTIFICATE-----
|
data/spec/log/http.log
ADDED
File without changes
|
@@ -0,0 +1,210 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Payments" do
|
4
|
+
|
5
|
+
PaymentAttributes = {
|
6
|
+
"intent" => "sale",
|
7
|
+
"payer" => {
|
8
|
+
"payment_method" => "credit_card",
|
9
|
+
"funding_instruments" => [ {
|
10
|
+
"credit_card" => {
|
11
|
+
"type" => "visa",
|
12
|
+
"number" => "4417119669820331",
|
13
|
+
"expire_month" => "11", "expire_year" => "2018",
|
14
|
+
"cvv2" => "874",
|
15
|
+
"first_name" => "Joe", "last_name" => "Shopper",
|
16
|
+
"billing_address" => {
|
17
|
+
"line1" => "52 N Main ST",
|
18
|
+
"city" => "Johnstown",
|
19
|
+
"state" => "OH",
|
20
|
+
"postal_code" => "43210", "country_code" => "US" } } } ] },
|
21
|
+
"transactions" => [ {
|
22
|
+
"amount" => {
|
23
|
+
"total" => "1.00",
|
24
|
+
"currency" => "USD" },
|
25
|
+
"description" => "This is the payment transaction description." } ] }
|
26
|
+
|
27
|
+
|
28
|
+
describe "Examples" do
|
29
|
+
describe "REST" do
|
30
|
+
it "Modifiy global configuration" do
|
31
|
+
backup_config = PayPal::SDK::REST.api.config
|
32
|
+
PayPal::SDK::REST.set_config( :client_id => "XYZ" )
|
33
|
+
PayPal::SDK::REST.api.config.client_id.should eql "XYZ"
|
34
|
+
PayPal::SDK::REST.set_config(backup_config)
|
35
|
+
PayPal::SDK::REST.api.config.client_id.should_not eql "XYZ"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "Payment" do
|
40
|
+
it "Create" do
|
41
|
+
payment = Payment.new(PaymentAttributes)
|
42
|
+
# Create
|
43
|
+
payment.create
|
44
|
+
payment.error.should be_nil
|
45
|
+
payment.id.should_not be_nil
|
46
|
+
end
|
47
|
+
|
48
|
+
it "Create with request_id" do
|
49
|
+
payment = Payment.new(PaymentAttributes)
|
50
|
+
payment.create
|
51
|
+
payment.error.should be_nil
|
52
|
+
|
53
|
+
request_id = payment.request_id
|
54
|
+
|
55
|
+
new_payment = Payment.new(PaymentAttributes.merge( :request_id => request_id ))
|
56
|
+
new_payment.create
|
57
|
+
new_payment.error.should be_nil
|
58
|
+
|
59
|
+
payment.id.should eql new_payment.id
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
it "Create with token" do
|
64
|
+
api = API.new
|
65
|
+
payment = Payment.new(PaymentAttributes.merge( :token => api.token ))
|
66
|
+
Payment.api.should_not eql payment.api
|
67
|
+
payment.create
|
68
|
+
payment.error.should be_nil
|
69
|
+
payment.id.should_not be_nil
|
70
|
+
end
|
71
|
+
|
72
|
+
it "Create with client_id and client_secret" do
|
73
|
+
api = API.new
|
74
|
+
payment = Payment.new(PaymentAttributes.merge( :client_id => api.config.client_id, :client_secret => api.config.client_secret))
|
75
|
+
Payment.api.should_not eql payment.api
|
76
|
+
payment.create
|
77
|
+
payment.error.should be_nil
|
78
|
+
payment.id.should_not be_nil
|
79
|
+
end
|
80
|
+
|
81
|
+
it "List" do
|
82
|
+
payment_history = Payment.all( "count" => 5 )
|
83
|
+
payment_history.error.should be_nil
|
84
|
+
payment_history.count.should eql 5
|
85
|
+
end
|
86
|
+
|
87
|
+
it "Find" do
|
88
|
+
payment_history = Payment.all( "count" => 1 )
|
89
|
+
payment = Payment.find(payment_history.payments[0].id)
|
90
|
+
payment.error.should be_nil
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "Validation" do
|
94
|
+
|
95
|
+
it "Create with empty values" do
|
96
|
+
payment = Payment.new
|
97
|
+
payment.create.should be_false
|
98
|
+
end
|
99
|
+
|
100
|
+
it "Find with invalid ID" do
|
101
|
+
lambda {
|
102
|
+
payment = Payment.find("Invalid")
|
103
|
+
}.should raise_error PayPal::SDK::Core::Exceptions::ResourceNotFound
|
104
|
+
end
|
105
|
+
|
106
|
+
it "Find with nil" do
|
107
|
+
lambda{
|
108
|
+
payment = Payment.find(nil)
|
109
|
+
}.should raise_error ArgumentError
|
110
|
+
end
|
111
|
+
|
112
|
+
it "Find with empty string" do
|
113
|
+
lambda{
|
114
|
+
payment = Payment.find("")
|
115
|
+
}.should raise_error ArgumentError
|
116
|
+
end
|
117
|
+
|
118
|
+
it "Find record with expired token" do
|
119
|
+
lambda {
|
120
|
+
Payment.api.token
|
121
|
+
Payment.api.token.sub!(/^/, "Expired")
|
122
|
+
Payment.all(:count => 1)
|
123
|
+
}.should_not raise_error
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "instance method" do
|
128
|
+
|
129
|
+
it "Execute" do
|
130
|
+
payment = Payment.find("PAY-6BL56416NR538963NKE3QC5Q")
|
131
|
+
payment.execute( :payer_id => "HZH2W8NPXUE5W" )
|
132
|
+
# payment.error.should be_nil
|
133
|
+
pending "Test with capybara"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
describe "Sale" do
|
140
|
+
before :each do
|
141
|
+
@payment = Payment.new(PaymentAttributes)
|
142
|
+
@payment.create
|
143
|
+
@payment.should be_success
|
144
|
+
end
|
145
|
+
|
146
|
+
it "Find" do
|
147
|
+
sale = Sale.find(@payment.transactions[0].related_resources[0].sale.id)
|
148
|
+
sale.error.should be_nil
|
149
|
+
sale.should be_a Sale
|
150
|
+
end
|
151
|
+
|
152
|
+
describe "instance method" do
|
153
|
+
it "Refund" do
|
154
|
+
sale = @payment.transactions[0].related_resources[0].sale
|
155
|
+
refund = sale.refund( :amount => { :total => "1.00", :currency => "USD" } )
|
156
|
+
refund.error.should be_nil
|
157
|
+
|
158
|
+
refund = Refund.find(refund.id)
|
159
|
+
refund.error.should be_nil
|
160
|
+
refund.should be_a Refund
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe "CreditCard" do
|
166
|
+
it "Create" do
|
167
|
+
credit_card = CreditCard.new({
|
168
|
+
"type" => "visa",
|
169
|
+
"number" => "4417119669820331",
|
170
|
+
"expire_month" => "11", "expire_year" => "2018",
|
171
|
+
"cvv2" => "874",
|
172
|
+
"first_name" => "Joe", "last_name" => "Shopper",
|
173
|
+
"billing_address" => {
|
174
|
+
"line1" => "52 N Main ST",
|
175
|
+
"city" => "Johnstown",
|
176
|
+
"state" => "OH",
|
177
|
+
"postal_code" => "43210", "country_code" => "US" }})
|
178
|
+
credit_card.create
|
179
|
+
credit_card.error.should be_nil
|
180
|
+
credit_card.id.should_not be_nil
|
181
|
+
|
182
|
+
credit_card = CreditCard.find(credit_card.id)
|
183
|
+
credit_card.should be_a CreditCard
|
184
|
+
credit_card.error.should be_nil
|
185
|
+
end
|
186
|
+
|
187
|
+
describe "Validation" do
|
188
|
+
it "Create" do
|
189
|
+
credit_card = CreditCard.new({
|
190
|
+
"type" => "visa",
|
191
|
+
"number" => "4111111111111111" })
|
192
|
+
credit_card.create
|
193
|
+
credit_card.error.should_not be_nil
|
194
|
+
|
195
|
+
credit_card.error.name.should eql "VALIDATION_ERROR"
|
196
|
+
credit_card.error["name"].should eql "VALIDATION_ERROR"
|
197
|
+
|
198
|
+
credit_card.error.details[0].field.should eql "expire_year"
|
199
|
+
credit_card.error.details[0].issue.should eql "Required field missing"
|
200
|
+
credit_card.error.details[1].field.should eql "expire_month"
|
201
|
+
credit_card.error.details[1].issue.should eql "Required field missing"
|
202
|
+
|
203
|
+
credit_card.error["details"][0]["issue"].should eql "Required field missing"
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
end
|
208
|
+
|
209
|
+
end
|
210
|
+
end
|