o
    πi@2                     @   sd  d dl Z d dlZd dlZd dlZd dlmZmZmZ d dlm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlZddlmZ d dlmZmZmZ e eZed	d
Zdd Ze ZdZededu  dZ d(de!de"de#fddZ$de%de#fddZ&de"de"defddZ'de	defdd Z(e)ej*e kde	ded!efd"d#Z+e,ed$d%e
defd&d'Z-dS ))    N)RouterFBot)CallbackQueryMessageInlineKeyboardMarkupInlineKeyboardButton)
FSMContext)Command   )
save_order)get_user_languageget_language_textget_button_text	cryptobot)namec               
   C   s   zOt jt jt} t j| d}td|  t|ddd%}t	|}|
d}t|r8d|d d  d	nd
 |W  d    W S 1 sHw   Y  W d S  tyj } ztd|  W Y d }~d S d }~ww )Nzcrypto_api.jsonzLooking for config at: rzutf-8)encodingcryptobot_tokenzToken loaded: 
   z...zToken not foundu/   Ошибка загрузки crypto_api.json: )ospathdirnameabspath__file__joinprintopenjsonloadget	Exceptionloggererror)current_dirconfig_pathfconfigtokene r*   E/var/www/www-root/data/www/magazinbotpanel.site/handlers/cryptobot.pyload_cryptobot_token   s   

 (r,   zhttps://pay.crypt.bot/apizCRYPTOBOT_TOKEN loaded: check_payment_crypto   Оплата товараamountdescriptionreturnc           	   
      s  t s
td dS t d}t dd}dt| |ddd	d	d
d}td|   zt 4 I dH p}|j|||d4 I dH L}|	 I dH }td|  |
drl|
dW  d  I dH  W  d  I dH  W S td|  	 W d  I dH  W d  I dH  W dS 1 I dH sw   Y  W d  I dH  W dS 1 I dH sw   Y  W dS  ty } ztd|  W Y d}~dS d}~ww )u2   
    Создает инвойс в CryptoBot
    CryptoBot token not loadedNz/createInvoicezapplication/json)Crypto-Pay-API-TokenzContent-TypeUSDTviewItemzhttps://t.me/your_botFi  )assetr/   r0   paid_btn_namepaid_btn_urlallow_commentsallow_anonymous
expires_inzCreating invoice for amount: )headersr   zCryptoBot API response: okresultzCryptoBot API error: zCryptoBot request error: )CRYPTOBOT_TOKENr"   r#   CRYPTOBOT_API_URLstrr   aiohttpClientSessionpostr   r    r!   )	r/   r0   urlr<   datasessionresponser>   r)   r*   r*   r+   create_cryptobot_invoice,   sL   


2	rI   
invoice_idc              
      s  t s
td dS t d}dt i}t| dd}zt 4 I dH t}|j|||d4 I dH P}| I dH }t	d|  |d	rj|d
i drj|d
 d d W  d  I dH  W  d  I dH  W S 	 W d  I dH  W d  I dH  W dS 1 I dH sw   Y  W d  I dH  W dS 1 I dH sw   Y  W dS  t
y } ztd|  W Y d}~dS d}~ww )uE   
    Проверяет статус инвойса в CryptoBot
    r2   Nz/getInvoicesr3   r   )invoice_idscount)r<   paramszCheck invoice response: r=   r>   itemsr   zCryptoBot check invoice error: )r?   r"   r#   r@   rA   rB   rC   r    r   r   r!   )rJ   rE   r<   rM   rG   rH   r>   r)   r*   r*   r+   check_cryptobot_invoiceV   s:   

2rO   langinvoice_urlc                 C   s>   t | dd}t | dd}tt||dgt|tdggd}|S )ub   
    Создает клавиатуру с кнопками оплаты и проверки
    button17u   💳 Оплатитьbutton15u#   ✅ Проверить оплату)textrE   )rT   callback_data)inline_keyboard)r   r   r   CHECK_PAYMENT_CB)rP   rQ   pay_button_textcheck_button_textkeyboardr*   r*   r+   build_payment_keyboardv   s   r[   cbstatec              
      s  | j j}t|}td | I dH }|d}|d}|r$|dkr1d}| j|I dH  dS ddlm	} z*t
