3
Myg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j0 Z1ndZ.e/dj0 Z1e/d j0 Z2e+e.e2e1de-Z3e+j4d!Z5ej Z6e3j7e5d"d#Z8ej Z9e:e9e6  e8rve:e8 dZ;xe<d$D ]Z=ej>d% e3j?e5Z@e:d&e= d' e:e@jAd(d) e@jAd(d)d*krd+Z;e:d, P n$e@jAd(d)d-kr4e:d. ne:d/ qW e;rbe:d0 e:e3jBe5d1 ne:d2 e3jCe5 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j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$   3/root/web/minike/my_server/alifacepay/alifacepay.py__init__8   s    
zAliFacePay.__init__c             C   s   t  }||_||_||_d|_d|_|r.||_t|d}| j|_d}d}y| j	j
|}W n. tk
r }	 zttj  W Y dd}	~	X nX |std nHt }
|
j| |
j r|
j}n(t|
jd |
j d |
j d |
j  |S )u=   
        系统接口示例：alipay.trade.precreate
        Z5m)	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   s2    


&zAliFacePay.precreatec             C   s   t  }||_t|d}d}i }y| jj|}W n. tk
r\ } zttj  W Y dd}~X nX |sltd njt	 }|j
| |j 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}y| jj|}W n. tk
r\ } zttj  W Y dd}~X nX |sltd nFt	 }|j
| |j rd}n(t|jd |j d |j d |j  |S )u:   
        系统接口示例：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}y| jj|}W n. tk
r\ } zttj  W Y dd}~X nX |sltd nFt	 }|j
| |j rd}n(t|jd |j d |j d |j  |S )u:   
        系统接口示例：alipay.trade.cancel
        )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}y| jj|}W n. tk
rb } zttj	  W Y dd}~X nX |srtd nFt
 }|j| |j 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)   rC   Zrefund_modelZrefund_requestZrefund_response_contentr?   r9   Zrefund_responser$   r$   r%   refund  s&    


&zAliFacePay.refundc             C   s   |j dd }|j d t|j dd dd}djdd	 |D j }yt| jjd
jd
||}|S  tk
r } zdS d }~X nX d S )NsignZ	sign_typec             S   s   | d S )Nr   r$   )r9   r$   r$   r%   <lambda>C  s    z/AliFacePay.verify_params_sign.<locals>.<lambda>F)keyreverse&c             s   s   | ]\}}d j ||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#   paramsrE   messagestatusr9   r$   r$   r%   verify_params_sign?  s    
zAliFacePay.verify_params_sign
   c             C   s,   d}x"t |D ]}|ttdd }qW |S )Nr   r   	   )rangestrr   )clslengths_r$   r$   r%   get_rand_stringL  s    zAliFacePay.get_rand_stringc             C   s6   t jdt jt j  }|| j  }|r2|d | }|S )Nz%Y%m%d%H%M%Sr_   )timestrftime	localtimer`   )r\   Z
pre_string	timestampZtrade_nor$   r$   r%   gen_trade_noT  s
    zAliFacePay.gen_trade_no)NF)N)rX   )N)__name__
__module____qualname__logging	getLoggerr   r&   r:   r>   r@   rB   rD   rW   classmethodr`   re   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{Gz?u   测试      u	   开始弟u   次轮询...r<   r   TRADE_SUCCESSTu   支付成功WAIT_BUYER_PAYu   等待用户支付u!   等待用户扫描付款二维码u   退款   u   取消订单u   付款二维码生成失败)Dri   r0   randomr   ra   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   rf   sandboxr   openreadalipay_public_key_stringapp_private_key_stringpayre   r)   startr:   r4   endr/   ZpaidrZ   isleepr>   Zquery_resultgetrD   r@   r$   r$   r$   r%   <module>   s~     .




