python-pagseguro
python-pagseguro copied to clipboard
Url de notificação não funciona para Assinaturas
Utilizando a versão 0.2.1 da biblioteca, nem a url de redirecionamento, nem a url de notificação funciona para assinaturas.
A princípio pensei que o problema estava relacionado a minha url, por que estava direcionando para uma porta do meu computador, mas agora fiz o mesmo teste em um novo servidor, e não funcionou
@rodfersou vc tem como colocar a url que foi gerada, ou pelo menos uma parte dela so para verificar se tem algo errado na montagem da url
@rochacbruno lendo a documentação, descobri que o problema estava no método que estou usando para criar a subscrição da assinatura.
Corrigi com um monkey patch:
# -*- coding: utf-8 -*-
from pagseguro import logger
from pagseguro import PagSeguro
from pagseguro.configs import Config
from pagseguro.configs import ConfigSandbox
from pagseguro.utils import parse_date
class PagSeguroPreApprovalResponse:
def __init__(self, xml, config=None):
self.xml = xml
self.config = config or {}
self.code = None
self.date = None
self.errors = None
self.payment_url = None
self.payment_link = None
self.transaction = None
logger.debug(self.__dict__)
self.parse_xml(xml)
def parse_xml(self, xml):
""" parse returned data """
try:
parsed = xmltodict.parse(xml, encoding='iso-8859-1')
except Exception as e:
logger.debug(
'Cannot parse the returned xml \'{0}\' -> \'{1}\''.format(xml, e))
parsed = {}
if 'errors' in parsed:
self.errors = parsed['errors']['error']
return
checkout = parsed.get('preApprovalRequest', {})
self.code = checkout.get('code')
self.date = parse_date(checkout.get('date'))
self.payment_url = self.config.PRE_APPROVAL_PAYMENT_URL % self.code
# this is used only for transparent checkout process
self.transaction = parsed.get('transaction', {})
self.payment_link = self.transaction.get('paymentLink')
def pre_approval_ask_payment(self, **kwargs):
""" create a pagseguro pre approval subscription """
self.data['currency'] = self.config.CURRENCY
self.build_checkout_params(**kwargs)
response = self.post(url=self.config.PRE_APPROVAL_URL)
return PagSeguroPreApprovalResponse(response.content, config=self.config)
Config.PRE_APPROVAL_SUFFIX = Config.VERSION + 'pre-approvals/request'
Config.PRE_APPROVAL_URL = Config.BASE_URL + Config.PRE_APPROVAL_SUFFIX
Config.PRE_APPROVAL_PAYMENT_URL = Config.PAYMENT_HOST + Config.PRE_APPROVAL_SUFFIX + '.html?code=%s'
ConfigSandbox.PRE_APPROVAL_SUFFIX = ConfigSandbox.VERSION + 'pre-approvals/request'
ConfigSandbox.PRE_APPROVAL_URL = ConfigSandbox.BASE_URL + ConfigSandbox.PRE_APPROVAL_SUFFIX
ConfigSandbox.PRE_APPROVAL_PAYMENT_URL = ConfigSandbox.PAYMENT_HOST + ConfigSandbox.PRE_APPROVAL_SUFFIX + '.html?code=%s'
ConfigSandbox.QUERY_PRE_APPROVAL_URL = ConfigSandbox.BASE_URL + ConfigSandbox.VERSION + 'pre-approvals'
PagSeguro.pre_approval_ask_payment = pre_approval_ask_payment
Ao invés de checkout uso o método pre_approval_ask_payment.
Lembro que estou usando a versão 0.2.1 ainda.. por algum motivo não consegui atualizar para 0.3.0.. o meu buildout não conseguiu baixar essa versão quando testei.. quando tiver mais tempo abro uma nova issue para reportar isso.
Com esse código a redireção começou a funcionar.
Vou deixar a issue aberta por enquanto, e fechar ela quando prover um pull request com as alterações.
@rodfersou por acaso o erro que você esta recebendo é um que abri na #45 ?
@rodfersou @leonardocintra o problema de instalacao foi resolvido, agora voce pode tentar instalar o 0.3.1 e por favor veja se o erro continua. valeu!
@leonardocintra isso!
@rochacbruno obrigado!
@rodfersou en tu implimentacion monkey patch, ese script donde lo pones? O lo usas para crear el URL, estoy un poco confundido
@nadermx eu usei esse monkey patch na minha aplicação por que estava aprendendo como resolver meu problema. preciso transformar isso em um pull request com correções