Exemple #1
0
 def get(self, request, *args, **kwargs):
     pid = self.request.GET.get('pid')
     pagseguro_api = PagSeguroApi()
     data = pagseguro_api.get_transaction(pid)
     if data['success']:
         transaction = data['transaction']
         payment = Payment(
             status=transaction['status'],
             transaction=transaction['code']
         )
         if transaction['status'] in ['3', '4']:
             payment.paid = True
         payment.save()
         inscription = Inscription.objects.get(slug=transaction['reference'])
         inscription.payment = payment
         if payment.paid:
             inscription.confirmed = True
         inscription.save()
         kwargs['inscription'] = inscription
         context = self.get_context_data(**kwargs)
         return self.render_to_response(context)
     else:
         logging.error('Falha na página de retorno do pagamento')
         logging.error('Transação: {}'.format(pid))
         return HttpResponseServerError()
Exemple #2
0
 def get_data(self, code):
     if not code:
         return
     pg = PagSeguroApi()
     data = pg.get_transaction(code)
     if data['success']:
         self.update_transaction_status(data['transaction']['status'])
         return data
     return {}
Exemple #3
0
def retorno_doacao(request):
    pagseguro_api = PagSeguroApi()
    get_transaction = pagseguro_api.get_transaction(request.GET.get('transaction'))
    if not get_transaction.get('success'):
        raise Http404('A transação não foi localizada no PagSeguro')
    transaction = get_transaction.get('transaction')
    reference = transaction.get('reference')
    doacao = get_object_or_404(Doacao, id=int(reference))
    return redirect(reverse('aniversario:doacao_realizada', kwargs={
        'slug_usuario': doacao.aniversario.usuario.slug,
        'slug_missao': doacao.aniversario.missao.slug
    }))
Exemple #4
0
    def transactions(
        self,
        request,
    ):
        #print(request.data)
        perId = request.data["perId"]
        userId = request.data["userId"]
        planoId = request.data["planoId"]
        transactionCode = request.data["transactionCode"]
        tipo = ['Diamond', 'Destaque', 'Top', 'Basic']

        pagseguro_api = PagSeguroApi()

        try:
            data = pagseguro_api.get_transaction(transactionCode)
        except:
            data = None

        if data:
            if data["transaction"]["status"] == "3":
                perfil = Perfil.objects.get(pk=perId)
                plano = Membership.objects.get(pk=planoId)
                user = User.objects.get(pk=userId)
                created_date = dt.datetime.today()
                end_date = dt.datetime.today() + timedelta(
                    days=int(plano.valide_time))
                Subscription.objects.create(types=tipo.index(
                    plano.membership_type),
                                            code=data["transaction"]["code"],
                                            user=user,
                                            membership=plano,
                                            perfil=perfil,
                                            created_date=created_date,
                                            end_date=end_date,
                                            count=1)
                return Response({"message": "Obrigado pela sua compra."},
                                status.HTTP_201_CREATED)
                # 4BF9CC18-6F63-4DDF-9BB9-637D5E540F28
            elif data["transaction"]["status"] in ["1", "2", "4"]:

                Transactions.objects.create(perId=perId,
                                            userId=userId,
                                            planoId=planoId,
                                            transactionCode=transactionCode)

                return Response(
                    {
                        "message":
                        "Obrigado por comprar o plano, Aguardamos a aprovação do pagamento."
                    }, status.HTTP_200_OK)

        return Response({"message": "Algo deu errado"})
