test.py 11.5 KB
import base64

from opensipkd.base.tools import get_random_number
from pyramid.view import view_config
import logging

log = logging.getLogger(__name__)
"""
test-purchase http://server/api/test/prepaid/purchase
"""


def validate_header(request):
    env = request.environ
    # http_header = env["HTTP_HEADER"]
    # log.info(env)
    # if 'HTTP_AUTHORIZATION' not in env:
    #     log.info("HTTP_AUTHORIZATION tidak ditemukan")
    #     return
    #
    # auth = env['HTTP_AUTHORIZATION'].split()
    # log.info(auth)
    # if len(auth) < 2 or auth[0] != "Bearer":
    #     log.info('Error Auth')
    #     return
    #
    # key = ":".join(['agratek', '4444444']).encode()
    # key_encoded = base64.b64encode(key).decode()
    # log.info(key_encoded)
    # if auth[1] != key_encoded:
    #     return

    return True


def anauthorized(request):
    request.response.status = 401
    result = {
        "status": "UNAUTHORIZED",
        "data": {
            "errors": [
                "Unauthorized"
            ]
        },
        "message": ""
    }
    return result


def bad_request(request, message=None):
    if not message:
        message = "Paramter(s) Expected"
    request.response.status = 400
    result = {
        "status": "BAD_REQUEST",
        "data": {
            "errors": [
                "ERROR_MESSAGE_1",
                "ERROR_MESSAGE_2",
                "ERROR_MESSAGE_ETC"
            ]
        },
        "message": message
    }
    return result


def produk_not_found(request):
    return bad_request(request, "Prduk Not Found")


@view_config(route_name='test-purchase', renderer='json', request_method="POST")
def view_test_purchase(request):
    if not validate_header(request):
        return anauthorized(request)
    params = request.params
    data = request.json
    if not data or 'data' not in data:
        return bad_request(request, 'Data not found')
    log.info(data)
    data = data['data']
    if not data or 'denom' not in data or 'number' not in data:
        return bad_request(request)
    denom = data["denom"]
    number = data['number']
    if denom == "TSEL5":
        status_code = number[-2:]
        status = "SUCCESS"
        rc="00"
        if status_code == '99':
            status = "PENDING"
            rc = "68"
        elif status_code == '88':
            status = "FAILED"
            rc = "13"
        elif status_code == '77':
            status = "DOUBLE"
            rc = "67"
        result = {
            "status": status,
            "data": {
                "order_id": get_random_number(6),
                "price": 5675
            },
            "message": ""
        }
        if rc != "00":
            message = rc=="68" and "TRX ke {} Sedang Di Proses".format(number) or ""
            message = rc=="67" and "TRX ke {} Gagal Doble Transaksi".format(number) or message
            message = rc=="13" and "TRX ke {} Gagal".format(number) or message
            result["data"].update({"rc":rc, "message":message})
            if rc == "68":
                result.update({"status": "SUCCESS"})

        return result

    elif denom == "PLN20":
        return {"status": "SUCCESS",
                "data": {'price': 22500,
                         'rc': '68',
                         'message': 'Trx ke 1234567890 sedang diproses. Harga Rp22,600 REFF#199111',
                         'order_id': get_random_number(5)},
                'message': ''}

    elif denom == "PLNPASCA":
        status = number[-2:] == '99' and "PENDING" or "SUCCESS"
        return {
            "status": status,
            "data": {
                "price": 301600,
                "order_id": get_random_number(6),
            },
            "message": ""
        }

    elif denom == "BPJSKES1":
        status = number[-2:] == '99' and "PENDING" or "SUCCESS"
        return {
            "status": status,
            "data": {
                "price": 156100,
                "order_id": get_random_number(6),
            },
            "message": ""
        }
    elif denom[:3] == "PAM":
        status = number[-2:] == '99' and "PENDING" or "SUCCESS"
        return {
            "status": status,
            "data": {
                "price": 301600,
                "order_id": get_random_number(6),
            },
            "message": ""
        }
    elif denom == "PGN":
        status = number[-2:] == '99' and "PENDING" or "SUCCESS"
        return {
            "status": status,
            "data": {
                "price": 301600,
                "order_id": get_random_number(6),
            },
            "message": ""
        }
    elif denom == "MF":
        status = number[-2:] == '99' and "PENDING" or "SUCCESS"
        return {
            "status": status,
            "data": {
                "price": 376100,
                "order_id": get_random_number(6),
            },
            "message": ""
        }

    elif denom[:6] == "TELKOM":
        status = number[-2:] == '99' and "PENDING" or "SUCCESS"
        return {
            "status": status,
            "data": {
                "price": 300600,
                "order_id": get_random_number(6),
            },
            "message": ""
        }

    return produk_not_found(request)


@view_config(route_name='test-prepaid-inquiry-pln', renderer='json', request_method="GET")
def view_test_pln_pre(request):
    if not validate_header(request):
        return anauthorized(request)
    params = request.params
    number = "number" in params and params["number"] or ""
    if not number:
        return bad_request(request)
    return {
        "status": "SUCCESS",
        "data": {
            "number": "XXX",
            "subscriber_id": "XXX",
            "name": "XXX",
            "tariff": "XXX",
            "power": "XXX"
        },
        "message": ""
    }


