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()
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 {}
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 }))
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"})
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)
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)