Exemple #5
0
def atualiza_compra(retorno):

	id_pagseguro = retorno.replace("-", "")
	pagseguro_api = PagSeguroApi()
	data = pagseguro_api.get_transaction(id_pagseguro)
	reference = data['transaction']['reference']

	#print 'usuario de retorno é %s' %usuario
	u = Cadastro.objects.get(cod_cliente=reference)
	user = u.id
	nome = u.nome
	usuario = u.user_id
	email_cad = u.email

	#id_pagseguro = id_pagseguro.replace("-", "")
	agora = datetime.datetime.now()

	try:

		r = Retorno.objects.get(code=id_pagseguro)
		retorno = str(r.code)
		unico = str(id_pagseguro)

		if retorno == unico:

			status_atual = Retorno.objects.values_list('status').filter(code=id_pagseguro)[0]
			status_atual = int(status_atual[0])
			status = data['transaction']['status']
			status = int(status)

			if status_atual !=  status:

				Retorno.objects.filter(code=retorno).update(lastEventDate=agora,status=status)

				if status == 3:
					atualiza_pago(id_pagseguro,usuario,status)

			else:
				### Atualiza da data da ultima consulta

				if status == 1:
					Retorno.objects.filter(code=retorno).update(lastEventDate=agora)

				if status == 2:

					mail.send(
					    [email_cad],
					    sender=settings.DEFAULT_FROM_EMAIL,
					    template='status_2',
					    context={'nome': nome},
					)
				if status == 7:

					mail.send(
					    [email_cad],
					    sender=settings.DEFAULT_FROM_EMAIL,
					    template='status_7',
					    context={'nome': nome},
					)

	except ObjectDoesNotExist:


		date = data['transaction']['date']
		lastEventDate = data['transaction']['lastEventDate']
		code = data['transaction']['code']
		code = code.replace("-", "")
		reference = data['transaction']['reference']
		status = data['transaction']['status']
		paymentMethod = data['transaction']['paymentMethod']['type']
		paymentMethodCode = data['transaction']['paymentMethod']['code']
		grossAmount = data['transaction']['grossAmount']
		discountAmount = data['transaction']['discountAmount']
		netAmount = data['transaction']['netAmount']
		extraAmount = data['transaction']['extraAmount']
		item = data['transaction']['items']['item']['description']
		id_plano = data['transaction']['items']['item']['id']
		name = data['transaction']['sender']['name']
		email = data['transaction']['sender']['email']
		areaCode = data['transaction']['sender']['phone']['areaCode']
		phone = data['transaction']['sender']['phone']['number']

		Retorno.objects.create(date=date,lastEventDate=lastEventDate,code=code,reference=reference,status=status,
								paymentMethod=paymentMethod,paymentMethodCode=paymentMethodCode,grossAmount=grossAmount,
								discountAmount=discountAmount,netAmount=netAmount,extraAmount=extraAmount,item=item,id_plano=id_plano,
								name=name,email=email,phone=areaCode+phone)
		mail.send(
		    [email_cad],
		    sender=settings.DEFAULT_FROM_EMAIL,
		    template='status_1',
		    context={'nome': name},
		)
		
		status = int(status)

		if status == 2:

			mail.send(
			    [email_cad],
			    sender=settings.DEFAULT_FROM_EMAIL,
			    template='status_2',
			    context={'nome': name},
			)

		if status == 3:
			atualiza_pago(id_pagseguro,usuario,status)
