Exemplo n.º 1
0
def reply_addcard_startAdding(sender, message, last_sender_message):
    if not helper.check_csc(message):
        main.reply(
            sender,
            "Вы неправильно ввели трёхзначный код CSC/CVV2 на обратной стороне карты, введите заново"
        )
        return "ok"
    main.reply(sender, "Идет обработка добавления карты...")
    main.reply_typing_on(sender)
    try:
        # 1 - авторизация на post.kz
        url_login = '******'
        headers = {
            "Authorization":
            "Basic " + last_sender_message['encodedLoginPass'],
            'Content-Type': 'application/json'
        }

        # 2 - создаём токен
        session = requests.Session()
        r = session.get(url_login, headers=headers)
        mobileNumber = r.json()['mobileNumber']

        # 3 - инициируем start registration
        url_login2 = 'https://post.kz/mail-app/api/intervale/token'
        data = {"phone": mobileNumber}
        r = session.post(url_login2, json=data)
        token = r.json()['token']

        # 4 - передаём все данные карты для регистрации карты
        url_login3 = 'https://post.kz/mail-app/api/intervale/card/registration/start/' + token
        data = {
            "phone": mobileNumber,
            "returnUrl": "https://post.kz/static/return.html"
        }
        r = session.post(url_login3, json=data)

        # 4 - передаём все данные карты для регистрации карты
        url_login5 = 'https://openapi-entry.intervale.ru/api/v3/' + portal_id_2 + '/card/registration/'
        url_login5 += token + '/card-page-submit?fallback=https%3A%2F%2Fpost.kz%2Fstatic%2Freturn.html'
        data = {
            'pan': last_sender_message['addcard_cardnumber'],
            'expiry': last_sender_message['addcard_expiredate'],
            'csc': message,
            'cardholder': last_sender_message['addcard_cardowner'].lower(),
            'pageType': 'reg'
        }
        r = session.post(url_login5, data=data)
        result = r.json()
        try:
            if result['error'] == 'ALREADY_REGISTERED':
                main.reply(
                    sender,
                    "Эта карта уже добавлена в вашем профиле на post.kz")
                main.reply_main_menu_buttons(sender, last_sender_message)
                return "ALREADY_REGISTERED"
        except:
            pass

        # 5 - дергаём статус, вытаскиваем url для 3DSecure
        url_login4 = 'https://post.kz/mail-app/api/intervale/card/registration/status/' + token
        data = {"phone": mobileNumber}
        r = session.post(url_login4, json=data)
        d = r.json()
        if d['state'] == 'redirect':
            main.reply_send_redirect_url(sender, d['url'])
            time.sleep(9)
        if d['state'] == 'confirmation':
            message = 'Для подтверждения карты, введите сумму, блокированную на вашей карте.\n'
            message += 'Блокированную сумму можно узнать через интернет-банкинг или call-центр вашего банка.\n'
            message += 'Осталось попыток: 3'
            main.reply(sender, message)
            last_sender_message['token'] = token
            last_sender_message['mobileNumber'] = mobileNumber
            last_sender_message['payload'] = 'addcard.confirmation'
            main.mongo_update_record(last_sender_message)
            return "confirmation"

        timer = 0
        while timer < timeout:
            time.sleep(1)
            r = session.post(url_login4, json=data)
            d = r.json()
            if d['state'] == 'result':
                status = d['result']['status']
                if status == 'success':
                    res = "Поздравляю! Карта успешно добавлена!"
                    main.reply(sender, res)
                if status == 'fail':
                    main.reply(sender,
                               "Карта не была добавлена. Попробуйте снова")
                main.reply_main_menu_buttons(sender, last_sender_message)
                return "ok"

        last_sender_message = main.mongo_get_by_sender(sender)
        if last_sender_message['payload'] == 'addcard.csc':
            strminutes = str(timeout // 60)
            main.reply(
                sender, "Прошло больше " + strminutes +
                " минут: добавление карты отменяется")
            main.reply_main_menu_buttons(sender, last_sender_message)
        return "time exceed"

    except:
        logging.error(helper.PrintException())
        main.reply(sender,
                   "Произошла непредвиденная ошибка, попробуйте позднее")
        main.reply_main_menu_buttons(sender, last_sender_message)
        return "fail"
Exemplo n.º 2
0
def reply_card2card_startPayment(sender, message, last_sender_message):
    if not helper.check_csc(message):
        main.reply(sender, "Вы неправильно ввели трёхзначный код CSC/CVV2 на обратной стороне карты, введите заново")
        return "ok"
    main.reply(sender, "Идет обработка перевода...")
    main.reply_typing_on(sender)
    # 1 - авторизация на post.kz
    try:
        session = main.get_authorized_session(last_sender_message['encodedLoginPass'])
        mobileNumber = last_sender_message['mobileNumber']

        # 2 - вызов getCards()
        url_login6 = 'https://post.kz/mail-app/api/intervale/card?device=mobile'
        sd2 = {"blockedAmount": "", "phone": mobileNumber, "paymentId": "", "returnUrl": "", "transferId": ""}
        r = session.post(url_login6, json=sd2)
        card = r.json()[last_sender_message['chosenCardIndex']]

        # 3 - вызов getToken()
        url_login4 = url + portal_id + '/token'
        headers = {'Content-Type': 'application/x-www-form-urlencoded',
                   'X-Channel-Id': x_channel_id,
                   'X-IV-Authorization': 'Identifier ' + mobileNumber}
        r = session.post(url_login4, headers=headers)
        token = r.json()['token']

        # 4 - вызов startPayment()
        amount = last_sender_message['amount']
        data = {'paymentId': 'MoneyTransfer_KazPost_Card2Card',
                'currency': 'KZT',
                'amount': str(amount) + '00',
                'commission': str(last_sender_message['commission']) + '00',
                'total': str(last_sender_message['total']) + '00',
                'src.type': 'card_id',
                'src.cardId': card['id'],
                'src.csc': message,
                'dst.type': 'card',
                'dst.pan': last_sender_message['lastCardDst'],
                'returnUrl': 'https://transfer.post.kz/?token=' + token}

        url_login5 = url + portal_id + '/payment/' + token + '/start'
        r = session.post(url_login5, data=data, headers=headers)

        # 5 - вызов statusPayment()

        url_login10 = url + portal_id + '/payment/' + token
        r = session.post(url_login10, headers=headers)
        data = r.json()
        state = data['state']
        if state == 'redirect':
            main.reply_send_redirect_url(sender, data['url'])

        card_w_spaces = helper.insert_4_spaces(last_sender_message['lastCardDst'])
        timer = 0
        while timer < timeout:
            time.sleep(1)
            r = session.post(url_login10, headers=headers)
            data = r.json()
            try:
                result_status = data['result']['status']
                if result_status == 'fail':
                    main.reply(sender, "Платеж не был завершен успешно. Попробуйте снова")
                elif result_status == 'success':
                    res = "Поздравляю! Платеж был проведен успешно, карта " + card_w_spaces + " пополнена на сумму " + str(
                        amount) + " тг.\n"
                    res += "Номер квитанции: " + str(data['result']['trxId'])
                    res += ", она доступна в профиле post.kz в разделе История платежей"
                    main.reply(sender, res)
                main.reply_main_menu_buttons(sender, last_sender_message)
                return "ok"
            except:
                pass
            timer += 1

        last_sender_message = main.mongo_get_by_sender(sender)
        if last_sender_message['payload'] == 'card2card.startPayment':
            strminutes = str(timeout // 60)
            main.reply(sender, "Прошло больше " + strminutes + " минут: платеж отменяется")
            main.reply_main_menu_buttons(sender, last_sender_message)
        return "time exceed"
    except:
        main.reply(sender, "Произошла непредвиденная ошибка, попробуйте позднее")
        main.reply_main_menu_buttons(sender, last_sender_message)
        logging.error(helper.PrintException())
        return "fail"
Exemplo n.º 3
0
def reply_onai_startPayment(sender, message, last_sender_message):
    if not helper.check_csc(message):
        main.reply(sender, "Вы неправильно ввели трёхзначный код CSC/CVV2 на обратной стороне карты, введите заново")
        return "ok"
    main.reply(sender, "Идет обработка платежа...")
    main.reply_typing_on(sender)
    # 1 - авторизация на post.kz
    try:
        session = main.get_authorized_session(last_sender_message['encodedLoginPass'])

        # 2 - вызов createSubscription() из PaymentAPI
        url_login2 = 'https://post.kz/mail-app/api/v2/subscriptions'
        login = last_sender_message['login']
        operatorId = 'onai'
        onaiToRefill = last_sender_message['onaiToRefill']
        amount = last_sender_message['amount']
        sd2 = {"id": "", "login": login, "operatorId": operatorId, "data": onaiToRefill, "name": "", "invoiceIds": ""}
        r = session.post(url_login2, json=sd2)
        data = r.json()

        subscriptionId = str(data['subscriptionData']['id'])
        invoiceId = data['subscriptionData']['invoiceIds'][0]

        # 3 - вызов getInvoices() из PaymentAPI
        url_login3 = 'https://post.kz/mail-app/api/v2/subscriptions/' + subscriptionId + '/invoices'
        r = session.get(url_login3)
        body = r.json()['invoiceData'][0]

        # 4 - вызов getToken()
        mobileNumber = last_sender_message['mobileNumber']
        token = main.get_token_postkz(session, mobileNumber)

        body['token'] = token
        body['invoiceId'] = invoiceId
        body['systemId'] = 'POSTKZ'
        body['details'][0]['amount'] = amount
        body['details'][0]['commission'] = 0

        # 5 - вызов createPayment()
        url_login5 = 'https://post.kz/mail-app/api/v2/payments/create'
        r = session.post(url_login5, json=body)
        payment_id = r.json()['paymentData']['id']

        # 6 - вызов getCards()
        url_login6 = 'https://post.kz/mail-app/api/intervale/card?device=mobile'
        sd2 = {"blockedAmount": "", "phone": mobileNumber, "paymentId": "", "returnUrl": "", "transferId": ""}
        r = session.post(url_login6, json=sd2)

        card = r.json()[last_sender_message['chosenCardIndex']]
        sd2 = {}
        sd2['phone'] = mobileNumber
        sd2['paymentId'] = payment_id
        sd2['cardId'] = card['id']
        sd2['csc'] = message
        sd2['token'] = token
        sd2['returnUrl'] = 'https://post.kz/static/return.html'

        # 7 - вызов startPayment()
        url_login7 = 'https://post.kz/mail-app/api/intervale/payment/start/' + token
        r = session.post(url_login7, json=sd2)

        # 8 - вызов statusPayment()
        url_login8 = 'https://post.kz/mail-app/api/intervale/payment/status/' + token
        sd22 = {}
        sd22['phone'] = mobileNumber
        sd22['paymentId'] = payment_id
        r = session.post(url_login8, json=sd22)

        # 9 - вызов acceptPayment()
        url_login9 = 'https://post.kz/mail-app/api/intervale/payment/accept/' + token
        r = session.post(url_login9, json=sd2)

        # 10 - вызов statusPayment()
        url_login10 = 'https://post.kz/mail-app/api/intervale/payment/status/' + token
        r = session.post(url_login10, json=sd22)
        data = r.json()
        if data['state'] == 'redirect':
            main.reply_send_redirect_url(sender, data['url'])
            time.sleep(5)

        timer = 0
        while timer < timeout:
            time.sleep(1)
            r = session.post(url_login10, json=sd22)
            data = r.json()
            if data['state'] == 'result':
                result_status = data['result']['status']
                if result_status == 'fail':
                    main.reply(sender, "Платеж не был завершен успешно. Попробуйте снова")
                elif result_status == 'success':
                    res = "Поздравляю! Платеж был проведен успешно, карта Онай " + onaiToRefill + " пополнена на сумму " + str(
                        amount) + " тг.\n"
                    res += "Номер квитанции: " + str(payment_id)
                    res += ", она доступна на post.kz в разделе История платежей"
                    main.reply(sender, res)
                main.reply_main_menu_buttons(sender, last_sender_message)
                return "ok"
            timer += 1

        last_sender_message = main.mongo_get_by_sender(sender)
        if last_sender_message['payload'] == 'onai.startPayment':
            strminutes = str(timeout // 60)
            main.reply(sender, "Прошло больше " + strminutes + " минут: платеж отменяется")
            main.reply_main_menu_buttons(sender, last_sender_message)
        return "time exceed"
    except:
        main.reply(sender, "Произошла непредвиденная ошибка, попробуйте позднее")
        main.reply_main_menu_buttons(sender, last_sender_message)
        logging.error(helper.PrintException())
        return "fail"
Exemplo n.º 4
0
def reply_astanaErc_startPayment(sender, message, last_sender_message):
    if not helper.check_csc(message):
        main.reply(
            sender,
            "Вы неправильно ввели трёхзначный код CSC/CVV2 на обратной стороне карты, введите заново"
        )
        return "ok"
    main.reply(sender, "Идет обработка платежа...")
    main.reply_typing_on(sender)
    # 1 - авторизация на post.kz
    try:
        session = main.get_authorized_session(
            last_sender_message['encodedLoginPass'])
        mobileNumber = last_sender_message['mobileNumber']
        token = main.get_token_postkz(session, mobileNumber)
        invoiceData = get_komuslugi_invoice(last_sender_message)
        invoiceData['systemId'] = 'POSTKZ'
        invoiceData['token'] = token
        invoiceData['invoiceId'] = invoiceData['id']
        c = 0
        for i in invoiceData['details']:
            invoiceData['details'][c]['amount'] = math.ceil(
                invoiceData['details'][c]['amount'])
            c += 1

        # 5 - createPayment
        url_login5 = 'https://post.kz/mail-app/api/v2/payments/create'
        r = session.post(url_login5, json=invoiceData)
        payment_id = r.json()['paymentData']['id']

        # 6 - вызов getCards()
        url_login6 = 'https://post.kz/mail-app/api/intervale/card?device=mobile'
        sd2 = {
            "blockedAmount": "",
            "phone": mobileNumber,
            "paymentId": "",
            "returnUrl": "",
            "transferId": ""
        }
        r = session.post(url_login6, json=sd2)
        card = r.json()[last_sender_message['chosenCardIndex']]

        sd2 = {}
        sd2['phone'] = mobileNumber
        sd2['paymentId'] = payment_id
        sd2['cardId'] = card['id']
        sd2['csc'] = message
        sd2['token'] = token
        sd2['returnUrl'] = 'https://post.kz/static/return.html'

        # 7 - вызов startPayment()
        url_login7 = 'https://post.kz/mail-app/api/intervale/payment/start/' + token
        r = session.post(url_login7, json=sd2)

        # 8 - вызов statusPayment()
        url_login8 = 'https://post.kz/mail-app/api/intervale/payment/status/' + token
        sd22 = {}
        sd22['phone'] = mobileNumber
        sd22['paymentId'] = payment_id
        r = session.post(url_login8, json=sd22)

        # 9 - вызов acceptPayment()
        url_login9 = 'https://post.kz/mail-app/api/intervale/payment/accept/' + token
        r = session.post(url_login9, json=sd2)

        # 10 - вызов statusPayment()
        url_login10 = 'https://post.kz/mail-app/api/intervale/payment/status/' + token
        r = session.post(url_login10, json=sd22)
        data = r.json()
        if data['state'] == 'redirect':
            main.reply_send_redirect_url(sender, data['url'])
            time.sleep(5)

        timer = 0
        while timer < main.timeout:
            time.sleep(1)
            r = session.post(url_login10, json=sd22)
            data = r.json()
            if data['state'] == 'result':
                result_status = data['result']['status']
                if result_status == 'fail':
                    main.reply(
                        sender,
                        "Платеж не был завершен успешно. Попробуйте снова")
                elif result_status == 'success':
                    res = "Поздравляю! Платеж был проведен успешно, квитанция счёта Астана ЕРЦ " + \
                          last_sender_message['astanaErc_last_acc'] + " оплачена на сумму " + str(amount) + " тг.\n"
                    res += "Номер квитанции: " + str(payment_id)
                    res += ", она доступна на post.kz в разделе История платежей"
                    main.reply(sender, res)
                last_sender_message['payload'] = 'astanaErc.finished'
                main.mongo_update_record(last_sender_message)
                main.reply_typing_off(sender)
                main.reply_main_menu_buttons(sender)
                return "ok"
            timer += 1

        last_sender_message = main.mongo_get_by_sender(sender)
        if last_sender_message['payload'] == 'astanaErc.startPayment':
            strminutes = str(main.timeout // 60)
            main.reply(
                sender,
                "Прошло больше " + strminutes + " минут: платеж отменяется")
            main.reply_typing_off(sender)
            main.reply_main_menu_buttons(sender)
            last_sender_message['payload'] = 'mainMenu'
            main.mongo_update_record(last_sender_message)
        return "time exceed"

    except Exception as e:
        main.reply(sender,
                   "Произошла непредвиденная ошибка, попробуйте позднее")
        main.reply_typing_off(sender)
        main.reply_main_menu_buttons(sender)
        logging.error(helper.PrintException())
        return "fail"
Exemplo n.º 5
0
def reply_card2cash_history_startPayment(sender, message, last_sender_message):
    if not helper.check_csc(message):
        main.reply(
            sender,
            "Вы неправильно ввели трёхзначный код CSC/CVV2 на обратной стороне карты, введите заново"
        )
        return "ok"
    main.reply(sender, "Идёт обработка перевода, подождите 1-2 минуты...")
    main.reply_typing_on(sender)
    try:
        token = last_sender_message['card2cash_token']
        session = requests.Session()
        headers = {
            'Content-Type':
            'application/x-www-form-urlencoded',
            'X-Channel-Id':
            x_channel_id,
            'X-IV-Authorization':
            'Identifier ' + last_sender_message['mobileNumber']
        }

        url_token_show = url + portal_id + '/payment/' + token
        r = session.get(url_token_show, headers=headers)
        data = r.json()

        url_token = url + portal_id + '/token'
        r = session.post(url_token, headers=headers)
        new_token = r.json()['token']

        data1 = {
            'paymentId': "MoneyTransfer_KazPost_Card2Cash",
            'returnUrl': 'https://post.kz/static/return.html',
            'src.type': 'card_id',
            'src.cardholder': 'NAME',
            'src.cardId': data['src']['cardId'],
            'src.csc': message,
            'src.addToProfile': 'true',
            'amount': str(data['amount']),
            'commission': str(data['commission']),
            'total': str(data['amount'] + data['commission']),
            'currency': data['currency'],
            'params.transfType': data['params']['transfType'],
            'params.transfPurpose': data['params']['transfPurpose'],
            'params.cliResident': data['params']['cliResident'],
            'params.cliTaxcode': data['params']['cliTaxcode'],
            'params.cliLastname': data['params']['cliLastname'],
            'params.cliName': data['params']['cliName'],
            'params.cliAddr': data['params']['cliAddr'],
            'params.cliPhone': data['params']['cliPhone'],
            'params.passportType': data['params']['passportType'],
            'params.passportNum': data['params']['passportNum'],
            'params.passportDate': data['params']['passportDate'],
            'params.passportOrg': data['params']['passportOrg'],
            'params.rcpnLastname': data['params']['rcpnLastname'],
            'params.rcpnName': data['params']['rcpnName'],
            'params.rcpnAddr': data['params']['rcpnAddr'],
            'params.rcpnPhone': data['params']['rcpnPhone'],
            'params.codeWord': data['params']['codeWord'],
        }
        url_start = url + portal_id + '/payment/' + new_token + '/start'
        requests.post(url_start, data1, headers=headers)

        url_status = url + portal_id + '/payment/' + new_token
        timer = 0
        urlSent = False
        main.reply_typing_on(sender)
        while timer < timeout:
            if urlSent:
                time.sleep(1)
            r = session.post(url_status, headers=headers).json()
            if r['state'] == 'redirect' and not urlSent:
                main.reply_send_redirect_url(sender, r['url'])
                urlSent = True
            if r['state'] == 'result':
                if r['result']['status'] == 'fail':
                    main.reply(
                        sender,
                        "Перевод не был завершен успешно. Попробуйте снова")
                if r['result']['status'] == 'suspended':
                    main.reply(
                        sender,
                        "Возникла проблема на стороне банка, перевод не был осуществлён. Попробуйте позже"
                    )
                if r['result']['status'] == 'success':
                    res = "Поздравляю! Перевод был проведен успешно!"
                    res += "\nВнимание! Сообщите контрольный номер перевода и кодовое слово получателю перевода"
                    res += "\nКонтрольный номер перевода: " + r['result'][
                        'transferCode']
                    res += "\nКонтрольное слово: " + data['params']['codeWord']
                    main.reply(sender, res)
                main.reply_main_menu_buttons(sender, last_sender_message)
                return
            timer += 1

        last_sender_message = main.mongo_get_by_sender(sender)
        if last_sender_message['payload'] == 'card2cash.show':
            strminutes = str(timeout // 60)
            main.reply(
                sender,
                "Прошло больше " + strminutes + " минут: перевод отменяется")
            main.reply_main_menu_buttons(sender, last_sender_message)
        return "time exceed"
    except:
        main.reply(sender,
                   "Произошла непредвиденная ошибка, попробуйте позднее")
        logging.error(helper.PrintException())