Пример #1
0
    def post(self, request, *args, **kwargs):
        """
        微信支付回调请求
        :param request:
        :return:
        """
        success_message = {'return_code': 'SUCCESS', 'return_msg': 'OK'}
        fail_message = {'return_code': 'FAIL', 'return_msg': 'SIGN INCORRECT'}
        success_data = {
            'payment_status': 200,
            'payment_mode': 2,
            'payment_time': now()
        }
        fail_data = {'payment_status': 500, 'payment_mode': 2}

        data_dict = main.anaysize_xml_to_dict(request.body)
        # 微信支付时返回通讯失败
        if data_dict['return_code'] == 'FAIL':
            return Response(main.make_dict_to_xml(fail_message),
                            status=status.HTTP_200_OK)
        if not self.is_sign_valid(data_dict):
            return Response(main.make_dict_to_xml(fail_message),
                            status=status.HTTP_200_OK)

        return_xml = main.make_dict_to_xml(success_message, use_cdata=True)
        if data_dict['result_code'] == 'SUCCESS':
            try:
                orders = Orders.update_payment_status_by_pay_callback(
                    orders_id=self._orders_id, validated_data=success_data)
            except:
                return Response(return_xml, status=status.HTTP_200_OK)
            else:
                # 钱包余额更新 (订单收入)
                result = WalletAction().income(None,
                                               orders,
                                               gateway='pay_callback')
                if isinstance(result, Exception):
                    return result
        else:
            try:
                Orders.update_payment_status_by_pay_callback(
                    orders_id=self._orders_id, validated_data=fail_data)
            except:
                return Response(return_xml, status=status.HTTP_200_OK)
        serializer = NativeResponseSerializer(self._wx_instance)
        serializer.update_wxpay_result(self._wx_instance, data_dict)
        return Response(return_xml, status=status.HTTP_200_OK)
Пример #2
0
    def post(self, request, *args, **kwargs):
        """
        支付宝支付回调请求
        :param request:
        :return:
        """
        success_message = {'return_code': 'SUCCESS', 'return_msg': 'OK'}
        fail_message = {'return_code': 'FAIL', 'return_msg': 'SIGN INCORRECT'}
        success_data = {
            'payment_status': 200,
            'payment_mode': 3,
            'payment_time': now()
        }
        fail_data = {'payment_status': 500, 'payment_code': 3}

        form = PreCreateCallbackForm(request.data)
        if not form.is_valid():
            return Response(fail_message, status=status.HTTP_200_OK)

        self.request_data = _request_data = form.cleaned_data
        if not self.is_sign_valid():
            return Response(fail_message, status=status.HTTP_200_OK)

        if _request_data['trade_status'] == 'TRADE_SUCCESS':
            try:
                orders = Orders.update_payment_status_by_pay_callback(
                    orders_id=self._orders_id, validated_data=success_data)
            except:
                return Response(success_message, status=status.HTTP_200_OK)
            else:
                # 钱包余额更新 (订单收入)
                result = WalletAction().income(None,
                                               orders,
                                               gateway='pay_callback')
                if isinstance(result, Exception):
                    return result
        else:
            try:
                Orders.update_payment_status_by_pay_callback(
                    orders_id=self._orders_id, validated_data=fail_data)
            except:
                return Response(success_message, status=status.HTTP_200_OK)
        serializer = PreCreateResponseSerializer(self._ali_instance)
        serializer.update_alipay_result(self._ali_instance, _request_data)
        return Response(success_message, status=status.HTTP_200_OK)