class PagSeguroApiTest(TestCase):
    def setUp(self):
        self.item1 = PagSeguroItem(id='1',
                                   description='My item 1',
                                   amount='10.00',
                                   quantity=1)
        self.item2 = PagSeguroItem(id='2',
                                   description='My item 2',
                                   amount='10.00',
                                   quantity=1)
        self.item3 = PagSeguroItem(id='3',
                                   description='My item 3',
                                   amount='10.00',
                                   quantity=1,
                                   shipping_cost='10.00',
                                   weight=300)
        self.pagseguro_api = PagSeguroApi()

    def test_add_item(self):
        self.pagseguro_api.add_item(self.item1)
        self.assertIn(self.item1, self.pagseguro_api.get_items())

        self.pagseguro_api.add_item(self.item2)
        self.assertIn(self.item1, self.pagseguro_api.get_items())
        self.assertIn(self.item2, self.pagseguro_api.get_items())

        self.pagseguro_api.add_item(self.item3)
        self.assertIn(self.item1, self.pagseguro_api.get_items())
        self.assertIn(self.item2, self.pagseguro_api.get_items())
        self.assertIn(self.item3, self.pagseguro_api.get_items())

    def test_clear_items(self):
        self.pagseguro_api.add_item(self.item1)
        self.pagseguro_api.add_item(self.item2)
        self.pagseguro_api.add_item(self.item3)
        self.pagseguro_api.clear_items()
        self.assertNotIn(self.item1, self.pagseguro_api.get_items())
        self.assertNotIn(self.item2, self.pagseguro_api.get_items())
        self.assertNotIn(self.item3, self.pagseguro_api.get_items())

    @httpretty.activate
    def test_invalid_checkout(self):
        self.pagseguro_api.add_item(self.item1)
        self.pagseguro_api.add_item(self.item2)
        self.pagseguro_api.add_item(self.item3)

        # mock requests
        httpretty.register_uri(
            httpretty.POST,
            CHECKOUT_URL,
            body='Unauthorized',
            status=401,
        )

        data = self.pagseguro_api.checkout()
        self.assertEqual(data['success'], False)
        self.assertEqual(data['message'], 'Unauthorized')
        self.assertEqual(data['status_code'], 401)

    @httpretty.activate
    def test_valid_checkout(self):
        self.pagseguro_api.add_item(self.item1)
        self.pagseguro_api.add_item(self.item2)
        self.pagseguro_api.add_item(self.item3)

        # mock requests
        httpretty.register_uri(
            httpretty.POST,
            CHECKOUT_URL,
            body=checkout_response_xml,
            status=200,
        )

        data = self.pagseguro_api.checkout()
        self.assertEqual(data['success'], True)
        self.assertEqual(data['status_code'], 200)
        self.assertEqual(data['code'], '67DB59D3BDBD84EAA4396F929DB350A7')
        self.assertEqual(data['date'], parse('2014-06-07T00:52:04.000-03:00'))
        self.assertEqual(data['redirect_url'],
                         '{0}?code={1}'.format(PAYMENT_URL, data['code']))

    @httpretty.activate
    def test_get_invalid_notification(self):
        # mock requests
        httpretty.register_uri(
            httpretty.GET,
            NOTIFICATION_URL +
            '/{0}'.format('A5182C-C9EF48EF48D2-1FF4AF6FAC82-EB2948'),
            body='Unauthorized',
            status=401,
        )

        response = self.pagseguro_api.get_notification(
            'A5182C-C9EF48EF48D2-1FF4AF6FAC82-EB2948')
        self.assertEqual(response.status_code, 401)
        self.assertEqual(response.text, 'Unauthorized')

    @httpretty.activate
    def test_get_valid_notification(self):
        # mock requests
        httpretty.register_uri(
            httpretty.GET,
            NOTIFICATION_URL +
            '/{0}'.format('A5182C-C9EF48EF48D2-1FF4AF6FAC82-EB2948'),
            body=notification_response_xml,
            status=200,
        )

        response = self.pagseguro_api.get_notification(
            'A5182C-C9EF48EF48D2-1FF4AF6FAC82-EB2948')
        self.assertEqual(response.status_code, 200)

    @httpretty.activate
    def test_get_invalid_transaction(self):
        # mock requests
        httpretty.register_uri(
            httpretty.GET,
            TRANSACTION_URL +
            '/{0}'.format('9E884542-81B3-4419-9A75-BCC6FB495EF1'),
            body='Unauthorized',
            status=401,
        )

        data = self.pagseguro_api.get_transaction(
            '9E884542-81B3-4419-9A75-BCC6FB495EF1')
        self.assertEqual(data['status_code'], 401)
        self.assertEqual(data['message'], 'Unauthorized')

    @httpretty.activate
    def test_get_valid_transaction(self):
        # mock requests
        httpretty.register_uri(
            httpretty.GET,
            TRANSACTION_URL +
            '/{0}'.format('9E884542-81B3-4419-9A75-BCC6FB495EF1'),
            body=transaction_response_xml,
            status=200,
        )

        data = self.pagseguro_api.get_transaction(
            '9E884542-81B3-4419-9A75-BCC6FB495EF1')
        self.assertEqual(data['status_code'], 200)
        self.assertEqual(data['transaction']['code'],
                         '9E884542-81B3-4419-9A75-BCC6FB495EF1')

    def test_base_params_is_instance_variable(self):
        # Regression test
        api1 = PagSeguroApi()
        api2 = PagSeguroApi()
        self.assertIsNot(api1.base_params, api2.base_params)

    def test_params_is_instance_variable(self):
        # Regression test
        api1 = PagSeguroApi()
        api2 = PagSeguroApi()
        self.assertIsNot(api1.params, api2.params)

    def test_items_is_instance_variable(self):
        # Regression test
        api1 = PagSeguroApi()
        api2 = PagSeguroApi()
        self.assertIsNot(api1.items, api2.items)
