Beispiel #1
0
def alipay_notify(request):
    print '>>notify url handler start...'
    if request.method == 'POST':
        if alipay.notify_verify(request.POST):
            pprint('pass verification...')
            tn = request.POST.get('out_trade_no')
            pprint('Change the status of bill %s' % tn)
            order = Order.objects.get(pk=tn)
            trade_status = request.POST.get('trade_status')
            pprint('the status of bill %s changed to %s' % (tn, trade_status))
            order.trade_status = trade_status
            order.save()

            trade_no = request.POST.get('trade_no')
            if trade_status == 'WAIT_SELLER_SEND_GOODS':
                pprint('It is WAIT_SELLER_SEND_GOODS, so upgrade bill')
                order.finish()
                url = alipay.send_goods_confirm_by_platform(trade_no)
                pprint('send goods confirmation. %s' % url)
                req = urllib.urlopen(url)
                return HttpResponse("success")
        else:
            pprint('##info: Status of %s' % trade_status)
            return HttpResponse("success")
    return HttpResponse("fail")
Beispiel #2
0
 def get_context_data(self, **kwargs):
     """
     获取页面参数
     by: 范俊伟 at:2015-03-07
     信息校验
     by: 范俊伟 at:2015-03-08
     修改支付逻辑
     by: 范俊伟 at:2015-03-12
     """
     need_log.debug('ZhifubaoPayCompleteView META:' +
                    str(self.request.META))
     need_log.debug('ZhifubaoPayCompleteView GET:' +
                    str(self.request.GET.items()))
     need_log.debug('ZhifubaoPayCompleteView POST:' +
                    str(self.request.POST.items()))
     verify = notify_verify(self.request.GET)
     if not verify:
         messages.error(self.request, '校验失败')
         return super(ZhifubaoPayCompleteView,
                      self).get_context_data(**kwargs)
     out_trade_no = self.request.REQUEST.get('out_trade_no')
     try:
         pay_order = PayOrder.objects.get(flag=out_trade_no)
     except PayOrder.DoesNotExist:
         messages.error(self.request, '订单不存在')
         return super(ZhifubaoPayCompleteView,
                      self).get_context_data(**kwargs)
     if pay_order.status == STATUS_SUCCESS:
         kwargs['order'] = pay_order.order
         kwargs['success'] = True
     else:
         messages.error(self.request, '可能因为网络数据过多,支付还未完成,请稍后查看,请不要重复支付!')
     return super(ZhifubaoPayCompleteView, self).get_context_data(**kwargs)
Beispiel #3
0
def alipay_notify(request):
    print '>>notify url handler start...'
    if request.method == 'POST':
        if alipay.notify_verify(request.POST):
            pprint('pass verification...')
            tn = request.POST.get('out_trade_no')
            pprint('Change the status of bill %s'%tn)
            order = Order.objects.get(pk=tn)
            trade_status = request.POST.get('trade_status')
            pprint('the status of bill %s changed to %s'% (tn,trade_status))
            order.trade_status = trade_status
            order.save()

            trade_no = request.POST.get('trade_no')
            if trade_status == 'WAIT_SELLER_SEND_GOODS':
                pprint('It is WAIT_SELLER_SEND_GOODS, so upgrade bill')
                order.finish()
                url = alipay.send_goods_confirm_by_platform(trade_no)
                pprint('send goods confirmation. %s'%url)
                req = urllib.urlopen(url)
                return HttpResponse("success")
        else:
            pprint ('##info: Status of %s' % trade_status)
            return HttpResponse ("success")
    return HttpResponse ("fail")
Beispiel #4
0
 def get_context_data(self, **kwargs):
     """
     获取页面参数
     by: 范俊伟 at:2015-03-07
     信息校验
     by: 范俊伟 at:2015-03-08
     修改支付逻辑
     by: 范俊伟 at:2015-03-12
     """
     need_log.debug('ZhifubaoPayCompleteView META:' + str(self.request.META))
     need_log.debug('ZhifubaoPayCompleteView GET:' + str(self.request.GET.items()))
     need_log.debug('ZhifubaoPayCompleteView POST:' + str(self.request.POST.items()))
     verify = notify_verify(self.request.GET)
     if not verify:
         messages.error(self.request, '校验失败')
         return super(ZhifubaoPayCompleteView, self).get_context_data(**kwargs)
     out_trade_no = self.request.REQUEST.get('out_trade_no')
     try:
         pay_order = PayOrder.objects.get(flag=out_trade_no)
     except PayOrder.DoesNotExist:
         messages.error(self.request, '订单不存在')
         return super(ZhifubaoPayCompleteView, self).get_context_data(**kwargs)
     if pay_order.status == STATUS_SUCCESS:
         kwargs['order'] = pay_order.order
         kwargs['success'] = True
     else:
         messages.error(self.request, '可能因为网络数据过多,支付还未完成,请稍后查看,请不要重复支付!')
     return super(ZhifubaoPayCompleteView, self).get_context_data(**kwargs)
