Ejemplo n.º 1
0
    def get(self, request, ref_num, *args, **kwargs):
        serializer = serializers.RequestTransactionCallbackGet(
            data=request.query_params)
        if serializer.is_valid():
            temp_transaction = cache.get("transaction:%s" % (ref_num))
            transaction = None
            if temp_transaction is not None:
                transaction = json.loads(temp_transaction)
                context = transaction
                context['state'] = 'pay'
                if 'gateway' in transaction and transaction['gateway']:
                    gateway = Gateway.objects.filter(
                        id=transaction['gateway']).first()

                    if serializer.validated_data['state'] == 'error':
                        Transaction.add_to_db(
                            transaction,
                            ref_num,
                            gateway,
                            False,
                            details={
                                'error_key':
                                serializer.validated_data.get(
                                    'error_key',
                                    'unknown',
                                ),
                                'error_message':
                                serializer.validated_data.get(
                                    'error_message',
                                    'unknown',
                                )
                            })
                    else:
                        result = Transaction.confirm_request(
                            ref_num, gateway, transaction['amount'])
                        if result is not None:
                            Transaction.add_to_db(transaction, ref_num,
                                                  gateway, result)
                    return redirect('/transaction/payment/%s' % (ref_num))
                else:
                    cache.delete("transaction:%s" % (ref_num))
                    return redirect('/transaction/payment/%s' % (ref_num))
            else:
                return redirect('/transaction/payment/%s' % (ref_num))

        else:
            return Response({"message": serializer.errors},
                            status=status.HTTP_400_BAD_REQUEST)