class PagSeguroApiTest(TestCase):

    def setUp(self):
        self.item1 = PagSeguroItem(
            id='1',
            description='My item 1',
            amount='10.00',
            quantity=1
        )
        self.item2 = PagSeguroItem(
            id='2',
            description='My item 2',
            amount='10.00',
            quantity=1
        )
        self.item3 = PagSeguroItem(
            id='3',
            description='My item 3',
            amount='10.00',
            quantity=1,
            shipping_cost='10.00',
            weight=300
        )
        self.pagseguro_api = PagSeguroApi()

    def test_add_item(self):
        self.pagseguro_api.add_item(self.item1)
        self.assertIn(self.item1, self.pagseguro_api.get_items())

        self.pagseguro_api.add_item(self.item2)
        self.assertIn(self.item1, self.pagseguro_api.get_items())
        self.assertIn(self.item2, self.pagseguro_api.get_items())

        self.pagseguro_api.add_item(self.item3)
        self.assertIn(self.item1, self.pagseguro_api.get_items())
        self.assertIn(self.item2, self.pagseguro_api.get_items())
        self.assertIn(self.item3, self.pagseguro_api.get_items())

    def test_clear_items(self):
        self.pagseguro_api.add_item(self.item1)
        self.pagseguro_api.add_item(self.item2)
        self.pagseguro_api.add_item(self.item3)
        self.pagseguro_api.clear_items()
        self.assertNotIn(self.item1, self.pagseguro_api.get_items())
        self.assertNotIn(self.item2, self.pagseguro_api.get_items())
        self.assertNotIn(self.item3, self.pagseguro_api.get_items())

    @httpretty.activate
    def test_invalid_checkout(self):
        self.pagseguro_api.add_item(self.item1)
        self.pagseguro_api.add_item(self.item2)
        self.pagseguro_api.add_item(self.item3)

        # mock requests
        httpretty.register_uri(
            httpretty.POST,
            CHECKOUT_URL,
            body='Unauthorized',
            status=401,
        )

        data = self.pagseguro_api.checkout()
        self.assertEqual(data['success'], False)
        self.assertEqual(data['message'], 'Unauthorized')
        self.assertEqual(data['status_code'], 401)

    @httpretty.activate
    def test_valid_checkout(self):
        self.pagseguro_api.add_item(self.item1)
        self.pagseguro_api.add_item(self.item2)
        self.pagseguro_api.add_item(self.item3)

        # mock requests
        httpretty.register_uri(
            httpretty.POST,
            CHECKOUT_URL,
            body=checkout_response_xml,
            status=200,
        )

        data = self.pagseguro_api.checkout()
        self.assertEqual(data['success'], True)
        self.assertEqual(data['status_code'], 200)
        self.assertEqual(data['code'], '67DB59D3BDBD84EAA4396F929DB350A7')
        self.assertEqual(data['date'], parse('2014-06-07T00:52:04.000-03:00'))
        self.assertEqual(
            data['redirect_url'],
            '{0}?code={1}'.format(PAYMENT_URL, data['code'])
        )

    @httpretty.activate
    def test_get_invalid_notification(self):
        # mock requests
        httpretty.register_uri(
            httpretty.GET,
            NOTIFICATION_URL + '/{0}'.format(
                'A5182C-C9EF48EF48D2-1FF4AF6FAC82-EB2948'
            ),
            body='Unauthorized',
            status=401,
        )

        response = self.pagseguro_api.get_notification(
            'A5182C-C9EF48EF48D2-1FF4AF6FAC82-EB2948'
        )
        self.assertEqual(response.status_code, 401)
        self.assertEqual(response.text, 'Unauthorized')

    @httpretty.activate
    def test_get_valid_notification(self):
        # mock requests
        httpretty.register_uri(
            httpretty.GET,
            NOTIFICATION_URL + '/{0}'.format(
                'A5182C-C9EF48EF48D2-1FF4AF6FAC82-EB2948'
            ),
            body=notification_response_xml,
            status=200,
        )

        response = self.pagseguro_api.get_notification(
            'A5182C-C9EF48EF48D2-1FF4AF6FAC82-EB2948'
        )
        self.assertEqual(response.status_code, 200)

    @httpretty.activate
    def test_get_invalid_transaction(self):
        # mock requests
        httpretty.register_uri(
            httpretty.GET,
            TRANSACTION_URL + '/{0}'.format(
                '9E884542-81B3-4419-9A75-BCC6FB495EF1'
            ),
            body='Unauthorized',
            status=401,
        )

        data = self.pagseguro_api.get_transaction(
            '9E884542-81B3-4419-9A75-BCC6FB495EF1'
        )
        self.assertEqual(data['status_code'], 401)
        self.assertEqual(data['message'], 'Unauthorized')

    @httpretty.activate
    def test_get_valid_transaction(self):
        # mock requests
        httpretty.register_uri(
            httpretty.GET,
            TRANSACTION_URL + '/{0}'.format(
                '9E884542-81B3-4419-9A75-BCC6FB495EF1'
            ),
            body=transaction_response_xml,
            status=200,
        )

        data = self.pagseguro_api.get_transaction(
            '9E884542-81B3-4419-9A75-BCC6FB495EF1'
        )
        self.assertEqual(data['status_code'], 200)
        self.assertEqual(
            data['transaction']['code'],
            '9E884542-81B3-4419-9A75-BCC6FB495EF1'
        )

    def test_base_params_is_instance_variable(self):
        # Regression test
        api1 = PagSeguroApi()
        api2 = PagSeguroApi()
        self.assertIsNot(api1.base_params, api2.base_params)

    def test_params_is_instance_variable(self):
        # Regression test
        api1 = PagSeguroApi()
        api2 = PagSeguroApi()
        self.assertIsNot(api1.params, api2.params)

    def test_items_is_instance_variable(self):
        # Regression test
        api1 = PagSeguroApi()
        api2 = PagSeguroApi()
        self.assertIsNot(api1.items, api2.items)
