Beispiel #1
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())
Beispiel #2
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)
Beispiel #3
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)
Beispiel #4
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)
Beispiel #5
0
def handle_voice_message(sender, voice_url, last_sender_message):
    logging.info("Handling audio")
    try:
        main.reply_typing_on(sender)
        start = time.time()
        g = requests.get(voice_url, stream=True)
        logging.info('requests.get(voice_url) time = ' +
                     str(time.time() - start))
        voice_filename = "voice_" + sender + ".mp4"
        #voice_filename_mp3 = "voice_" + sender + ".mp3"
        voice_filename_wav = "voice_" + sender + ".wav"
        with open(voice_filename, "wb") as o:
            start = time.time()
            o.write(g.content)
            logging.info('o.write(g.content) time = ' +
                         str(time.time() - start))
        start = time.time()
        #AudioSegment.from_file(voice_filename, "mp4").export(voice_filename_mp3, format="mp3")
        AudioSegment.from_file(voice_filename,
                               "mp4").export(voice_filename_wav, format="wav")
        logging.info('AudioSegment export time = ' + str(time.time() - start))
        with open(voice_filename_wav, 'rb') as f:
            try:
                start = time.time()
                resp = client.speech(f, None, {'Content-Type': 'audio/wav'})
                if "_text" in resp:
                    main.reply(sender, resp['_text'])
                logging.info('Wit.ai client.speech response time = ' +
                             str(time.time() - start))
                logging.info('Yay, got Wit.ai response: ' + str(resp))
                handle_entities(sender, last_sender_message, resp)
            except:
                logging.info(helper.PrintException())
                main.reply(sender, "Извините, я не поняла что Вы сказали")
        main.reply_typing_off(sender)
        try:
            os.remove(voice_filename)
            #os.remove(voice_filename_mp3)
            os.remove(voice_filename_wav)
        except:
            pass
    except:
        logging.error(helper.PrintException())
