U
    ·PyeP  ã                   @   s‚  d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( e j)e j*ddd G dd„ dƒZ+e,dkr~dZ-e-rBdZ.e/dƒ 0¡ Z1ndZ.e/dƒ 0¡ Z1e/d ƒ 0¡ Z2e+e.e2e1de-ƒZ3e+ 4d!¡Z5e ¡ Z6e3 7e5d"d#¡Z8e ¡ Z9e:e9e6 ƒ e8rve:e8ƒ dZ;e<d$ƒD ]„Z=e >d%¡ e3 ?e5¡Z@e:d&e=› d'ƒ e:e@ Ad(d)¡ƒ e@ Ad(d)¡d*krd+Z;e:d,ƒ  qBn$e@ Ad(d)¡d-kr6e:d.ƒ ne:d/ƒ q¼e;rbe:d0ƒ e:e3 Be5d1¡ƒ ne:d2ƒ e3 Ce5¡ ne:d3ƒ dS )4é    N)Úrandint)ÚAlipayClientConfig)ÚDefaultAlipayClient)ÚAlipayTradePrecreateModel)ÚAlipayTradePrecreateRequest)ÚAlipayTradePrecreateResponse)ÚAlipayTradeQueryModel)ÚAlipayTradeQueryRequest)ÚAlipayTradeQueryResponse)ÚAlipayTradeCancelModel)ÚAlipayTradeCancelRequest)ÚAlipayTradeCancelResponse)ÚAlipayTradeCloseModel)ÚAlipayTradeCloseRequest)ÚAlipayTradeCloseResponse)ÚAlipayTradeRefundModel)ÚAlipayTradeRefundRequest)ÚAlipayTradeRefundResponse)Úverify_with_rsaz%%(asctime)s %(levelname)s %(message)sÚa)ÚlevelÚformatÚfilemodec                   @   sn   e Zd Ze d¡Zddd„Zddd„Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zeddd„ƒZeddd„ƒZdS )Ú
AliFacePayÚ NFc                 C   s<   t |d}||_||_||_t|tjd| _|| _|| _dS )u¥   
        è®¾ç½®é…ç½®ï¼ŒåŒ…æ‹¬æ”¯ä»˜å®ç½‘å…³åœ°å€ã€app_idã€åº”ç”¨ç§é’¥ã€æ”¯ä»˜å®å…¬é’¥ç­‰ï¼Œå…¶ä»–é…ç½®å€¼å¯ä»¥æŸ¥çœ‹AlipayClientConfigçš„å®šä¹‰ã€‚
        )Úsandbox_debug)Úalipay_client_configÚloggerN)	r   Úapp_idÚapp_private_keyÚalipay_public_keyr   r   r   ÚclientÚ
notify_url)Úselfr   r   r    r"   r   r   © r$   ú,/volume2/web/minike/alifacepay/alifacepay.pyÚ__init__8   s    
zAliFacePay.__init__c              
   C   sâ   t ƒ }||_||_||_d|_d|_|r.||_t|d}| j|_d}d}z| j	 
|¡}W n. tk
r† }	 ztt ¡ ƒ W 5 d}	~	X Y nX |s–tdƒ nHtƒ }
|
 |¡ |
 ¡ r¶|
j}n(t|
jd |
j d |
j d |
j ƒ |S )u=   
        ç³»ç»ŸæŽ¥å£ç¤ºä¾‹ï¼šalipay.trade.precreate
        Z5m©Z	biz_modelNzfailed execute precreateú,)r   Úout_trade_noÚtotal_amountÚsubjectZtimeout_expressZqr_code_timeout_expressÚbodyr   r"   r!   ÚexecuteÚ	ExceptionÚprintÚ	tracebackÚ
format_excr   Úparse_response_contentÚ
is_successÚqr_codeÚcodeÚmsgÚsub_codeÚsub_msg)r#   r)   r*   r+   r,   Zprecreate_modelZprecreate_requestZprecreate_response_contentr4   ÚeZprecreate_responser$   r$   r%   Ú	precreateU   s4    