Exemple #8
0
def registra_compra(id_pagseguro,usuario):
	
	print usuario
	u = Cadastro.objects.get(user_id=usuario)
	user = u.id
	print user
	pagseguro_api = PagSeguroApi()
	data = pagseguro_api.get_transaction(id_pagseguro)
	id_pagseguro = id_pagseguro.replace("-", "")
	agora = datetime.now()

	try:

		r = Retorno.objects.get(code=id_pagseguro)
		retorno = str(r.code)
		print type(retorno)
		unico = str(id_pagseguro)
		print type(unico)

		if retorno == unico:

			status_atual = Retorno.objects.values_list('status').filter(code=id_pagseguro)[0]
			status_atual = int(status_atual[0])
			status = data['transaction']['status']
			status = int(status)

			if status_atual !=  status:

				print 'é diferente'
				Retorno.objects.filter(code=retorno).update(lastEventDate=agora,status=status)

				if status == 3:
					atualiza_pago(id_pagseguro,usuario,status)

				# if status == 3:

				# 	print user
				# 	pega_plano_cadastro = Cadastro.objects.values_list('plano').filter(id=user)[0]
				# 	pega_plano_cadastro = pega_plano_cadastro[0]
				# 	print 'o plano cadastrado é %s' %pega_plano_cadastro

				# 	#print compra['redirect_url']
				# 	### INIICIO Pega o valor do plano e o valor por consulta de obtem a quantidade de consultas
				# 	x = Plano.objects.get(id=pega_plano_cadastro)
				# 	id_plano = x.id
				# 	print id_plano
				# 	descricao = x.plano
				# 	valorD = x.valor
				# 	print valorD
				# 	valor = int(x.valor)
				# 	v_consulta = x.valor_consulta
				# 	try:
				# 		result = valor / v_consulta
				# 		print result
				# 		result = decimal.Decimal(result)
				# 	except ZeroDivisionError:
				# 		result = 00.00
				# 	## FIM Pega o valor do plano e o valor por consulta de obtem a quantidade de consultas

				# 	pega_plano_cliente = PlanoCliente.objects.values_list('plano').filter(cliente=user)[0]
				# 	pega_plano_cliente = pega_plano_cliente[0]
				# 	print 'plano é %s' %pega_plano_cliente

				# 	try:
				# 		### INICIO cria o plano baseado no retorno do PagSeguro ###
				# 		PlanoCliente.objects.create(cliente=user,plano=pega_plano_cliente,consultas=result,consultas_gratis=0)
				# 		### FIM cria o plano baseado no retorno do PagSeguro ###

				# 	except IntegrityError:
						
				# 		print 'ja tem <--------'
				# 		# Pega o plano no cadastro do cliente
				# 		p = Cadastro.objects.get(id=user)
				# 		p = p.plano
				# 		print 'Cadastro %s' %p
						
				# 		# Pega o plano comprado
				# 		d = Retorno.objects.get(code=retorno)
				# 		d = d.id_plano
				# 		print 'Retorno %s' %d

				# 		b = PlanoCliente.objects.get(cliente=user)
				# 		b = b.plano
				# 		print 'PlanoCliente %s' %b

				# 		if b != p:
				# 			print 'planos sao diferentes'
				# 			PlanoCliente.objects.filter(plano=b).update(plano=p)
				# 			b = PlanoCliente.objects.get(cliente=user)
				# 			b = b.plano
				# 			print b

				# 		x = PlanoCliente.objects.get(cliente=user)
				# 		id_plano = x.id
				# 		print id_plano
				# 		consultas = int(x.consultas)
				# 		print 'saldo atual é %s' %(consultas)


				# 		z = Plano.objects.get(id=d)
				# 		valor = int(z.valor)
				# 		print valor
				# 		valor_consulta = z.valor_consulta
				# 		print valor_consulta
				# 		results = int(valor / valor_consulta)
				# 		print 'saldo a ser somado é %s' %(results)

				# 		controle = Retorno.objects.values_list('controle').filter(code=id_pagseguro)[0]
				# 		controle = controle[0]
				# 		print controle

				# 		if controle == 0:

				# 			novo_saldo = consultas + results
				# 			print 'o novo saldo é %s' %novo_saldo
				# 			PlanoCliente.objects.filter(cliente=user).update(consultas=novo_saldo)
				# 			Retorno.objects.filter(code=retorno).update(controle=1,consultas=results)
				# 			Retorno.objects.filter(code=retorno).update(lastEventDate=agora,status=status)


			else:
				print 'é igual'
				### Atualiza da data da ultima consulta
				if status == 1:
					Retorno.objects.filter(code=retorno).update(lastEventDate=agora)


	except ObjectDoesNotExist:


		date = data['transaction']['date']
		lastEventDate = data['transaction']['lastEventDate']
		code = data['transaction']['code']
		code = code.replace("-", "")
		reference = data['transaction']['reference']
		status = data['transaction']['status']
		paymentMethod = data['transaction']['paymentMethod']['type']
		paymentMethodCode = data['transaction']['paymentMethod']['code']
		grossAmount = data['transaction']['grossAmount']
		discountAmount = data['transaction']['discountAmount']
		netAmount = data['transaction']['netAmount']
		extraAmount = data['transaction']['extraAmount']
		item = data['transaction']['items']['item']['description']
		id_plano = data['transaction']['items']['item']['id']
		name = data['transaction']['sender']['name']
		email = data['transaction']['sender']['email']
		areaCode = data['transaction']['sender']['phone']['areaCode']
		phone = data['transaction']['sender']['phone']['number']

		Retorno.objects.create(date=date,lastEventDate=lastEventDate,code=code,reference=reference,status=status,
								paymentMethod=paymentMethod,paymentMethodCode=paymentMethodCode,grossAmount=grossAmount,
								discountAmount=discountAmount,netAmount=netAmount,extraAmount=extraAmount,item=item,id_plano=id_plano,
								name=name,email=email,phone=areaCode+phone)
		
		status = int(status)

		if status == 3:
			atualiza_pago(id_pagseguro,usuario,status)