예제 #1
0
    def get(self, request):
        """
        处理支付宝的return_url返回
        :param request:
        :return:
        """
        processed_dict = {}
        for key, value in request.GET.items():
            processed_dict[key] = value

        sign = processed_dict.pop("sign", None)
        alipay = Alipay(
            appid="2016091600527206",
            app_notify_url="https://vue.crazyballoon.xin/alipay/return/",
            app_private_key_path=private_key_path,
            alipay_public_key_path=ali_pub_key_path,
            debug=True,
            return_url="https://vue.crazyballoon.xin/alipay/return/")

        verify_result = alipay.verify(processed_dict, sign)  # 此处理想返回True

        if verify_result is True:
            order_sn = processed_dict.get("out_trade_no", None)
            trade_no = processed_dict.get("trade_no", None)
            trade_status = processed_dict.get("trade_status", None)

            existed_orders = OrderInfo.objects.filter(order_sn=order_sn)
            for existed_order in existed_orders:
                existed_order.pay_status = trade_status
                existed_order.trade_no = trade_no
                existed_order.pay_time = datetime.now()
                existed_order.save()

            return Response("success")
예제 #2
0
파일: set_views.py 프로젝트: sundw2015/841
 def post(self, request):
     """
     :param request: 
     :return: 
     """
     money = request.data.get("money", 0)
     pay_pid = request.data.get("pay_pid", '').strip()  # alipay_partner
     pay_private_key = request.data.get("pay_private_key",
                                        '').strip()  # alipay_private_key
     email = request.data.get("email", '').strip()  # alipay_seller_email
     if not money:
         return Response({"status": 500, "msg": "支付金额错误", "data": {}})
     try:
         float(money)
     except Exception as e:
         return Response({"status": 500, "msg": "支付金额错误", "data": {}})
     if not email or not pay_pid:
         return Response({"status": 500, "msg": "支付信息不完整", "data": {}})
     if not pay_private_key:
         agent = request.user.userinfo.agent
         obj = SetPay.objects.get_or_create(agent=agent)[0]
         mydata = model_to_dict(obj)
         user = request.user
         crm = Crm(user=user)
         data = crm.get_agent_info()
         pay_private_key = data['data']['pay_private_key']
     alipay = Alipay(partner=pay_pid,
                     private_key=pay_private_key,
                     seller_id=pay_pid,
                     seller_email=email)
     cache_data = {
         "partner": pay_pid,
         "private_key": pay_private_key,
         "seller_id": pay_pid,
         "seller_email": email
     }
     # 把数据存入缓存 有效期10分钟
     cache.set('alipay', cache_data, 10 * 60)
     site = get_current_site(request)
     protocol = 'http://' if request.is_secure() else 'https://'
     notify_url = protocol + site.domain + "/soc/system/order_callback"
     return_url = protocol + site.domain + '/soc/system/finance/alipay'
     alipay_dict = {
         'notify_url': notify_url,
         'return_url': "http" + return_url[5:],
         'sign_type': 'MD5',
         # 'out_trade_no': ''.join([random.SystemRandom().choice("asdfghjklqwertyuiopmnbvcxz") for i in range(20)]),
         'out_trade_no': str(int(time.time() * 10000)),
         'subject': "测试订单",
         'total_fee': money,
         'body': "测试支付",
         'anti_phishing_key': 'AABBCDDEG',
     }
     pay_url = alipay.create_direct_pay_by_user_url(**alipay_dict)
     context = {"status": 200, "url": pay_url, "data": {}}
     return Response(context)
예제 #3
0
    def post(self, request):
        order_id = request.POST.get('order_id')
        try:
            order_info = OrderInfo.objects.get(order_id=order_id,
                                               order_status=1)

        except OrderInfo.DoesNotExist:
            pass
        alipay = Alipay()
        response = alipay.payorders(order_id, order_info.total_price)
        # return JsonResponse({"code": response.code, 'msg': response.msg, 'trade_no': response.trade_no})
        return JsonResponse({"code": 200, 'url': response})
예제 #4
0
 def get_alipay_url(self, obj):
     alipay = Alipay(
         appid=ALI_APP_ID,
         app_private_key_path=private_key_path,
         alipay_public_key_path=ali_public_key_path,
         app_notify_url="http://39.108.55.149:8000/alipay/return",
         return_url="http://39.108.55.149:8000/alipay/return",
         method="alipay.trade.page.pay",
         debug=True,  # 使用沙箱环境
     )
     url = alipay.pay(out_trade_no=obj.order_sn,
                      total_amount=obj.order_mount,
                      subject=obj.order_sn)
     return url
예제 #5
0
 def post(self, request):
     # 用户校验
     user = request.user
     if not user.is_authenticated:
         return JsonResponse({'res': 0, 'errmsg': '请先登录!'})
     # 订单校验
     order_id = request.POST.get('order_id')
     try:
         order = OrderInfo.objects.get(order_id=order_id,
                                       user=user,
                                       pay_method=3,
                                       order_status=1)
     except OrderInfo.DoesNotExist:
         return JsonResponse({'res': 1, 'errmsg': '订单不存在!'})
     # 业务处理,查询订单是否支付成功
     # 获取查询返回值
     result = Alipay.get_pay_status(order.order_id)
     # 如果为真
     if result:
         order.order_status = 4
         order.trade_no = result
         order.save()
     else:
         return JsonResponse({'res': 2, 'errmsg': '支付失败!'})
     # 返回应答
     return JsonResponse({'res': 4, 'msg': 'succceed!'})