|}	|	 }
|
d|f |
 }|	  |r^|d r^t|d  nd	}W n ty} } ztd
|  d	}W Y d}~nd}~ww t|d| dI dH }|r|dsd}| j|I dH  dS td|d   |j|d |dI dH  t|dpd}t|dpd}|j|d d| }t||d }| jj||dI dH }|j|jdI dH  dS )ug   
    Обработчик оплаты через CryptoBot - вызывается из catalog.py
    z-=== HANDLE CRYPTOBOT PAYMENT FROM CATALOG ===Nproduct_base_price
product_idr   u4   Ошибка: неверная цена товара)DATA_DBz6SELECT product_name FROM products WHERE product_id = ?u
   ТоварzError getting product name: u   Оплата товара: )r/   r0   pay_urluQ   Ошибка: не удалось создать инвойс для оплатыzInvoice created: rJ   )cryptobot_invoice_idcryptobot_amounttext13u    Оплатите : {amount} USDTtext14u9   Для оплаты нажмите кнопку ниже:)r/   z

)reply_markup)payment_message_id)	from_useridr   r   get_datar    messageanswerdbr`   sqlite3connectcursorexecutefetchonecloserA   stripr!   r"   r#   rI   update_datar   formatr[   
message_id)r\   r]   user_idrP   
state_data
base_pricer_   
error_textr`   conncurrowproduct_namer)   invoiceamount_textdescription_textpayment_textrZ   payment_messager*   r*   r+   handle_cryptobot_payment   sV   


$r   botc              
      s  | j j}t|}td td|  | I dH }|d}|d}td|  td|  |sKt|dp;d	}| j|I dH  td
 dS t	|I dH }	|	sjt|dpZd	}| j|I dH  td dS |	dd}
td|
  |
dkrz|r|j
| jjj|dI dH  td|  W n ty } ztd|  W Y d}~nd}~ww td|  t||d|I dH }|rtd ntd t|dpd}| j|I dH  td | I dH  dS t|dpd	}| j|ddI dH  td|
 d dS )uT   
    Обработчик кнопки проверки оплаты (button15)
    z=== CHECK PAYMENT CALLBACK ===User: Nrb   rg   Invoice ID from state: zPayment message ID: text16   Оплата не прошла'No invoice ID in state - sending text16%Invoice check failed - sending text16statusactiveInvoice status: paid)chat_idrw   zDeleted payment message: z Error deleting payment message: zState data for order save: r   z6Order successfully saved to database via order_save.pyz2Failed to save order to database via order_save.pytext15)   Оплата прошла успешно!#Payment successful - sending text15T)
show_alertPayment not completed (status: z) - showing alert)rh   ri   r   r   rj   r    r   rk   rl   rO   delete_messagechatr!   r   clear)r\   r]   r   rx   rP   ry   rJ   rg   r{   invoice_datar   r)   order_savedsuccess_textr*   r*   r+   check_payment_callback   sZ   


r   checkrk   c                    sp  | j j}t|}td td|  | I dH }|d}td|  |s>t|dp/d}| |I dH  td dS t|I dH }|s\t|dpMd}| |I dH  td	 dS |d
d}td|  |dkrt	||d| j
I dH }	|	rtd ntd t|dpd}
| |
I dH  td | I dH  dS t|dpd}| |I dH  td| d dS )uN   
    Команда /check - проверяет статус оплаты
    z=== CHECK PAYMENT COMMAND ===r   Nrb   r   r   r   r   r   r   r   r   r   r   z$Order successfully saved to databasez Failed to save order to databaser   r   r   r   z) - sending text16)rh   ri   r   r   rj   r    r   rl   rO   r   r   r   )rk   r]   rx   rP   ry   rJ   r{   r   r   r   r   r*   r*   r+   check_payment_command  sB   

r   )r.   ).loggingr   r   rn   aiogramr   r   r   aiogram.typesr   r   r   r   aiogram.fsm.contextr	   aiogram.filtersr
   rB   
order_saver   rm   r   r   r   	getLogger__name__r"   routerr,   r?   r@   r   rW   floatrA   dictrI   intrO   r[   r   callback_queryrF   r   rk   r   r*   r*   r*   r+   <module>   s4    

* BE