Проверка IPN Paypal в Джанго - PullRequest
1 голос
/ 07 марта 2012

У меня проблемы с юникодом при проверке запроса IPN.

Я использую следующую функцию для проверки запроса.

def verify(self):
    parameters = self.params
    parameters['cmd'] = '_notify-validate'
    parameters = urllib.urlencode(dict([(k, v.encode(parameters['charset'])) for k, v in parameters.items()]) )
    return self.call_paypal(parameters) == 'VERIFIED'

self.parmas - это request.POST, и это вызываетследующая ошибка:

UnicodeEncodeError: 'charmap' codec can't encode character u'\ufffd' in position 1: character maps to <undefined>

Дамп сообщения можно найти здесь: http://pastebin.com/sd2iwu41

Я нахожу странным, что есть ошибка кодирования, так как я использую ту же кодировку PayPalотправляет мне.

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Если ваш parameters объект является Django QueryDict, на нем уже есть очень удобный метод urlencode () .Вместо этого попробуйте что-то вроде этого:

parameters = request.POST.copy()
parameters['cmd']='_notify-validate'
return self.call_paypal(parameters.urlencode()) == 'VERIFIED'

Требуется copy () , потому что QueryDict из объекта request только для чтения.Вызов copy() делает изменчивую глубокую копию, которую вы можете изменить.

Я делаю что-то подобное в моем приложении Paypal IPN, и оно работает некоторое время.

0 голосов
/ 07 марта 2012

Поскольку ваш self.params содержит некоторые символы, не входящие в ASCII, вы должны закодировать его в UTF-8, прежде чем переходить к urllib.urlencode. Посмотрите на этот ответ , объясняется, как передать параметры urlencode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...