예제 #6
0
    def get_alipay_url(self, obj):
        alipay = Alipay(
            appid="2016091600527206",
            app_notify_url="https://vue.crazyballoon.xin/alipay/return/",
            app_private_key_path=private_key_path,
            alipay_public_key_path=ali_pub_key_path,
            debug=True,
            return_url="https://vue.crazyballoon.xin/alipay/return/")

        url = alipay.direct_pay(
            subject=obj.order_sn,
            out_trade_no=obj.order_sn,
            total_amount=obj.order_mount,
        )
        re_url = "https://openapi.alipaydev.com/gateway.do?{data}".format(
            data=url)
        return re_url
예제 #7
0
파일: set_views.py 프로젝트: sundw2015/841
    def do_pay(self, request):
        """
        支付宝异步回调接口
        :param request:
        :return: 向支付宝返回成功接收并处理异步通知状态 success
        """
        request_data = getattr(request, request.method)
        request_data = deepcopy(request_data)
        form = PaymentReturnBaseForm(request_data)
        if not form.is_valid():
            logger.error('error alipay form {0}'.format(form.errors))
            return HttpResponse('出现未知错误')
        cld = form.cleaned_data
        # 获取订单号
        seller_id = cld["seller_id"]
        # 取缓存
        cache_data = cache.get('alipay')
        alipay = Alipay(partner=cache_data.get('partner'),
                        private_key=cache_data.get('private_key'),
                        seller_id=cache_data.get('seller_id'),
                        seller_email=cache_data.get('seller_email'),
                        alipay_public_key_string='')

        if not alipay.partner == seller_id:
            logger.error("error seller_id: %s" % seller_id)
            return HttpResponse("支持出现错误")
        notify_id = cld['notify_id']
        # # 验证签名
        if not alipay.verify_sign(cld):
            logger.error("invalid sign")
            return HttpResponse('支持出现错误')
        # 验证是否是支付宝发来的通知
        if not alipay.verify_notify(notify_id):
            logger.error("invalid sign")
            return HttpResponse("支持出现错误")
        # 验证 total_fee
        if not float(cld['total_fee']) == 0.01:
            logger.error("error total_fee: %s" % str(cld['total_fee']))
            return HttpResponse("支持出现错误")
        logging.info('pay test successful')
        return HttpResponse("支付成功")
예제 #8
0
    def post(self, request):
        process_dict = {}  # 得到一个字符串参数对应字典
        for key, value in request.POST.items():
            process_dict[key] = value
        sign = process_dict.pop("sign")
        process_dict.pop("sign_type")

        alipay = Alipay(
            appid=ALI_APP_ID,
            app_private_key_path=private_key_path,
            alipay_public_key_path=ali_public_key_path,
            app_notify_url="http://39.108.55.149:8000/alipay/return",
            return_url="http://39.108.55.149:8000/alipay/return",
            method="alipay.trade.page.pay",
            debug=True,  # 使用沙箱环境
        )

        result = alipay.verify(process_dict, sign)

        if result:
            order_sn = process_dict.get('out_trade_no', None)
            trade_no = process_dict.get('trade_no', None)
            trade_status = process_dict.get('trade_status', None)

            existed_orders = OrderInfo.objects.filter(order_sn=order_sn)
            for existed_order in existed_orders:
                # 修改销量
                order_goods = existed_order.goods.all()
                for order_good in order_goods:
                    goods = order_good.goods
                    goods.sold_num += order_good.goods_num
                    goods.save()

                existed_order.pay_status = trade_status
                existed_order.trade_no = trade_no
                existed_order.pay_time = datetime.now()
                existed_order.save()

            return Response("success")
        else:
            return Response("fail")
예제 #9
0
    def get(self, request):
        order_id = request.GET.get('order_id')
        try:
            order_info = OrderInfo.objects.get(order_id=order_id)
        except OrderInfo.DoesNotExist:
            pass

        alipay = Alipay()
        while True:
            time.sleep(5)
            response = alipay.order_status_query(order_id)
            if response.code == '10000':
                print(response.out_trade_no)
                order_info.trade_no = response.trade_no
                order_info.order_status = 2
                order_info.save()
                return JsonResponse({'msg': '支付成功,caolouyaqianba'})
                break
            elif response.code == '40004':
                print(response)
                continue
            else:
                print(response.code)
                continue
예제 #10
0
 def post(self, request):
     # 用户校验
     user = request.user
     if not user.is_authenticated:
         return JsonResponse({'res': 0, 'errmsg': '请先登录!'})
     # 订单校验
     order_id = request.POST.get('order_id')
     try:
         order = OrderInfo.objects.get(order_id=order_id,
                                       user=user,
                                       pay_method=3,
                                       order_status=1)
     except OrderInfo.DoesNotExist:
         return JsonResponse({'res': 1, 'errmsg': '订单异常'})
     # 业务处理
     total_amount = order.total_price + order.transport_price
     response_url = Alipay.get_pay_url(order.order_id, total_amount)
     # 返回应答
     return JsonResponse({'res': 4, 'url': response_url})