Beispiel #5
0
def zhifubao_pay_callback(request):
    """
    支付宝回调页面
    by: 范俊伟 at:2015-03-06
    逻辑修改
    by: 范俊伟 at:2015-03-07
    信息校验
    by: 范俊伟 at:2015-03-08
    修改支付逻辑
    by: 范俊伟 at:2015-03-12
    :param request:
    :return:
    """
    need_log.debug('zhifubao_pay_callback META:' + str(request.META))
    need_log.debug('zhifubao_pay_callback GET:' + str(request.GET.items()))
    need_log.debug('zhifubao_pay_callback POST:' + str(request.POST.items()))
    need_log.debug('zhifubao_pay_callback body:' + str(request.body))
    try:
        verify = notify_verify(request.POST, ['service', 'v', 'sec_id', 'notify_data'], True)
        need_log.debug('zhifubao_pay_callback verify:' + str(verify))
        if verify:
            notify_data = parseXml(request.POST.get('notify_data').encode('utf-8'))
            out_trade_no = notify_data.get('out_trade_no')
            trade_status = notify_data.get('trade_status')
            if trade_status == 'TRADE_SUCCESS' or trade_status == 'TRADE_FINISHED':
                pay_order = PayOrder.objects.get(flag=out_trade_no)
                pay_order.success(notify_data.get('trade_no'))
            return HttpResponse('success')
        else:
            return HttpResponse('fail')
    except PayOrder.DoesNotExist:
        pass
    except:
        common_except_log()
    return HttpResponse('fail')
Beispiel #6
0
    def get_context_data(self, **kwargs):
        """
        充值界面修改
        by: 范俊伟 at:2015-05-13
        """
        need_log.debug('ZhifubaoPayCompleteView META:' + str(self.request.META))
        need_log.debug('ZhifubaoPayCompleteView GET:' + str(self.request.GET.items()))
        need_log.debug('ZhifubaoPayCompleteView POST:' + str(self.request.POST.items()))
        verify = notify_verify(self.request.GET)
        if not verify:
            kwargs['message'] = '校验失败'
            return super(ZhifubaoPayCompleteViewV2, self).get_context_data(**kwargs)
        out_trade_no = self.request.REQUEST.get('out_trade_no')
        try:
            pay_order = PayOrder.objects.get(flag=out_trade_no)
        except PayOrder.DoesNotExist:
            kwargs['message'] = '订单不存在'
            return super(ZhifubaoPayCompleteViewV2, self).get_context_data(**kwargs)
        if pay_order.status == STATUS_SUCCESS:
            order = pay_order.order
            kwargs['order'] = order
            kwargs['success'] = True
            try:
                project_id = order.project_id
                product_id = order.product_id
                address_id = order.address_id

                p = Project.objects.get(pk=order.project_id)
                balance = get_project_balance_base(project_id)
                kwargs['project_name'] = p.name
                kwargs['person_nums'] = balance.get("person_nums")
                kwargs['balance'] = balance.get('total') - balance.get('price')
                kwargs['days'] = balance.get("days")

                product = Product.objects.get(pk=product_id)
                kwargs['gold'] = product.gold

                if address_id:
                    tax_id = order.tax_id
                    tax = Tax.objects.get(pk=tax_id)
                    kwargs["fptt"] = tax.fptt
                    address = Address.objects.get(pk=address_id)
                    kwargs["address"] = address.address_v2
                    kwargs["address_detail"] = address.address_detail
                    kwargs["zip_code"] = address.zip_code
                    kwargs["username"] = address.username
                    kwargs["phone"] = address.phone
                    kwargs["has_fp"] = "True"
            except Exception as e:
                print e
                kwargs['message'] = '订单不存在'

        else:
            kwargs['message'] = '订单不存在'
        return super(ZhifubaoPayCompleteViewV2, self).get_context_data(**kwargs)