ÿzAliFacePay.precreatec              
   C   sÚ   t ƒ }||_t|d}d}i }z| j |¡}W n. tk
r\ } ztt ¡ ƒ W 5 d}~X Y nX |sltdƒ njt	ƒ }| 
|¡ | ¡ r®|j|d< |j|d< |j|d< |j|d< n(t|jd |j d |j d |j ƒ |S )	u9   
        ç³»ç»ŸæŽ¥å£ç¤ºä¾‹ï¼šalipay.trade.query
        r'   Nzfailed execute queryr)   Úbuyer_logon_idÚtrade_statusr*   r(   )r   r)   r	   r!   r-   r.   r/   r0   r1   r
   r2   r3   r;   r<   r*   r5   r6   r7   r8   )r#   r)   Zquery_modelZquery_requestZquery_response_contentZret_dictr9   Úquery_responser$   r$   r%   Úquery˜   s,    





ÿzAliFacePay.queryc              
   C   s¶   t ƒ }||_t|d}d}d}z| j |¡}W n. tk
r\ } ztt ¡ ƒ W 5 d}~X Y nX |sltdƒ nFt	ƒ }| 
|¡ | ¡ rŠd}n(t|jd |j d |j d |j ƒ |S )õ:   
        ç³»ç»ŸæŽ¥å£ç¤ºä¾‹ï¼šalipay.trade.cancel
        r'   NFzfailed execute cancelTr(   )r   r)   r   r!   r-   r.   r/   r0   r1   r   r2   r3   r5   r6   r7   r8   )r#   r)   Zcancel_modelZcancel_requestZcancel_response_contentÚretr9   Zcancel_responser$   r$   r%   ÚcancelÄ   s&    


ÿzAliFacePay.cancelc              
   C   s¶   t ƒ }||_t|d}d}d}z| j |¡}W n. tk
r\ } ztt ¡ ƒ W 5 d}~X Y nX |sltdƒ nFt	ƒ }| 
|¡ | ¡ rŠd}n(t|jd |j d |j d |j ƒ |S )r?   r'   NFzfailed execute closeTr(   )r   r)   r   r!   r-   r.   r/   r0   r1   r   r2   r3   r5   r6   r7   r8   )r#   r)   Zclose_modelÚclose_requestZclose_response_contentr@   r9   Zclose_responser$   r$   r%   Úcloseí   s&    


ÿzAliFacePay.closec           	   
   C   s¼   t ƒ }||_||_t|d}d}d}z| j |¡}W n. tk
rb } ztt 	¡ ƒ W 5 d}~X Y nX |srtdƒ nFt
ƒ }| |¡ | ¡ rd}n(t|jd |j d |j d |j ƒ |S )u:   
        ç³»ç»ŸæŽ¥å£ç¤ºä¾‹ï¼šalipay.trade.refund
        r'   NFzfailed execute refundTr(   )r   r)   Úrefund_amountr   r!   r-   r.   r/   r0   r1   r   r2   r3   r5   r6   r7   r8   )	r#   r)   rD   Zrefund_modelZrefund_requestZrefund_response_contentr@   r9   Zrefund_responser$   r$   r%   Úrefund  s(    


ÿzAliFacePay.refundc              
   C   s’   |  dd ¡}|  d¡ t| ¡ dd„ dd}d dd	„ |D ƒ¡ ¡ }z t| j d
