def get(self, request, *args, **kwargs): try: instance = VIPInfo.objects.get(user=self.request.user) serializer = self.get_serializer(instance) return Response(xresult(data=serializer.data)) except Exception as ex: log.error(ex) return Response(xresult(data={'status': False}))
def get(self, request, *args, **kwargs): """ 生成订单 调起H5支付 跳转到微信支付 :param request: |参数|类型|是否必填|说明|: |package_id|int|是|套餐ID| ### 示例 GET /api/v1/vip/pay/wechat_h5/paying/?package_id=1 :return: |参数|类型|说明| |href_url|string|跳转微信支付页面链接| """ package_id = request.GET.get('package_id') order = VIPOrder.create_order(request.user, package_id) if order: # 获取二维码链接 wxh5payconf_pub = WxH5PayConf_pub() unifiedorderh5_pub = UnifiedOrderH5_pub() total_fee = int(order.price * 100) attach_data = settings.LMS_ROOT_URL + reverse("vip_purchase") unifiedorderh5_pub.setParameter("body", order.name) out_trade_no = create_trade_id(order.id) order.pay_type = VIPOrder.PAY_TYPE_BY_WECHAT_H5 order.outtradeno = out_trade_no try: order.save() unifiedorderh5_pub.setParameter("out_trade_no", out_trade_no) unifiedorderh5_pub.setParameter("total_fee", str(total_fee)) unifiedorderh5_pub.setParameter( "notify_url", wxh5payconf_pub.NOTIFY_URL) unifiedorderh5_pub.setParameter("trade_type", "MWEB") unifiedorderh5_pub.setParameter("attach", attach_data) client_ip = unifiedorderh5_pub.get_client_ip(request) unifiedorderh5_pub.setParameter("spbill_create_ip", client_ip) prepay_id = unifiedorderh5_pub.getPrepayId() mweb_url = unifiedorderh5_pub.getMwebUrl() # 返回页面时不使用缓存 random_str = str(random.randint(100000, 999999)) redirect_url = settings.LMS_ROOT_URL + reverse("membership_card") + "?random=" +random_str mweb_url = mweb_url + "&redirect_url=" + quote_plus(redirect_url) data = { 'mweb_url': mweb_url } return Response(xresult(data=data)) except Exception as ex: log.error(ex) return Response(xresult(msg='fail', code=-1)) else: return Response(xresult(msg='fail', code=-1))
def get(self, request, *args, **kwargs): """ 生成订单 生成微信支付二维码 二维码链接 code_url 跳转到微信支付二维码页面 href_url :param request: |参数|类型|是否必填|说明|: |package_id|int|是|套餐ID| ### 示例 GET /api/v1/vip/pay/wechat/paying/?package_id=1 :return: |参数|类型|说明| |href_url|string|跳转微信支付页面链接| """ package_id = request.GET.get('package_id') order = VIPOrder.create_order(request.user, package_id) if order: # 获取二维码链接 wxpayconf_pub = WxPayConf_pub() unifiedorder_pub = UnifiedOrder_pub() total_fee = int(order.price * 100) attach_data = settings.LMS_ROOT_URL + reverse("vip_purchase") unifiedorder_pub.setParameter("body", order.name) out_trade_no = create_trade_id(order.id) order.pay_type = VIPOrder.PAY_TYPE_BY_WECHAT order.outtradeno = out_trade_no order.save() unifiedorder_pub.setParameter("out_trade_no", out_trade_no) unifiedorder_pub.setParameter("total_fee", str(total_fee)) unifiedorder_pub.setParameter( "notify_url", wxpayconf_pub.NOTIFY_URL) unifiedorder_pub.setParameter("trade_type", "NATIVE") unifiedorder_pub.setParameter("attach", attach_data) code_url = unifiedorder_pub.getCodeUrl() para_str = "?code_url={}&order_id={}&price={}".format( code_url, order.id, order.price) href_url = settings.LMS_ROOT_URL + \ reverse("vip_pay_wechat_qrcode_paying") + para_str data = { 'href_url': href_url, 'order_id': order.id, } return Response(xresult(data=data)) else: return Response(xresult(msg='fail', code=-1))
def get(self, request, *args, **kwargs): """ VIP alipay paying 参数:package_id 套餐ID :param request: |参数|类型|是否必填|说明|: |package_id|int|是|套餐ID| ### 示例 GET /api/v1/vip/pay/alipay/paying/?package_id=1 :return: |参数|类型|说明| |alipay_url|string|跳转到支付宝支付页面| |order_id|int|订单id| """ package_id = request.GET.get('package_id') order = VIPOrder.create_order(request.user, package_id) order.pay_type = VIPOrder.PAY_TYPE_BY_ALIPAY order.save() pay_html = "" if order: body = order.name subject = order.name total_fee = order.price http_host = request.META.get("HTTP_HOST") pay_html = self.get_pay_html( body, subject, total_fee, http_host, order.id) data = { 'alipay_url': pay_html, 'order_id': order.id } return Response(xresult(data=data))
def post(self, request, *args, **kwargs): """ create order """ package_id = request.POST.get('package_id') order = VIPOrder.create_order(request.user, package_id) return Response(xresult(data={'order_id': order.id}))
def get(self, request, pk, *args, **kwargs): """ 查询订单状态详情 |参数|类型|是否必填|说明|: |id|int|是|订单ID| ### 示例 GET /api/v1/vip/order/1 :return: |参数|类型|说明| |status|int|订单详情 1: 等待支付, 2: 已完成, 3: 已取消, 4: 已退款, 0: 查询失败| """ try: order = VIPOrder.objects.get(id=pk, created_by=self.request.user) serializer = self.get_serializer(order) if order.status == VIPOrder.STATUS_WAIT: trade_types = { VIPOrder.PAY_TYPE_BY_ALIPAY: self.alipay_query, VIPOrder.PAY_TYPE_BY_ALIPAY_APP: self.alipay_query, VIPOrder.PAY_TYPE_BY_WECHAT: self.wechat_query, VIPOrder.PAY_TYPE_BY_WECHAT_APP: self.wechat_query, VIPOrder.PAY_TYPE_BY_WECHAT_H5: self.wechat_query, } if trade_types.get(order.pay_type): query_resp = trade_types[order.pay_type](order.outtradeno, order.refno, order.receipt, order.pay_type) if (order.status == VIPOrder.STATUS_WAIT and query_resp.get('trade_status') and float( order.price) == query_resp.get('total_fee')): order.purchase(order.created_by, order.pay_type, refno=query_resp['refno']) log.info('********** purchase success ***********') pay_result_ga(str(self.request.user.id), 'vip_pay_success') return Response(xresult(data=serializer.data)) except Exception, e: log.exception(e) return Response(xresult(code=-1, msg='query fail'))
def get(self, request, *args, **kwargs): ''' 套餐列表 ''' result = super(PackageListAPIView, self).get(request, *args, **kwargs) try: for c in result.data['results']: name = _(c['name']) c['name'] = name except Exception as ex: log.error(ex) return Response(xresult(data=result.data))
def get(self, request, *args, **kwargs): try: package_id = request.GET.get('package_id') order = VIPOrder.create_order(request.user, int(package_id)) if order: order.pay_type = VIPOrder.PAY_TYPE_BY_ALIPAY_APP out_trade_no = create_trade_id(order.id) order.outtradeno = out_trade_no order.save() result = {'order_id': order.id} alipay_client_config = AlipayClientConfig() alipay_client_config.app_id = smart_str( settings.ALIPAY_APP_INFO['basic_info']['APP_ID']) alipay_client_config.sign_type = smart_str( settings.ALIPAY_APP_INFO['other_info']['SIGN_TYPE']) with open( settings.ALIPAY_APP_INFO['basic_info'] ['APP_PRIVATE_KEY'], 'r') as fp: alipay_client_config.app_private_key = fp.read() client = DefaultAlipayClient( alipay_client_config=alipay_client_config) model = AlipayTradeWapPayModel() model.total_amount = smart_str( str_to_specify_digits(str(order.price))) model.product_code = smart_str("QUICK_WAP_WAY") model.subject = smart_str(_(order.name)) model.out_trade_no = smart_str(out_trade_no) # 返回页面时不使用缓存 quit_url = settings.LMS_ROOT_URL + reverse( "vip_alipay_h5_result") model.quit_url = smart_str(quit_url) model.passback_params = smart_str(settings.LMS_ROOT_URL + reverse("vip_purchase")) request = AlipayTradeWapPayRequest(biz_model=model) request.notify_url = smart_str( settings.ALIPAY_APP_INFO['other_info']['NOTIFY_URL']) result['alipay_request'] = client.sdk_execute(request) log.error(SERVER_URL + "?" + result['alipay_request']) data = { 'alipay_url': SERVER_URL + "?" + result['alipay_request'], 'order_id': order.id } return Response(xresult(data=data)) except Exception, e: log.exception(e)
def get(self, request, *args, **kwargs): try: instance = VIPInfo.objects.get(user=self.request.user) serializer = self.get_serializer(instance) expired = timezone.now() - instance.expired_at # 已过期 if expired.days >= 0: data = { 'status': False, 'expired': 1 if expired.days == 0 and expired.total_seconds() > 0 else expired.days, 'start_at': instance.start_at, 'expired_at': instance.expired_at } return Response(xresult(data=data)) else: return Response(xresult(data=serializer.data)) except Exception as ex: log.error(ex) return Response(xresult(data={'status': False}))
def get(self, request, *args, **kwargs): ''' 套餐列表 ''' result = super(PackageListAPIView, self).get(request, *args, **kwargs) return Response(xresult(data=result.data))