示例#1
0
def handle_attachments(sender, last_sender_message, attachment):
    attachment_type = attachment['type']
    payload = last_sender_message['payload']
    if attachment_type == 'location':
        if payload == 'nearest.postamats' or payload == 'nearest.offices' or payload == 'nearest.atms':
            coordinates = attachment['payload']['coordinates']
            main.reply_nearest_find(sender, coordinates['long'],
                                    coordinates['lat'], payload)
        else:
            main.reply(sender,
                       "А для чего Вы мне отправили своё местоположение?")
    if attachment_type == 'audio':
        last_sender_message['sendVoice'] = True
        main.mongo_update_record(last_sender_message)
        try:
            t = threading.Thread(
                target=voice_assistant.handle_voice_message_yandex,
                args=(
                    sender,
                    attachment['payload']['url'],
                    last_sender_message,
                ))
            t.setDaemon(True)
            t.start()
        except:
            logging.error(helper.PrintException())
示例#2
0
def check_login_and_cards(sender, last_sender_message):
    try:
        encodedLoginPass = last_sender_message['encodedLoginPass']
        assert encodedLoginPass != None
        session = requests.Session()
        headers = {
            "Authorization": "Basic " + encodedLoginPass,
            'Content-Type': 'application/json'
        }
        url_login = '******'
        r = session.get(url_login, headers=headers)
        assert r.status_code != 401
    except:
        main.reply(
            sender,
            "Требуется авторизация, пожалуйста, отправьте логин и пароль профиля на post.kz через "
            "пробел. Если у вас нет аккаунта, то зарегистрируйтесь в https://post.kz/register"
        )
        last_sender_message['payload'] = 'auth'
        main.mongo_update_record(last_sender_message)
        return False

    hasCards = main.reply_has_cards(sender, last_sender_message)
    if not hasCards:
        main.reply(
            sender, "У вас отсутствуют добавленные карты в post.kz. "
            "Чтобы добавить, введите 16ти-значный номер карты")
        last_sender_message['payload'] = 'addcard'
        main.mongo_update_record(last_sender_message)
        return False

    return True
示例#3
0
def reply_pdd_shtrafy_iin_enter(sender, last_sender_message):
    pddIINs = []
    try:
        pddIINs = last_sender_message['pddIINs']
    except:
        last_sender_message['pddIINs'] = []

    try:
        assert len(pddIINs) > 0
        buttons = []
        for iin in pddIINs:
            buttons.append({
                "content_type": "text",
                "payload": "pddIIN.last",
                "title": iin
            })
        buttons.append({
            "content_type": "text",
            "payload": "pddIIN.delete",
            "title": "Удалить ИИН"
        })
        data_quick_replies = {
            "recipient": {
                "id": sender
            },
            "message": {
                "text": "Выберите ИИН или введите его\n" + hint_main_menu,
                "quick_replies": buttons
            }
        }
        requests.post(fb_url, json=data_quick_replies)
    except:
        main.reply(sender, "Введите 12-ти значный ИИН\n" + hint_main_menu)
    last_sender_message['payload'] = '4.IIN'
    main.mongo_update_record(last_sender_message)
示例#4
0
def reply_card2card_amount(sender, message, last_sender_message, is_voice=None):
    added_text = ''
    if is_voice:
        added_text = 'Вы продиктовали сумму ' + message + '.\n'
    amount = 0
    minAmount = 500
    maxAmount = 494070
    try:
        amount = int(message)
    except:
        main.reply(sender, added_text + "Вы неправильно ввели сумму перевода. Введите сумму заново")
        return "again"

    if amount < minAmount:
        main.reply(sender, added_text + "Сумма перевода должна быть не менее " + str(minAmount) + " тг. Введите сумму заново")
        return "again"

    if amount > maxAmount:
        main.reply(sender, added_text + "Сумма перевода должна быть не более " + str(maxAmount) + " тг. Введите сумму заново")
        return "again"
    if is_voice:
        main.reply_just_text(sender, added_text)
    last_sender_message['payload'] = 'card2card.chooseCard'
    last_sender_message['amount'] = amount
    main.mongo_update_record(last_sender_message)
    main.reply_display_cards(sender, last_sender_message)