¡ d
¡||ƒ}|W S  tk
rŒ } z
W Y ¢dS d }~X Y nX d S )NÚsignZ	sign_typec                 S   s   | d S )Nr   r$   )r9   r$   r$   r%   Ú<lambda>C  ó    z/AliFacePay.verify_params_sign.<locals>.<lambda>F)ÚkeyÚreverseú&c                 s   s   | ]\}}d   ||¡V  qdS )z{}={}N)r   )Ú.0ÚkÚvr$   r$   r%   Ú	<genexpr>D  s     z0AliFacePay.verify_params_sign.<locals>.<genexpr>zutf-8)	ÚpopÚsortedÚitemsÚjoinÚencoder   r    Údecoder.   )r#   ÚparamsrF   ÚmessageÚstatusr9   r$   r$   r%   Úverify_params_sign?  s    
ÿzAliFacePay.verify_params_signé
   c                 C   s(   d}t |ƒD ]}|ttddƒƒ }q|S )Nr   r   é	   )ÚrangeÚstrr   )ÚclsÚlengthÚsÚ_r$   r$   r%   Úget_rand_stringL  s    zAliFacePay.get_rand_stringc                 C   s6   t  dt  t   ¡ ¡¡}||  ¡  }|r2|d | }|S )Nz%Y%m%d%H%M%Sra   )ÚtimeÚstrftimeÚ	localtimerb   )r^   Z
pre_stringÚ	timestampZtrade_nor$   r$   r%   Úgen_trade_noT  s
    zAliFacePay.gen_trade_no)NF)N)rZ   )N)Ú__name__Ú
__module__Ú__qualname__ÚloggingÚ	getLoggerr   r&   r:   r>   rA   rC   rE   rY   Úclassmethodrb   rg   r$   r$   r$   r%   r   5   s   


C,)'+r   Ú__main__FÚ2016092900626816z2G:/python/alipay_key/alipay_public_key_sandbox.txtÚ2021004128647975z./alipay_public_key.txtz./app_private_key.pemZhello_202312121621g{®Gáz„?u   æµ‹è¯•é   é   u	   å¼€å§‹å¼Ÿu   æ¬¡è½®è¯¢...r<   r   ÚTRADE_SUCCESSTu   æ”¯ä»˜æˆåŠŸZWAIT_BUYER_PAYu   ç­‰å¾…ç”¨æˆ·æ”¯ä»˜u!   ç­‰å¾…ç”¨æˆ·æ‰«æä»˜æ¬¾äºŒç»´ç u   é€€æ¬¾é   u   å–æ¶ˆè®¢å•u   ä»˜æ¬¾äºŒç»´ç ç”Ÿæˆå¤±è´¥)Drk   r0   Úrandomr   rc   Z!alipay.aop.api.AlipayClientConfigr   Z"alipay.aop.api.DefaultAlipayClientr   Z/alipay.aop.api.domain.AlipayTradePrecreateModelr   Z2alipay.aop.api.request.AlipayTradePrecreateRequestr   Z4alipay.aop.api.response.AlipayTradePrecreateResponser   Z+alipay.aop.api.domain.AlipayTradeQueryModelr   Z.alipay.aop.api.request.AlipayTradeQueryRequestr	   Z0alipay.aop.api.response.AlipayTradeQueryResponser
   Z,alipay.aop.api.domain.AlipayTradeCancelModelr   Z/alipay.aop.api.request.AlipayTradeCancelRequestr   Z1alipay.aop.api.response.AlipayTradeCancelResponser   Z+alipay.aop.api.domain.AlipayTradeCloseModelr   Z.alipay.aop.api.request.AlipayTradeCloseRequestr   Z0alipay.aop.api.response.AlipayTradeCloseResponser   Z,alipay.aop.api.domain.AlipayTradeRefundModelr   Z/alipay.aop.api.request.AlipayTradeRefundRequestr   Z1alipay.aop.api.response.AlipayTradeRefundResponser   Z"alipay.aop.api.util.SignatureUtilsr   ÚbasicConfigÚINFOr   rh   Úsandboxr   ÚopenÚreadÚalipay_public_key_stringÚapp_private_key_stringÚpayrg   r)   Ústartr:   r4   Úendr/   Zpaidr\   ÚiÚsleepr>   Úquery_resultÚgetrE   rA   r$   r$   r$   r%   Ú<module>   s€   ý  .