Beispiel #6
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())
Beispiel #7
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"
Beispiel #8
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"
Beispiel #9
0
def reply_mobile_startPayment(sender, message, last_sender_message):
    main.reply(sender, "Идет обработка платежа...")
    main.reply_typing_on(sender)
    # 1 - авторизация на post.kz
    try:
        url_login = '******'
        headers = {"Authorization": "Basic " + last_sender_message['encodedLoginPass'],
                   'Content-Type': 'application/json'}

        session = requests.Session()
        r = session.get(url_login, headers=headers)

        # 2 - вызов createSubscription() из PaymentAPI
        url_login2 = 'https://post.kz/mail-app/api/v2/subscriptions'
        login = last_sender_message['login']
        operatorId = last_sender_message['mobileOperator']
        phoneToRefill = last_sender_message['phoneToRefill']
        amount = last_sender_message['amount']
        sd2 = {"id": "", "login": login, "operatorId": operators_dict[operatorId],
               "data": phoneToRefill, "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()
        url_login4 = 'https://post.kz/mail-app/api/intervale/token?device=mobile'
        mobileNumber = last_sender_message['mobileNumber']
        sd2 = {"blockedAmount": "", "phone": mobileNumber, "paymentId": "", "returnUrl": "", "transferId": ""}
        r = session.post(url_login4, json=sd2)
        token = r.json()['token']

        body['token'] = token
        body['invoiceId'] = invoiceId
        body['systemId'] = 'mobile'
        body['details'][0]['amount'] = amount
        body['details'][0]['commission'] = last_sender_message['commission']
        # print ('#############################################')
        # print (body)

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

        # 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 + '?device=mobile'
        r = session.post(url_login7, json=sd2)

        # 8 - вызов statusPayment()
        url_login8 = 'https://post.kz/mail-app/api/intervale/payment/status/' + token + '?device=mobile'
        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 + '?device=mobile'
        r = session.post(url_login9, json=sd2)

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

        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 = "Поздравляю! Платеж был проведен успешно, номер " + phoneToRefill + " пополнен на сумму " + 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'] == 'mobile.startPayment':
            strminutes = str(timeout // 60)
            main.reply(sender, "Прошло больше " + strminutes + " минут: платеж отменяется")
            main.reply_main_menu_buttons(sender, last_sender_message)
        return "time exceed"
    except Exception:
        logging.error(helper.PrintException())
        main.reply(sender, "Произошла непредвиденная ошибка, попробуйте позднее")
        main.reply_main_menu_buttons(sender, last_sender_message)
        return "fail"
Beispiel #10
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"
Beispiel #11
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)
Beispiel #12
0
def handle_voice_message_yandex(sender, voice_url, last_sender_message):
    main.reply_typing_on(sender)
    payload = last_sender_message['payload']
    if payload in payload_dict:
        data = {
            'url': voice_url,
            'source': 'facebook',
            'id': sender,
            'topic': 'numbers'
        }
        start = time.time()
        r = requests.post(aws_url, json=data)
        logging.info('requests.post(aws_url) time = ' +
                     str(time.time() - start))
        if r.status_code == 404:
            main.reply(
                sender,
                "Произошла ошибка при обработке аудио-сообщения, попробуйте ещё раз"
            )
        data = r.json()
        yandex_numbers = data['numbers']
        if payload == 'balance':
            mobile.reply_mobile_check_number(sender,
                                             yandex_numbers,
                                             last_sender_message,
                                             is_voice=True)
        elif payload == 'mobile.amount':
            mobile.reply_mobile_amount(sender,
                                       yandex_numbers,
                                       last_sender_message,
                                       is_voice=True)
        elif payload == 'card2card':
            card2card.reply_card2card_check_cardDst(sender,
                                                    yandex_numbers,
                                                    last_sender_message,
                                                    is_voice=True)
        elif payload == 'card2card.amount':
            card2card.reply_card2card_amount(sender,
                                             yandex_numbers,
                                             last_sender_message,
                                             is_voice=True)
        elif payload == 'onai':
            onai.reply_onai(sender,
                            yandex_numbers,
                            last_sender_message,
                            is_voice=True)
        elif payload == 'onai.amount':
            onai.reply_onai_amount(sender,
                                   yandex_numbers,
                                   last_sender_message,
                                   is_voice=True)
    else:
        data = {
            'url': voice_url,
            'source': 'facebook',
            'id': sender,
            'topic': 'queries'
        }
        start = time.time()
        r = requests.post(aws_url, json=data)
        logging.info('requests.post(aws_url) time = ' +
                     str(time.time() - start))
        logging.info(r.json())
        if r.status_code == 404:
            main.reply(
                sender,
                "Произошла ошибка при обработке аудио-сообщения, попробуйте ещё раз"
            )
        data = r.json()
        intent = data['intent']
        handle_intent(sender, last_sender_message, intent)
Beispiel #13
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"
Beispiel #14
0
def reply_card2cash_history(sender, last_sender_message):
    main.reply_typing_on(sender)
    if main.check_login(sender, last_sender_message):
        try:
            main.reply_typing_on(sender)

            url_history = url + portal_id + '/payment/?pageSize=30&pageNumber=0&result=success&portalType=web'
            headers = {
                'Content-Type':
                'application/x-www-form-urlencoded',
                'X-Channel-Id':
                x_channel_id,
                'X-IV-Authorization':
                'Identifier ' + last_sender_message['mobileNumber']
            }
            r = requests.get(url_history, headers=headers)
            history_items = r.json()['items']
            card2cash_items = []
            for h in history_items:
                if h['paymentId'] == 'MoneyTransfer_KazPost_Card2Cash':
                    amount = str(h['amount'] // 100)
                    card_title = h['src']['title'][-4:]
                    desc_length = 20 - 2 - len(
                        amount
                    ) - 4  # 20 - button title limit, 2 - for > and :, 4 - last 4 digits
                    description = h['description'][:desc_length]
                    title = card_title + '>' + description + ':' + amount
                    item = {'title': title, 'token': h['token']}
                    card2cash_items.append(item)

            elements = []
            buttons = []
            count = 0
            if len(card2cash_items) == 0:
                main.reply(
                    sender,
                    'Пожалуйста, инициируйте операцию по переводу на руки на портале transfer.post.kz\n'
                    'Данная функция предназначена только для повторных операций'
                )
                return
            for i in card2cash_items:
                if count > 0 and count % 3 == 0:
                    elements.append({
                        'title': 'Выберите перевод (Карта>Кому:Сумма)',
                        'buttons': buttons
                    })
                    buttons = []
                buttons.append({
                    "type": "postback",
                    "title": i['title'],
                    "payload": i['token']
                })
                count += 1
            elements.append({
                'title': 'Выберите перевод (Карта>Кому:Сумма)',
                'buttons': buttons
            })
            data_items_buttons = {
                "recipient": {
                    "id": sender
                },
                "message": {
                    "attachment": {
                        "type": "template",
                        "payload": {
                            "template_type": "generic",
                            "elements": elements
                        }
                    }
                }
            }
            requests.post(fb_url, json=data_items_buttons)
            last_sender_message['payload'] = 'card2cash'
            main.mongo_update_record(last_sender_message)
        except:
            logging.error(helper.PrintException())
Beispiel #15
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())