Beispiel #7
0
def zhifubao_pay_callback(request):
    """
    支付宝回调页面
    by: 范俊伟 at:2015-03-06
    逻辑修改
    by: 范俊伟 at:2015-03-07
    信息校验
    by: 范俊伟 at:2015-03-08
    修改支付逻辑
    by: 范俊伟 at:2015-03-12
    :param request:
    :return:
    """
    need_log.debug('zhifubao_pay_callback META:' + str(request.META))
    need_log.debug('zhifubao_pay_callback GET:' + str(request.GET.items()))
    need_log.debug('zhifubao_pay_callback POST:' + str(request.POST.items()))
    need_log.debug('zhifubao_pay_callback body:' + str(request.body))
    try:
        verify = notify_verify(request.POST,
                               ['service', 'v', 'sec_id', 'notify_data'], True)
        need_log.debug('zhifubao_pay_callback verify:' + str(verify))
        if verify:
            notify_data = parseXml(
                request.POST.get('notify_data').encode('utf-8'))
            out_trade_no = notify_data.get('out_trade_no')
            trade_status = notify_data.get('trade_status')
            if trade_status == 'TRADE_SUCCESS' or trade_status == 'TRADE_FINISHED':
                pay_order = PayOrder.objects.get(flag=out_trade_no)
                pay_order.success(notify_data.get('trade_no'))
            return HttpResponse('success')
        else:
            return HttpResponse('fail')
    except PayOrder.DoesNotExist:
        pass
    except:
        common_except_log()
    return HttpResponse('fail')
Beispiel #8
0
    def get_context_data(self, **kwargs):
        """
        充值界面修改
        by: 范俊伟 at:2015-05-13
        """
        need_log.debug('ZhifubaoPayCompleteView META:' +
                       str(self.request.META))
        need_log.debug('ZhifubaoPayCompleteView GET:' +
                       str(self.request.GET.items()))
        need_log.debug('ZhifubaoPayCompleteView POST:' +
                       str(self.request.POST.items()))
        verify = notify_verify(self.request.GET)
        if not verify:
            kwargs['message'] = '校验失败'
            return super(ZhifubaoPayCompleteViewV2,
                         self).get_context_data(**kwargs)
        out_trade_no = self.request.REQUEST.get('out_trade_no')
        try:
            pay_order = PayOrder.objects.get(flag=out_trade_no)
        except PayOrder.DoesNotExist:
            kwargs['message'] = '订单不存在'
            return super(ZhifubaoPayCompleteViewV2,
                         self).get_context_data(**kwargs)
        if pay_order.status == STATUS_SUCCESS:
            order = pay_order.order
            kwargs['order'] = order
            kwargs['success'] = True
            try:
                project_id = order.project_id
                product_id = order.product_id
                address_id = order.address_id

                p = Project.objects.get(pk=order.project_id)
                balance = get_project_balance_base(project_id)
                kwargs['project_name'] = p.name
                kwargs['person_nums'] = balance.get("person_nums")
                kwargs['balance'] = balance.get('total') - balance.get('price')
                kwargs['days'] = balance.get("days")

                product = Product.objects.get(pk=product_id)
                kwargs['gold'] = product.gold

                if address_id:
                    tax_id = order.tax_id
                    tax = Tax.objects.get(pk=tax_id)
                    kwargs["fptt"] = tax.fptt
                    address = Address.objects.get(pk=address_id)
                    kwargs["address"] = address.address_v2
                    kwargs["address_detail"] = address.address_detail
                    kwargs["zip_code"] = address.zip_code
                    kwargs["username"] = address.username
                    kwargs["phone"] = address.phone
                    kwargs["has_fp"] = "True"
            except Exception as e:
                print e
                kwargs['message'] = '订单不存在'

        else:
            kwargs['message'] = '订单不存在'
        return super(ZhifubaoPayCompleteViewV2,
                     self).get_context_data(**kwargs)