示例#5
0
def reply_tracking(sender, tracking_number, last_sender_message):
    tracking_number = tracking_number.upper()
    data = requests.get("https://post.kz/external-api/tracking/api/v2/" +
                        tracking_number + "/events").json()
    data2 = requests.get("https://post.kz/external-api/tracking/api/v2/" +
                         tracking_number).json()
    try:
        error = data2['error']
        main.reply(
            sender, error +
            '\n(Чтобы узнать статус другой посылки, отправьте её трек-номер либо нажмите (y) для перехода в главное меню)'
        )
        return "not found"
    except:
        new_mapping = requests.get(
            "https://post.kz/static/new_mappings.json").json()
        t_date = data['events'][0]['date']
        t_time = data['events'][0]['activity'][0]['time']
        t_datetime = t_date + " " + t_time
        t_status = data['events'][0]['activity'][0]['status'][0]
        t_address = data2['last']['address']
        t_status_mapping = new_mapping[t_status]['mapping']
        result = "Информация об отправлении " + tracking_number + '\n'
        result += "Статус: " + t_status_mapping + '\n' + t_address + '\n' + t_datetime + '\n'
        result += "(Чтобы узнать статус другой посылки, выберите или отправьте её трек-номер " \
                  "либо нажмите (y) для перехода в главное меню)" + '\n'

        if not tracking_number in last_sender_message['trackingNumbers'] and \
                        len(last_sender_message['trackingNumbers']) < 10:
            last_sender_message['trackingNumbers'].append(tracking_number)

        reply_tracking_quick_replies_with_delete(
            sender, last_sender_message['trackingNumbers'], result)
        main.mongo_update_record(last_sender_message)
        return "ok"
示例#6
0
def reply_onai(sender, message, last_sender_message, is_voice=None):
    added_text = ''
    if is_voice:
        added_text = 'Вы продиктовали номер ' + helper.insert_spaces_onai(message) + '.\n'
    url_login = '******'
    message = message.replace(' ', '')
    r = requests.post(url_login, json={"operatorId": "onai", "data": message})
    if r.status_code == 404:
        main.reply(sender, added_text + "Вы ввели неправильный номер карты Онай, введите еще раз")
        return "wrong onai number"

    if is_voice:
        buttons = [{"content_type": "text", "payload": "onai.again", "title": "Ввести номер заново"}]
        data_quick_replies = {
            "recipient": {"id": sender},
            "message": {
                "text": added_text + "Введите сумму пополнения баланса (не менее 100 тг, комиссия 0 тг)",
                "quick_replies": buttons
            }
        }
        requests.post(fb_url, json=data_quick_replies)
    else:
        main.reply(sender, added_text + "Введите сумму пополнения баланса (не менее 100 тг, комиссия 0 тг)")
    last_sender_message['onaiToRefill'] = message
    try:
        if not "onaisToRefill" in last_sender_message:
            last_sender_message['onaisToRefill'] = []
        if not message in last_sender_message['onaisToRefill'] and len(last_sender_message['onaisToRefill']) < 10:
            last_sender_message['onaisToRefill'].append(message)
    except:
        logging.error(helper.PrintException())

    last_sender_message['payload'] = 'onai.amount'
    main.mongo_update_record(last_sender_message)
示例#7
0
def reply_mobile_amount(sender, message, last_sender_message, is_voice=None):
    added_text = ''
    if is_voice:
        added_text = 'Вы продиктовали сумму ' + message + '.\n'
    amount = 0
    minAmount = last_sender_message['minAmount']
    try:
        amount = int(message)
    except:
        main.reply(sender, added_text + "Вы неправильно ввели сумму пополнения баланса. Введите сумму заново")
        return "again"

    if amount < minAmount:
        main.reply(sender, added_text + "Сумма пополнения баланса должна быть не менее " +
                   str(minAmount) + " тг. Введите сумму заново")
        return "again"
    if is_voice:
        main.reply_just_text(sender, added_text)

    main.reply_display_cards(sender, last_sender_message)
    operator = last_sender_message['mobileOperator']
    commission = 0
    if operator == 'Activ' or operator == 'Kcell':
        commission = amount / 10
        if commission > 70:
            commission = 70
    elif operator == 'Tele2' or operator == 'Beeline':
        commission = 50
    last_sender_message['commission'] = commission
    last_sender_message['payload'] = 'mobile.chooseCard'
    last_sender_message['amount'] = amount
    main.mongo_update_record(last_sender_message)
