Ошибка PayPal 10002 с использованием API разрешений и TransactionSearch
У меня есть запрос на разрешение, который выглядит следующим образом:
timestamp, signature = genPermissionsAuthHeader.getAuthHeader(str(self.username), str(self.password), str(access_token), str(token_secret), "POST", "https://api-3t.sandbox.paypal.com/nvp") # https://svcs.sandbox.paypal.com/Permissions/GetBasicPersonalData
log.info(timestamp)
log.info(signature)
authorization_header = "timestamp=" + timestamp + ",token=" + access_token + ",signature=" + signature
log.info(authorization_header)
headers = {
"X-PAYPAL-AUTHORIZATION": authorization_header,
}
url = "https://api-3t.sandbox.paypal.com/nvp"
nvp_params = {
"METHOD": "TransactionSearch",
"STARTDATE": "2012-01-01T05:38:48Z",
}
r = requests.post(url, data=nvp_params, headers=headers)
log.info(r.text)
self.response.content_disposition = "text/html"
self.response.write(r.text)
У меня есть токен доступа и секрет токена из API разрешений, использующий мои учетные данные PayPal на developer.paypal.com в разделе "Учетные записи в песочнице"
Когда я запускаю этот метод, я получаю сообщение об ошибке:
TIMESTAMP=2014%2d04%2d21T22%3a50%3a18Z&CORRELATIONID=c8f9212035b60
&ACK=Failure&VERSION=0%2e000000&BUILD=10277387&L_ERRORCODE0=10002
&L_SHORTMESSAGE0=Authentication%2f
Authorization%20Faile
d&L_LONGMESSAGE0=You%20do%20not%20have%20permissions%20to%20make%20this%20API%20call
&L_SEVERITYCODE0=ErrorNone
Я могу позвонить в GetBasicPersonalDetails, и это похоже на работу. Любая помощь будет отличной, спасибо!
3 ответа
Я нашел ответ, мне не хватало параметра "SUBJECT" в строке параметров, отправляемых для оплаты. Так что на случай, если кто-нибудь еще столкнется с этим в будущем, полный код после получения токенов разрешений для запуска тестовой оплаты для песочницы:
def test_sales(self, access_token=None, token_secret=None):
timestamp, signature = genPermissionsAuthHeader.getAuthHeader(str(self.username), str(self.password), str(access_token), str(token_secret), "POST", "https://api-3t.sandbox.paypal.com/nvp") # https://svcs.sandbox.paypal.com/Permissions/GetBasicPersonalData
log.info(timestamp)
log.info(signature)
authorization_header = "timestamp=" + timestamp + ",token=" + access_token + ",signature=" + signature
log.info(authorization_header)
headers = {
"X-PAYPAL-AUTHORIZATION": authorization_header,
}
url = "https://api-3t.sandbox.paypal.com/nvp"
nvp_params = {
"METHOD": "DoDirectPayment",
"PAYMENTACTION": "Sale",
"AMT": "22.00",
"ACCT": "4111111111111111",
"CVV2": "111",
"FIRSTNAME": "Jane",
"LASTNAME": "Smith",
"EXPDATE": "012018",
"IPADDRESS": "127.0.0.1",
"STREET": "123 Street Way",
"CITY": "Englewood",
"STATE": "CO",
"ZIP": "80112",
"VERSION": "86",
"SIGNATURE": self.signature,
"USER": self.username,
"PWD": self.password,
"SUBJECT": "person_who_you_acting_on_behalf_of@domain.com"
}
r = requests.post(url, data=nvp_params, headers=headers)
log.info("Search transaction\n\n" + r.text + "\n\n")
self.response.content_disposition = "text/html"
self.response.write(urllib.unquote(r.text).decode('utf8'))
И для генерации заголовка я использовал: https://github.com/paypal/python-signature-generator-for-authentication-header
Надеюсь, это поможет кому-то, спасибо!
TransactionSearch не является частью API AdaptivePayments, поэтому для этого метода не требуется "X-PAYPAL-AUTHORIZATION". Предполагая, что вы получили разрешение для метода TransactionSearch для целевой учетной записи (см. https://developer.paypal.com/docs/classic/permissions-service/gs_PermissionsService/), будет работать следующий код:
import requests
api_username="username"
api_password="password"
api_signature="signature"
target_account_email="xxx.yyy-buyer@zzz.com" #customers email
data_req = {
'METHOD':'TransactionSearch',
'SUBJECT':, target_account_email,
'VERSION':'86.0',
'STARTDATE':'2009-10-11T00:00:00Z',
'USER':api_username,
'PWD':api_password,
'SIGNATURE':api_signature
}
response=requests.post(url_en_point,data=data_req,timeout=3).text
print response
Вот некоторая информация о сообщении об ошибке, которое вы получаете. Одна из причин - неверные учетные данные API. Другая возможность - вы пытаетесь передать просроченный токен. После создания транзакции в PayPal токен больше не действует. Вместо этого вы создали идентификатор транзакции.
Ниже приведена дополнительная информация о сообщениях об ошибках PayPal API.
Сообщения об ошибках PayPal API
Если вы пытаетесь найти транзакцию для своих последних транзакций в PayPal, то вы можете использовать API PaymentDetailsRequest
Вот руководство по интеграции с сайта разработчиков PayPal: