@@ -31,12 +31,15 @@ class PayPalConfig(object):
31
31
# Various API servers.
32
32
_API_ENDPOINTS = {
33
33
# In most cases, you want 3-Token. There's also Certificate-based
34
- # authentication, which uses different servers, but that's not
35
- # implemented.
34
+ # authentication, which uses different servers.
36
35
'3TOKEN' : {
37
36
'SANDBOX' : 'https://api-3t.sandbox.paypal.com/nvp' ,
38
37
'PRODUCTION' : 'https://api-3t.paypal.com/nvp' ,
39
- }
38
+ },
39
+ 'CERTIFICATE' : {
40
+ 'SANDBOX' : 'https://api.sandbox.paypal.com/nvp' ,
41
+ 'PRODUCTION' : 'https://api.paypal.com/nvp' ,
42
+ },
40
43
}
41
44
42
45
_PAYPAL_URL_BASE = {
@@ -55,6 +58,10 @@ class PayPalConfig(object):
55
58
API_PASSWORD = None
56
59
API_SIGNATURE = None
57
60
61
+ # CERTIFICATE credentials
62
+ API_CERTIFICATE_FILENAME = None
63
+ API_KEY_FILENAME = None
64
+
58
65
# API Endpoints are just API server addresses.
59
66
API_ENDPOINT = None
60
67
PAYPAL_URL_BASE = None
@@ -116,9 +123,15 @@ def __init__(self, **kwargs):
116
123
# A CA Cert path was specified, but it's invalid.
117
124
raise PayPalConfigError ('Invalid API_CA_CERTS' )
118
125
119
- # set the 3TOKEN required fields
120
- if self .API_AUTHENTICATION_MODE == '3TOKEN' :
121
- for arg in ('API_USERNAME' , 'API_PASSWORD' , 'API_SIGNATURE' ):
126
+ # check authentication fields
127
+ if self .API_AUTHENTICATION_MODE in ('3TOKEN' , 'CERTIFICATE' ):
128
+ auth_args = ['API_USERNAME' , 'API_PASSWORD' ]
129
+ if self .API_AUTHENTICATION_MODE == '3TOKEN' :
130
+ auth_args .append ('API_SIGNATURE' )
131
+ elif self .API_AUTHENTICATION_MODE == 'CERTIFICATE' :
132
+ auth_args .extend (['API_CERTIFICATE_FILENAME' , 'API_KEY_FILENAME' ])
133
+
134
+ for arg in auth_args :
122
135
if arg not in kwargs :
123
136
raise PayPalConfigError ('Missing in PayPalConfig: %s ' % arg )
124
137
setattr (self , arg , kwargs [arg ])
0 commit comments