示例#8
0
def reply_card2card_enter_cardDst(sender, last_sender_message):
    if main.check_login(sender, last_sender_message):
        try:
            cardDsts = last_sender_message['cardDsts']
            assert len(cardDsts) > 0
            buttons = []
            for card in cardDsts:
                card = helper.insert_4_spaces(card)
                buttons.append({"content_type": "text", "payload": "card2card.last", "title": card})
            buttons.append({"content_type": "text", "payload": "card2card.delete", "title": "Удалить карту"})
            buttons.append({"content_type": "text", "payload": "card2card.info", "title": "Информация"})
            data_quick_replies = {
                "recipient": {"id": sender},
                "message": {
                    "text": "Выберите номер карты получателя или введите его\n" + hint_main_menu,
                    "quick_replies": buttons
                }
            }
            requests.post(fb_url, json=data_quick_replies)
        except:
            main.reply(sender, card2card_info +
                       "\n\nВведите 16ти-значный номер карты, на который Вы хотите перевести деньги\n" + hint_main_menu)
        last_sender_message['lastCommand'] = 'card2card'
        last_sender_message['payload'] = 'card2card'
        main.mongo_update_record(last_sender_message)
示例#9
0
def call_addcard(sender, last_sender_message, payload):
    if main.check_login(sender, last_sender_message):
        addcard.reply_addcard_entercard(sender, last_sender_message)
        last_sender_message['payload'] = payload
        main.mongo_update_record(last_sender_message)
        return True
    return False
示例#10
0
def reply_pdd_shtrafy_gosnomer_delete_gosnomer(sender, text,
                                               last_sender_message):
    last_sender_message['pddGosnomers'].remove(text)
    main.reply(sender, "Авто " + text + " успешно удалён")
    reply_pdd_shtrafy_gosnomer_enter(sender, last_sender_message)
    last_sender_message['payload'] = '4.GosNomer'
    main.mongo_update_record(last_sender_message)
示例#11
0
def reply_card2card_check_cardDst(sender, message, last_sender_message, is_voice=None):
    added_text = ''
    if is_voice:
        added_text = 'Вы продиктовали номер карты ' + helper.insert_4_spaces(message) + '.\n'
    message = message.replace(' ', '')
    if len(message) != 16:
        main.reply(sender, added_text + "Вы ввели не все 16 цифр карты, попробуйте ещё раз")
        return "cardDst.again"
    if not message.isdigit():
        main.reply(sender, added_text + "Некоторые введенные Вами цифры не являются цифрами, попробуйте ещё раз")
        return "cardDst.again"
    if is_voice:
        buttons = [{"content_type": "text", "payload": "card2card.again", "title": "Ввести номер заново"}]
        data_quick_replies = {
            "recipient": {"id": sender},
            "message": {
                "text": added_text + "Введите сумму перевода (от 500 до 494070; комиссия 1,2%, минимум 300 тенге)\n" + hint_main_menu,
                "quick_replies": buttons
            }
        }
        requests.post(fb_url, json=data_quick_replies)
    else:
        main.reply(sender, "Введите сумму перевода (от 500 до 494070; комиссия 1,2%, минимум 300 тенге)\n" + hint_main_menu)

    last_sender_message['lastCardDst'] = message
    last_sender_message['payload'] = 'card2card.amount'
    try:
        if not "cardDsts" in last_sender_message:
            last_sender_message['cardDsts'] = []
        if not message in last_sender_message['cardDsts'] and len(last_sender_message['cardDsts']) < 9:
            last_sender_message['cardDsts'].append(message)
    except:
        logging.error(helper.PrintException())
    main.mongo_update_record(last_sender_message)
