python-pagseguro icon indicating copy to clipboard operation
python-pagseguro copied to clipboard

Url de notificação não funciona para Assinaturas

Open rodfersou opened this issue 8 years ago • 9 comments

Utilizando a versão 0.2.1 da biblioteca, nem a url de redirecionamento, nem a url de notificação funciona para assinaturas.

rodfersou avatar Sep 20 '16 22:09 rodfersou

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 avatar Sep 20 '16 22:09 rodfersou

@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 avatar Sep 21 '16 19:09 rochacbruno

@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.

rodfersou avatar Sep 22 '16 11:09 rodfersou

Vou deixar a issue aberta por enquanto, e fechar ela quando prover um pull request com as alterações.

rodfersou avatar Sep 22 '16 11:09 rodfersou

@rodfersou por acaso o erro que você esta recebendo é um que abri na #45 ?

leonardocintra avatar Sep 23 '16 00:09 leonardocintra

@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!

rochacbruno avatar Sep 23 '16 02:09 rochacbruno

@leonardocintra isso!

@rochacbruno obrigado!

rodfersou avatar Sep 23 '16 11:09 rodfersou

@rodfersou en tu implimentacion monkey patch, ese script donde lo pones? O lo usas para crear el URL, estoy un poco confundido

nadermx avatar Feb 07 '17 20:02 nadermx

@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

rodfersou avatar Feb 08 '17 09:02 rodfersou