Не могу декодировать base64 Post запрос в набор параметров
Пытаюсь подключить платежный сервис paysera и настроить прием платежей на сайте. При успешном платеже летит запрос типа такого:
{'data': 'b3JkZXJpZD05JmFtb3VudD0xMDAwJmN1cnJlbmN5PUVVUiZjb3VudHJ5PUxUJnRlc3Q9MSZ2ZXJzaW9uPTEuNiZwcm9qZWN0aWQ9MTg4MTc3Jm9yaWdpbmFsX3BheXRleHQ9Jmxhbmc9cnVzJnBheW1lbnQ9aGFuemEmcGF5dGV4dD0lRDAlOTclRDAlQjAlRDAlQkElRDAlQjAlRDAlQjcrJUUyJTg0JTk2OSslRDAlQjIrJUQwJUJGJUQxJTgwJUQwJUJFJUQwJUI1JUQwJUJBJUQxJTgyJUQwJUI1K2h0dHBzJTNBJTJGJTJGYmFja3dheWNhcmdvLmNvbS4rJTI4JUQwJTlGJUQxJTgwJUQwJUJFJUQwJUI0JUQwJUIwJUQwJUIyJUQwJUI1JUQxJTg2JTNBK0JBQ0tXQVkrU09MVVRJT05TJTI5JnBfZW1haWw9c3VwcG9ydCU0MHdlYi1zZW8udG9wJm1fcGF5X3Jlc3RvcmVkPTQwMTk2ODI3MSZ0cmllZF9jaGFuZ2luZ19lbWFpbD0xJmZyYW1lPTAmc3RhdHVzPTEmcmVxdWVzdGlkPTQwMTk2ODI3MSZuYW1lPU5hbWUmc3VyZW5hbWU9TGFzdCtuYW1lJnBheWFtb3VudD0xMDAwJnBheWN1cnJlbmN5PUVVUiZhY2NvdW50PVRFU1QxMjM0NTY3ODkw', 'ss1': '0f7ec83a3eaa388095073416b7531002', 'ss2': 'Fca3droHAE2RxhD3paPeUaYpIg7NLPDg5WIr4L-d7Wm4dA9juurqYdu7yhbWp2fgXOX8O2IeNaR8v9lwEOnkNHAQOD5ehKoCrxswic8GzEHNNrNvJiRvnn1Ue3DWjYdyynLKlz9ZDacOG37sGykkN7XP-B8o_VkEkhtPoBTTW3c='}
data, ss1, ss2 это закодированные в base64 параметры. У меня получилось его декодировать с помощью base64
data= string['data']
data = data.replace('-', '+')
data = data.replace('_', '/')
a = base64.b64decode(data)
b'orderid=9&amount=1000¤cy=EUR&country=LT&test=1&version=1.6&projectid=188177&original_paytext=&lang=rus&payment=hanza&paytext=%D0%97%D0%B0%D0%BA%D0%B0%D0%B7+%E2%84%969+%D0%B2+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B5+https%3A%2F%2Fbackwaycargo.com.+%28%D0%9F%D1%80%D0%BE%D0%B4%D0%B0%D0%B2%D0%B5%D1%86%3A+BACKWAY+SOLUTIONS%29&p_email=support%40web-seo.top&m_pay_restored=401968271&tried_changing_email=1&frame=0&status=1&requestid=401968271&name=Name&surename=Last+name&payamount=1000&paycurrency=EUR&account=TEST1234567890'
Но при попытке разобрать получившуюся строку на параметры для заполнения базы получаю ошибку:
decoded = base64.b64decode(data)
parsed = urllib.parse.parse_qs(decoded)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
Буду рад любому совету
Ответы (2 шт):
это возникает из-за того что в paytext русские буквы.
Просто декодрируйте строку байтов с кодировкой ascii
import base64
import urllib.parse
string = {'data': 'b3JkZXJpZD05JmFtb3VudD0xMDAwJmN1cnJlbmN5PUVVUiZjb3VudHJ5PUxUJnRlc3Q9MSZ2ZXJzaW9uPTEuNiZwcm9qZWN0aWQ9MTg4MTc3Jm9yaWdpbmFsX3BheXRleHQ9Jmxhbmc9cnVzJnBheW1lbnQ9aGFuemEmcGF5dGV4dD0lRDAlOTclRDAlQjAlRDAlQkElRDAlQjAlRDAlQjcrJUUyJTg0JTk2OSslRDAlQjIrJUQwJUJGJUQxJTgwJUQwJUJFJUQwJUI1JUQwJUJBJUQxJTgyJUQwJUI1K2h0dHBzJTNBJTJGJTJGYmFja3dheWNhcmdvLmNvbS4rJTI4JUQwJTlGJUQxJTgwJUQwJUJFJUQwJUI0JUQwJUIwJUQwJUIyJUQwJUI1JUQxJTg2JTNBK0JBQ0tXQVkrU09MVVRJT05TJTI5JnBfZW1haWw9c3VwcG9ydCU0MHdlYi1zZW8udG9wJm1fcGF5X3Jlc3RvcmVkPTQwMTk2ODI3MSZ0cmllZF9jaGFuZ2luZ19lbWFpbD0xJmZyYW1lPTAmc3RhdHVzPTEmcmVxdWVzdGlkPTQwMTk2ODI3MSZuYW1lPU5hbWUmc3VyZW5hbWU9TGFzdCtuYW1lJnBheWFtb3VudD0xMDAwJnBheWN1cnJlbmN5PUVVUiZhY2NvdW50PVRFU1QxMjM0NTY3ODkw', 'ss1': '0f7ec83a3eaa388095073416b7531002', 'ss2': 'Fca3droHAE2RxhD3paPeUaYpIg7NLPDg5WIr4L-d7Wm4dA9juurqYdu7yhbWp2fgXOX8O2IeNaR8v9lwEOnkNHAQOD5ehKoCrxswic8GzEHNNrNvJiRvnn1Ue3DWjYdyynLKlz9ZDacOG37sGykkN7XP-B8o_VkEkhtPoBTTW3c='}
data= string['data']
data = data.replace('-', '+')
data = data.replace('_', '/')
decoded = base64.b64decode(data)
parsed = urllib.parse.parse_qs(decoded.decode('ascii'))
print(parsed)
вывод
{'orderid': ['9'], 'amount': ['1000'], 'currency': ['EUR'], 'country': ['LT'], 'test': ['1'], 'version': ['1.6'], 'projectid': ['188177'], 'lang': ['rus'], 'payment': ['hanza'], 'paytext': ['Заказ №9 в проекте https://***********.com. (Продавец: ********)'], 'p_email': ['[email protected]'], 'm_pay_restored': ['401968271'], 'tried_changing_email': ['1'], 'frame': ['0'], 'status': ['1'], 'requestid': ['401968271'], 'name': ['Name'], 'surename': ['Last name'], 'payamount': ['1000'], 'paycurrency': ['EUR'], 'account': ['TEST1234567890']}
Нужно предварительно вызвать decode:
s = b'orderid=9&amount=1000¤cy=EUR&country=LT&test=1&version=1.6&projectid=188177&original_paytext=&lang=rus&payment=hanza&paytext=%D0%97%D0%B0%D0%BA%D0%B0%D0%B7+%E2%84%969+%D0%B2+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B5+https%3A%2F%2Fbackwaycargo.com.+%28%D0%9F%D1%80%D0%BE%D0%B4%D0%B0%D0%B2%D0%B5%D1%86%3A+BACKWAY+SOLUTIONS%29&p_email=support%40web-seo.top&m_pay_restored=401968271&tried_changing_email=1&frame=0&status=1&requestid=401968271&name=Name&surename=Last+name&payamount=1000&paycurrency=EUR&account=TEST1234567890'
urllib.parse.parse_qs(s.decode('utf-8'))