@view_config(route_name='test-postpaid-inquiry', renderer='json', request_method="GET")
def view_test_postpaid(request):
    if not validate_header(request):
        return anauthorized(request)
    params = request.params
    denom = "denom" in params and params["denom"] or ""
    number = "number" in params and params["number"] or ""
    if not denom or not number:
        return bad_request(request)
    if number[-2:] == "99":
        return bad_request(request, "Subscriber Not Found")

    if denom == "BPJSKES1":
        return {
            "status": "SUCCESS",
            "data": {
                "subscriber_id": "XXX",
                "subscriber_name": "XXX",
                "ref_id": "XXX",
                "inquiries": {
                    "branch_code": "-",
                    "branch_name": "XXX",
                    "month_counts": 1,
                    "participant_counts": 3,
                    "base_price": 154200,
                    "bill_rest": 0,
                    "admin": 2500
                },
                "subtotal": 156700,
                "discount": 600,
                "total": 156100
            },
            "message": ""
        }
    elif denom == "PLNPASCA":
        return {
            "status": "SUCCESS",
            "data": {
                "subscriber_id": "XXX",
                "subscriber_name": "XXX",
                "ref_id": "XXX",
                "tariff": "R1/1300VA",
                "inquiries": [
                    {
                        "period": "2016-08",
                        "base_price": 300000,
                        "fine": 0,
                        "admin_fee": 2500
                    },
                    {
                        "period": "2016-07",
                        "base_price": 300000,
                        "fine": 10000,
                        "admin_fee": 2500
                    }
                ],
                "subtotal": 302500,
                "discount": 900,
                "total": 301600
            },
            "message": ""
        }
    elif denom[:3] == "PAM":
        return {
            "status": "SUCCESS",
            "data": {
                "subscriber_id": "XXX",
                "subscriber_name": "XXX",
                "ref_id": "XXX",
                "inquiries": [
                    {
                        "period": "XXX",
                        "base_price": 300000,
                        "fine": 0,
                        "admin_fee": 2500,
                        "meter_changes": "XXX"
                    }
                ],
                "subtotal": 302500,
                "discount": 900,
                "total": 301600
            },
            "message": ""
        }
    elif denom == "PGN":
        return {
            "status": "SUCCESS",
            "data": {
                "subscriber_id": "XXX",
                "subscriber_name": "XXX",
                "ref_id": "XXX",
                "inquiries": {
                    "period": "XXX",
                    "meter_changes": "XXX",
                    "usages": "XXX",
                    "base_price": 300000,
                    "admin_fee": 2500
                },
                "subtotal": 302500,
                "discount": 900,
                "total": 301600
            },
            "message": ""
        }
    elif denom[:2] == "MF":
        return {
            "status": "SUCCESS",
            "data": {
                "subscriber_id": "XXX",
                "subscriber_name": "XXX",
                "ref_id": "XXX",
                "inquiries": {
                    "installment": "XXX",
                    "due_date": "XXX",
                    "platform": "XXX",
                    "base_price": 300000,
                    "coll_fee": 0,
                    "fine": 75000,
                    "admin": 2000
                },
                "subtotal": 377000,
                "discount": 900,
                "total": 376100
            },
            "message": ""
        }
    elif denom[:6] == "TELKOM":
        return {
            "status": "SUCCESS",
            "data": {
                "subscriber_id": "XXX",
                "subscriber_name": "XXX",
                "ref_id": "XXX",
                "inquiries": {
                    "period": "XXX",
                    "base_price": 300000,
                    "admin_fee": 1500
                },
                "subtotal": 301500,
                "discount": 900,
                "total": 300600
            },
            "message": ""
        }
    elif denom[:2] == "CC":
        tx_id = get_random_number(32)
        return {
              'resultCd': '0000',
              'resultMsg': 'SUCCESS',
              'tXid': 'AGRATEK{}'.format(tx_id),
              'referenceNo': '2669739141972781',
              'payMethod': '01',
              'amt': ' 10000',
              'transDt': '20190906',
              'transTm': '110857',
              'description': 'Transaction Description',
              'bankCd': None,
              'vacctNo': None,
              'mitraCd': None,
              'payNo': None,
              'currency': None,
              'goodsNm': None,
              'billingNm': None,
              'vacctValidDt': None,
              'vacc tValidTm': None,
              'payValidDt': None,
              'payValidTm': None,
              'requestURL': None
            }

    return produk_not_found(request)

# @view_config(route_name='test-order', renderer='json', request_method="GET")
# def view_test_pln_pre(request):
#     if not validate_header(request):
#         return anauthorized(request)
#     matchdict = request.matchdict
#     id = "id" in matchdict and matchdict["id"] or ""
#     return {
#       "order_id": 123,
#       "name": "Telkomsel 5",
#       "msisdn": "08xx",
#       "serial_number": "XXX",
#       "status": "COMPLETED",
#       "price": 5000
#     }