Example #1
0
    def __init__(self):

        self.alipay = Alipay(self.pid, self.key, self.seller_email)
        self.wapalipay = WapAlipay(self.pid, self.key, self.seller_email)
Example #2
0
class PayClient(object):
    '''支付相关操作'''

    pid = '2088021225071376'   # 支付宝身份
    key = '17fhrz37x3tnsiy49codp9nj78jieycu'  # 加密key
    seller_email = '*****@*****.**'  # 商家账户

    domain = 'http://5a1bedac.ngrok.io'   #域名 需要修改 测试时用ngrok反代理解决
    call_back_url = domain + '/order/order_callback/'  # 付款成功用户点击返回商家的链接
    notify_url = domain + '/order/order_notify/'  # 支付宝通知网站支付成功的链接
    #refund_notify_url = domain + '/order/refund_notify/'  # 支付宝通知网站退款成功的链接

    def __init__(self):

        self.alipay = Alipay(self.pid, self.key, self.seller_email)
        self.wapalipay = WapAlipay(self.pid, self.key, self.seller_email)

    def pay_url(self, order):
        '''
                    创建支付的链接
                    创建:2015年8月3日下午5:26:46 李鹏飞
                    更新:2015年8月3日下午5:26:46 李鹏飞
            :param: order:订单表信息
            :return: 
            :rtype: 
        '''
        subject = u'GuoShop商城'
        body = u'商品:%s,颜色:%s,大小:%s,总价:%s,数量:%s,地址:%s' % (order.product.title, order.color,
                                                  order.size,
                                                  order.totalprice, order.num, order.address.address)
        params = {'out_trade_no': order.orderid,
                  'subject': subject,
                  'total_fee': str(order.totalprice),
                  'body': body,
                  'seller_account_name': self.seller_email,
                  'call_back_url': self.call_back_url,  # 跳转链接
                  'notify_url': self.notify_url,  # 通知链接,异步通知
                  }
        return self.wapalipay.create_direct_pay_by_user_url(**params)

    def check_sign(self, params):
        '''
                    验证支付宝通知的参数签名
                    创建:2015年8月4日上午9:48:53 李鹏飞
                    更新:2015年8月4日上午9:48:53 李鹏飞
            :param: params: POST里的参数
            :return: 
            :rtype: 
        '''
        result = self.wapalipay.verify_notify(**params)
        if result:
            logger.debug(u'支付宝通知验证签名成功')
        else:
            logger.debug(u'支付宝通知验证签名失败')
        return result

    def update_pay(self, notify_dict):
        '''
                    更新订单为已付款
                    创建:2015年8月4日上午10:26:53 李鹏飞
                    更新:2015年8月4日上午10:26:53 李鹏飞
            :param: notify_dict: post里的xml参数字典
            :return: 1: 付款成功, 2:已付款, 3:失败,参数不对
            :rtype:
        '''
        try:
            buyer_email = notify_dict['notify']['buyer_email']  # 买家
            trade_no = notify_dict['notify']['trade_no']  # 支付宝单号
            out_trade_no = notify_dict['notify']['out_trade_no']  # 站内单号
            trade_status = notify_dict['notify']['trade_status']  # TRADE_SUCCESS
            total_fee = notify_dict['notify']['total_fee']  # 金额
        except Exception as e:
            logger.error(e)
            re = 3
        else:
            try:
                # 查询订单
                order = Order.objs.get(orderid=out_trade_no, real_price=total_fee)
            except Exception as e:
                logger.error(e)
                re = 3
            else:
                if order.state in ['0', '1', '2', '3', '7']:  # 已付款
                    logger.info(u'订单已付款[%s]' % order.id)
                    re = 2
                elif order.state == '0':  # 未付款 15分钟内的
                    if trade_status == 'TRADE_SUCCESS':
                        order.state = '3'
                        order.save()
                        re = 1
                        logger.info(u'更新订单付款成功[%s]' % order.id)
                    else:
                        logger.error(u'付款失败,不符合付款条件,[%s]' % trade_status)
                        re = 3
                else:
                    re = 3
        return re