Beispiel #9
0
def alipay_return(request):
    """
    Handler for synchronous updating billing information.
    """
    logger1.info('>> return url handler start')
    if notify_verify(request.GET):
        tn = request.GET.get('out_trade_no')
        trade_no = request.GET.get('trade_no')
        logger1.info('Change the status of bill %s' % tn)
        # bill = UserResult.objects.get(our_trade_no=tn)
        trade_status = request.GET.get('trade_status')
        logger1.info('the status changed to %s' % trade_status)

        is_detail = False
        urs = UserResult.objects.filter(our_trade_no=tn)
        if urs.exists():
            bill = UserResult.objects.get(our_trade_no=tn)
        else:
            urs = UserResult.objects.filter(detail_our_trade_no=tn)
            if urs.exists():
                is_detail = True
                bill = UserResult.objects.get(detail_our_trade_no=tn)
            else:
                return HttpResponse("fail")

        trade_status = request.POST.get('trade_status')
        language = request.POST.get('extra_common_param', 'zh')
        if is_detail:
            if not bill.is_pay_detail:
                bill.is_pay_detail = True
                bill.detail_pay_time = datetime.now()
                bill.detail_trade_no = trade_no
                bill.save()
        else:
            if not bill.is_pay:
                bill.is_pay = True
                bill.pay_time = datetime.now()
                bill.trade_no = trade_no
                bill.save()
        eval_obj = {
            "title": bill.questions.get_title(language),
            "content": bill.questions.get_content(language),
            "questions": bill.questions.question,
        }
        explains = UserScoreExplain.objects.filter(user_result=bill)  # bill.score_explain.all()
        user_result = bill

        if not is_detail and not user_result.is_pay_detail:
            for_detail = True
            pay_url = create_direct_pay_by_user(user_result.detail_our_trade_no, __(u'爱在人间详细测试报告'),
                                                bill.questions.get_title(language), user_result.detail_price, language)
        else:
            for_detail = False
            pay_url = ''
        return render_to_response('backend/eval_result.html',
                                  {
                                      "button_text": _(u"支付"),
                                      "title": _(u"测试题"),
                                      "user_result": bill,
                                      "is_need_pay": not is_detail and not user_result.is_pay_detail,
                                      "lang_set": False,
                                      "is_detail": for_detail,
                                      "explains": explains,
                                      "eid": bill.questions.id,
                                      "price": bill.questions.detail_price,
                                      "pay_url": pay_url,
                                      "lang_code": language,
                                      "view_name": "alipay_return",
                                      "eval": eval_obj})
    return HttpResponseRedirect(reverse('payment_error'))
Beispiel #10
0
def alipay_notify(request):
    """
    Handler for notify_url for asynchronous updating billing information.
    Logging the information.
    """
    logger1.info('>>notify url handler start...')
    if request.method == 'POST':
        if notify_verify(request.POST):
            logger1.info('pass verification...')
            tn = request.POST.get('out_trade_no')
            trade_no = request.POST.get('trade_no')
            logger1.info('Change the status of bill %s' % tn)
            is_detail = False
            urs = UserResult.objects.filter(our_trade_no=tn)
            if urs.exists():
                bill = UserResult.objects.get(our_trade_no=tn)
            else:
                urs = UserResult.objects.filter(detail_our_trade_no=tn)
                if urs.exists():
                    is_detail = True
                else:
                    return HttpResponse("fail")

            trade_status = request.POST.get('trade_status')
            language = request.POST.get('extra_common_param', 'zh')
            if is_detail:
                logger1.info('the status of bill %s changed to %s' % (tn, trade_status))
                if not bill.is_pay_detail:
                    bill.is_pay_detail = True
                    bill.detail_pay_time = datetime.now()
                    bill.detail_trade_no = trade_no
                    bill.save()
                if bill.is_pay_detail:
                    to_email = bill.user.email
                    if to_email:
                        explains = UserScoreExplain.objects.filter(user_result=bill)  # bill.score_explain.all()
                        content = []
                        for explain in explains:
                            content.append(explain.explain.get_detail(language))
                        send_report_mail(to_email, title=bill.questions.get_title(language),
                                         content='<br>'.join(content))

            else:
                logger1.info('the status of bill %s changed to %s' % (tn, trade_status))
                if not bill.is_pay:
                    bill.is_pay = True
                    bill.pay_time = datetime.now()
                    bill.trade_no = trade_no
                    bill.save()
                if bill.is_pay:
                    to_email = bill.user.email
                    if to_email:
                        explains = UserScoreExplain.objects.filter(user_result=bill)  # bill.score_explain.all()
                        content = []
                        for explain in explains:
                            content.append(explain.explain.get_content(language))
                        send_report_mail(to_email, title=bill.questions.get_title(language),
                                         content='<br>'.join(content))
            logger1.info('##info: Status of %s' % trade_status)
            logger1.info('return success')
            return HttpResponse("success")
    logger1.info('return fail')
    return HttpResponse("fail")