示例#12
0
def reply_card2cash_history_show(sender, last_sender_message, token):
    try:
        main.reply_typing_on(sender)
        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 = requests.get(url_token_show, headers=headers)
        data = r.json()
        result = "Проверьте введённые данные:" \
                "\nКарта: " + data['src']['title'] + \
                "\nСумма: " + str(data['amount'] // 100) + \
                "\nКомиссия: " + str(data['commission'] // 100) + \
                "\nИтого: " + str((int(data['amount'])+int(data['commission'])) // 100) + \
                "\nФИО получателя: " + data['params']['rcpnLastname'] + " " + data['params']['rcpnName'] + \
                "\nАдрес получателя: " + data['params']['rcpnAddr'] + \
                "\nНомер телефона получателя: " + data['params']['rcpnPhone'] + \
                "\nКодовое слово: " + data['params']['codeWord'] + \
                "\n\nЧтобы подтвердить перевод, введите трехзначный код CSC/CVV2 на обратной стороне карты"
        main.reply(sender, result)
        last_sender_message['card2cash_token'] = token
        main.mongo_update_record(last_sender_message)
    except:
        main.reply(sender,
                   "Произошла непредвиденная ошибка, попробуйте позднее")
        logging.error(helper.PrintException())
示例#13
0
def reply_mobile_check_number(sender, message, last_sender_message, is_voice=None):
    added_text = 'Вы продиктовали номер ' + message + '.\n'
    main.reply_typing_on(sender)
    url_login = '******'
    message = message.replace(' ', '')
    message = message[-10:]
    r = requests.post(url_login, json={"phone": message})
    operator = r.json()['operator']

    if operator == 'error':
        if is_voice:
            main.reply(sender, added_text + "К сожалению, он оказался неправильным. Попробуйте еще раз")
        else:
            main.reply(sender, "Вы ввели неправильный номер телефона. Попробуйте еще раз")
        return "error"

    operator = operator[:-2].title()
    minAmount = 0
    if operator == 'Tele2' or operator == 'Beeline':
        minAmount = 100
    elif operator == 'Activ' or operator == 'Kcell':
        minAmount = 200
    else:
        main.reply(sender, "Оператор " + operator + " сейчас не поддерживается. Введите другой номер, пожалуйста.")
        return "other operator"

    last_sender_message['mobileOperator'] = operator
    last_sender_message['payload'] = 'mobile.amount'
    last_sender_message['phoneToRefill'] = message

    try:
        if not "phonesToRefill" in last_sender_message:
            last_sender_message['phonesToRefill'] = []
        if not message in last_sender_message['phonesToRefill'] and len(last_sender_message['phonesToRefill']) < 10:
            last_sender_message['phonesToRefill'].append(message)
    except:
        logging.error(helper.PrintException())

    last_sender_message['minAmount'] = minAmount
    main.mongo_update_record(last_sender_message)

    title = added_text + "Оператор номера: " + operator + \
            "\nВведите или продиктуйте сумму пополнения баланса (не менее " + str(minAmount) + " тг)"
    if is_voice:
        buttons = [{"content_type": "text", "payload": "mobile.voice_number.again", "title": "Ввести номер заново"}]
        data_quick_replies = {
            "recipient": {"id": sender},
            "message": {
                "text": title,
                "quick_replies": buttons
            }
        }
        requests.post(fb_url, json=data_quick_replies)
    else:
        main.reply_just_text(sender, title)
示例#14
0
def reply_tracking_enter_number(sender, last_sender_message):
    if not 'trackingNumbers' in last_sender_message:
        last_sender_message['trackingNumbers'] = []
    trackingNumbers = last_sender_message['trackingNumbers']
    if len(trackingNumbers) > 0:
        text = "Выберите трек-номер или введите его\n" + hint_main_menu
        reply_tracking_quick_replies_with_delete(sender, trackingNumbers, text)
    else:
        main.reply(sender, "Введите трек-номер посылки\n" + hint_main_menu)
    last_sender_message['payload'] = 'tracking'
    main.mongo_update_record(last_sender_message)
示例#15
0
def reply_addcard_checkcardowner(sender, message, last_sender_message):
    last_sender_message['addcard_cardowner'] = message
    res = 'Проверьте данные:\n'
    res += 'Номер карты: ' + helper.insert_4_spaces(
        last_sender_message['addcard_cardnumber']) + '\n'
    res += 'Срок действия: ' + last_sender_message['addcard_expiredate'][:2] + '/' + \
                              last_sender_message['addcard_expiredate'][2:] + '\n'
    res += 'Имя на карте: ' + last_sender_message['addcard_cardowner'] + '\n'
    res += '\nЕсли всё верно, введите трехзначный код CSC/CVV2 на обратной стороне карты, чтобы добавить эту карту'
    last_sender_message['payload'] = 'addcard.csc'
    main.mongo_update_record(last_sender_message)
    main.reply(sender, res)
示例#16
0
def reply_addcard_checkcard(sender, message, last_sender_message):
    message = message.replace(' ', '')
    if len(message) != 16:
        main.reply(sender, "Вы ввели не все 16 цифр карты, попробуйте ещё раз")
        return "addcard.again"
    if not helper.isAllDigits(message):
        main.reply(
            sender,
            "Некоторые введенные Вами цифры не являются цифрами, попробуйте ещё раз"
        )
        return "addcard.again"
    last_sender_message['addcard_cardnumber'] = message
    last_sender_message['payload'] = 'addcard.expiredate'
    main.mongo_update_record(last_sender_message)
    main.reply(
        sender, "Введите месяц и год срока действия карты (например, 0418)\n" +
        hint_main_menu)
示例#17
0
def reply_pdd_shtrafy_gosnomer(sender, message, last_sender_message):
    main.reply_typing_on(sender)
    data = {'operatorId': 'pddVehicle', 'data': message.replace(' ', '/')}
    result = check_penalties_pdd(last_sender_message, data)
    try:
        if not "pddGosnomers" in last_sender_message:
            last_sender_message['pddGosnomers'] = []
        if not message in last_sender_message['pddGosnomers'] and len(
                last_sender_message['pddIINs']) < 10:
            last_sender_message['pddGosnomers'].append(message)
    except:
        logging.error(helper.PrintException())

    result += "(Выберите или введите другой номер авто/техпаспорт через пробел (пример: 123AAA01 AA00000000), " \
              "чтобы посмотреть штрафы ПДД, либо нажмите (y) для перехода в главное меню)"
    reply_pdd_shtrafy_gosnomer_quick_replies_with_delete(
        sender, last_sender_message['pddGosnomers'], result)
    main.mongo_update_record(last_sender_message)
示例#18
0
def reply_pdd_shtrafy_iin(sender, message, last_sender_message):
    main.reply_typing_on(sender)
    try:
        year = int(message[:2])
        month = int(message[2:4])
        day = int(message[4:6])
        century = int(message[6:7])
        assert month <= 12
        month31days = [1, 3, 5, 7, 8, 10, 12]
        month30days = [4, 6, 9, 11]
        if year % 4 == 0 and month == 2:
            assert day <= 28
        if month in month30days:
            assert day <= 30
        if month in month31days:
            assert day <= 31
        assert century <= 6
    except:
        main.reply(sender, "Вы ввели неправильный ИИН, введите еще раз")
        return "again"
    url_login = '******' + message
    r = requests.get(url_login).json()
    try:
        name = r['name']
    except:
        main.reply(sender, "Такой ИИН не найден, введите еще раз")
        return "again"

    data = {'operatorId': 'pddIin', 'data': message}
    result = check_penalties_pdd(last_sender_message, data)
    try:
        if not "pddIINs" in last_sender_message:
            last_sender_message['pddIINs'] = []
        if not message in last_sender_message['pddIINs'] and len(
                last_sender_message['pddIINs']) < 10:
            last_sender_message['pddIINs'].append(message)
    except:
        logging.error(helper.PrintException())

    result += "(Выберите или введите другой ИИН, чтобы посмотреть штрафы ПДД, " \
              "либо нажмите (y) для перехода в главное меню)"
    reply_pdd_shtrafy_iin_quick_replies_with_delete(
        sender, last_sender_message['pddIINs'], result)
    main.mongo_update_record(last_sender_message)
示例#19
0
def reply_astanaErc(sender, message, last_sender_message):
    main.reply_typing_on(sender)
    try:
        if not main.check_login(sender, last_sender_message):
            return
        data = {'operatorId': 'astanaErcWf', 'data': message}
        result, status = get_komuslugi(last_sender_message, data)
        if result == 'error':
            return
        if not "astanaErc_accounts" in last_sender_message:
            last_sender_message['astanaErc_accounts'] = []
        if not message in last_sender_message['astanaErc_accounts'] and len(
                last_sender_message['astanaErc_accounts']) < 10:
            last_sender_message['astanaErc_accounts'].append(message)

        reply_astanaErc_quick_replies_with_delete(
            sender, last_sender_message['astanaErc_accounts'], result, status)
        last_sender_message['astanaErc_last_acc'] = message
        main.mongo_update_record(last_sender_message)
    except:
        logging.error(helper.PrintException())
示例#20
0
def reply_astanaErc_enter(sender, last_sender_message):
    astanaErc_accounts = []
    try:
        astanaErc_accounts = last_sender_message['astanaErc_accounts']
    except:
        last_sender_message['astanaErc_accounts'] = []

    try:
        assert len(astanaErc_accounts) > 0
        buttons = []
        for acc in astanaErc_accounts:
            buttons.append({
                "content_type": "text",
                "payload": "astanaErc.last",
                "title": acc
            })
        buttons.append({
            "content_type": "text",
            "payload": "astanaErc.delete",
            "title": "Удалить лицевой счёт"
        })
        data_quick_replies = {
            "recipient": {
                "id": sender
            },
            "message": {
                "text":
                "Выберите номер лицевого счёта Астана ЕРЦ или введите его\n" +
                main.hint_main_menu,
                "quick_replies":
                buttons
            }
        }
        requests.post(fb_url, json=data_quick_replies)
    except:
        main.reply(
            sender,
            "Введите номер лицевого счёта Астана ЕРЦ\n" + main.hint_main_menu)
    last_sender_message['payload'] = 'astanaErc.enter'
    main.mongo_update_record(last_sender_message)
示例#21
0
def handle_messages_when_deactivated(sender, data, last_sender_message):
    try:
        sticker_id = data['entry'][0]['messaging'][0]['message']['sticker_id']
        data_quick_replies = {
            "recipient": {
                "id": sender
            },
            "message": {
                "text":
                "Вы хотите включить бота?",
                "quick_replies": [{
                    "content_type": "text",
                    "title": "Да, включить бота",
                    "payload": "activate.bot"
                }, {
                    "content_type": "text",
                    "title": "Нет",
                    "payload": "deactivate.bot"
                }]
            }
        }
        requests.post(fb_url, json=data_quick_replies)
        return
    except:
        pass

    try:
        payload = data['entry'][0]['messaging'][0]['message']['quick_reply'][
            'payload']
        if payload == 'activate.bot':
            last_sender_message['isBotActive'] = True
            main.mongo_update_record(last_sender_message)
            main.reply(sender, "Бот включен")
            main.reply_main_menu_buttons(sender, last_sender_message)
        if payload == 'deactivate.bot':
            main.reply(
                sender,
                "Хорошо! Если Вы хотите включить бота, нажмите кнопку (y)")
    except:
        return
示例#22
0
def call_disable_bot(sender, last_sender_message, payload):
    data_quick_replies = {
        "recipient": {
            "id": sender
        },
        "message": {
            "text":
            "Вы хотите отключить бота?",
            "quick_replies": [{
                "content_type": "text",
                "title": "Да, отключить бота",
                "payload": "disable.bot.yes"
            }, {
                "content_type": "text",
                "title": "Нет",
                "payload": "disable.bot.no"
            }]
        }
    }
    requests.post(fb_url, json=data_quick_replies)
    last_sender_message['payload'] = payload
    main.mongo_update_record(last_sender_message)
示例#23
0
def reply_addcard_checkexpiredate(sender, message, last_sender_message):
    message = message.replace(' ', '')
    message = message.replace('.', '')
    message = message.replace('/', '')
    if len(message) != 4:
        main.reply(
            sender,
            "Вы должны ввести 4 цифры (2 на месяц, 2 на год), попробуйте ещё раз"
        )
        return "addcard.expiredateagain"
    if not helper.isAllDigits(message):
        main.reply(
            sender,
            "Некоторые введенные Вами цифры не являются цифрами, попробуйте ещё раз"
        )
        return "addcard.expiredateagain"
    last_sender_message['addcard_expiredate'] = message
    last_sender_message['payload'] = 'addcard.cardowner'
    main.mongo_update_record(last_sender_message)
    main.reply(
        sender,
        "Введите имя и фамилию на карте латинскими буквами\n" + hint_main_menu)
示例#24
0
def reply_pdd_shtrafy_gosnomer_enter(sender, last_sender_message):
    pddGosnomers = []
    try:
        pddGosnomers = last_sender_message['pddGosnomers']
    except:
        last_sender_message['pddGosnomers'] = []

    try:
        assert len(pddGosnomers) > 0
        buttons = []
        for gn in pddGosnomers:
            buttons.append({
                "content_type": "text",
                "payload": "pddGosnomer.last",
                "title": gn
            })
        buttons.append({
            "content_type": "text",
            "payload": "pddGosnomer.delete",
            "title": "Удалить авто"
        })
        data_quick_replies = {
            "recipient": {
                "id": sender
            },
            "message": {
                "text":
                "Выберите номер авто/техпаспорт или введите из через пробел (пример: 123AAA01 AA00000000)\n"
                + hint_main_menu,
                "quick_replies":
                buttons
            }
        }
        requests.post(fb_url, json=data_quick_replies)
    except:
        main.reply(sender, gosnomer_text + "\n" + hint_main_menu)
    last_sender_message['payload'] = '4.GosNomer'
    main.mongo_update_record(last_sender_message)
示例#25
0
def reply_mobile_enter_number(sender, last_sender_message):
    if main.check_login(sender, last_sender_message):
        phonesToRefill = last_sender_message['phonesToRefill']
        if len(phonesToRefill) > 0:
            buttons = []
            for phone in phonesToRefill:
                buttons.append({"content_type": "text", "payload": "mobile.last", "title": phone})

            buttons.append({"content_type": "text", "payload": "mobile.delete", "title": "Удалить номер"})

            data_quick_replies = {
                "recipient": {"id": sender},
                "message": {
                    "text": "Выберите номер телефона или введите его, либо продиктуйте номер, "
                            "отправив голосовое сообщение\n" + hint_main_menu,
                    "quick_replies": buttons
                }
            }
            requests.post(fb_url, json=data_quick_replies)
        else:
            main.reply(sender, "Введите номер телефона\n" + hint_main_menu)
        last_sender_message['payload'] = 'balance'
        main.mongo_update_record(last_sender_message)
示例#26
0
def reply_astanaErc_delete_acc(sender, text, last_sender_message):
    last_sender_message['astanaErc_accounts'].remove(text)
    main.reply(sender, "Лицевой счёт " + text + " успешно удалён")
    reply_astanaErc_enter(sender, last_sender_message)
    last_sender_message['payload'] = 'astanaErc.enter'
    main.mongo_update_record(last_sender_message)
示例#27
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"
示例#28
0
def reply_mobile_delete_phone(sender, text, last_sender_message):
    last_sender_message['phonesToRefill'].remove(text)
    main.reply(sender, "Номер " + text + " успешно удалён")
    reply_mobile_enter_number(sender, last_sender_message)
    last_sender_message['payload'] = 'balance'
    main.mongo_update_record(last_sender_message)
示例#29
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"
示例#30
0
def reply_astanaErc_chooseCard(sender, last_sender_message):
    main.reply_typing_on(sender)
    main.reply_display_cards(sender, last_sender_message)
    last_sender_message['lastCommand'] = 'astanaErc'
    main.mongo_update_record(last_sender_message)