Python-Django支付模块--支付宝支付(四)

保存支付结果

用户支付成功后,支付宝会将用户重定向到http://www.meiduo.site:8080/pay_success.html,并携带支付结果数据

前端页面将此数据发送给后端,后端检验并保存支付结果

1. 后端接口设计

请求方式: PUT /payment/status/?支付宝参数

请求参数: 查询字符串参数, 见上面表格

返回数据: JSON

返回值 类型 是否必须 说明
trade_id str 支付宝流水号

2. 后端实现

在payment/views.py中创建视图

class PaymentStatusView(APIView):
    """
    支付结果
    """
    def put(self, request):
        data = request.query_params.dict()
        signature = data.pop("sign")

        alipay = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/app_private_key.pem"),
            alipay_public_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                                "keys/alipay_public_key.pem"),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=settings.ALIPAY_DEBUG  # 默认False
        )

        success = alipay.verify(data, signature)
        if success:
            # 订单编号
            order_id = data.get('out_trade_no')
            # 支付宝支付流水号
            trade_id = data.get('trade_no')
            Payment.objects.create(
                order_id=order_id,
                trade_id=trade_id
            )
            OrderInfo.objects.filter(order_id=order_id, status=OrderInfo.ORDER_STATUS_ENUM['UNPAID']).update(status=OrderInfo.ORDER_STATUS_ENUM["UNCOMMENT"])
            return Response({'trade_id': trade_id})
        else:
            return Response({'message': '非法请求'}, status=status.HTTP_403_FORBIDDEN)

3. 前端实现

创建pay_success.html

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
"http://www.w3.org/1999/xhtml" xml:lang="en">

    "Content-Type" content="text/html;charset=UTF-8">
    <span style="font-family:'宋体';">美多商城</span>-<span style="font-family:'宋体';">支付成功</span>
    "stylesheet" type="text/css" href="css/reset.css">
    "stylesheet" type="text/css" href="css/main.css">
    
    
    


    
"app">
class="header_con">
class="header">
class="welcome fl">欢迎来到美多商城!
class="search_bar clearfix"> "index.html" class="logo fl">"images/logo.png">
class="sub_page_name fl">|    支付完成
"get" action="/search.html" class="search_con fr mt40"> <input type="text" class="input_text fl" name="q" placeholder="搜索商品"> <input type="submit" class="input_btn fr" name="" value="搜索">
class="common_list_con clearfix">
class="order_success">

订单支付成功

您的订单已成功支付,支付交易号:{{trade_id}}

"/user_center_order.html">您可以在用户中心中我的订单中查看该订单

class="footer">

CopyRight © 2016 北京美多商业股份有限公司 All Rights Reserved

电话:010-****888 ICP*******8


你可能感兴趣的:(Django项目)