def __init__(self): self.alipay = Alipay(self.pid, self.key, self.seller_email) self.wapalipay = WapAlipay(self.pid, self.key, self.seller_email)
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