Beispiel #1
0
def save_order_payment_result():
    """
    保存订单支付结果
    :return:
    """
    alipay_dict = request.form.to_dict()

    alipay_sign = alipay_dict.pop("sign")

    alipay_client = Alipay(
        appid='2016092500594612',
        app_notify_url=None,
        app_private_key_path=os.path.join(os.path.dirname(__file__),
                                          "keys/app_private_key.pem"),
        alipay_public_key_path=os.path.join(os.path.dirname(__file__),
                                            "keys/alilay_public_key.pem"),
        sign_type='RSA2',
        debug=True)

    result = alipay_client.verify(alipay_dict, alipay_sign)

    if request:
        order_id = alipay_dict.get("out_trade_no")
        trade_no = alipay_dict.get("trade_no")
    try:
        Order.query.filter_by(id=order_id).update({
            "status": "WAIT_COMMENT",
            "trade_no": "trade_no"
        })
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()

    return jsonify(code=RET.OK, msg="OK")
Beispiel #2
0
def save_order_payment_result():
    """保存订单支付结果"""
    alipay_dict = request.form.to_dict()

    # 对支付宝的数据进行分离  提取出支付宝的签名参数sign 和剩下的其他数据
    alipay_sign = alipay_dict.pop("sign")

    # 创建支付宝sdk的工具对象
    alipay_client = AliPay(
        appid="2016081600258081",
        app_notify_url=None,  # 默认回调url
        app_private_key_path=os.path.join(os.path.dirname(__file__), "keys/app_private_key.pem"),  # 私钥
        alipay_public_key_path=os.path.join(os.path.dirname(__file__), "keys/alipay_public_key.pem"),
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True  # 默认False
    )

    # 借助工具验证参数的合法性
    # 如果确定参数是支付宝的,返回True,否则返回false
    result = alipay_client.verify(alipay_dict, alipay_sign)

    if result:
        # 修改数据库的订单状态信息
        order_id = alipay_dict.get("out_trade_no")
        trade_no = alipay_dict.get("trade_no")  # 支付宝的交易号
        try:
            Order.query.filter_by(id=order_id).update({"status": "WAIT_COMMENT", "trade_no": trade_no})
            db.session.commit()
        except Exception as e:
            current_app.logger.error(e)
            db.session.rollback()

    return jsonify(errno=RET.OK, errmsg="OK")
Beispiel #3
0
    def put(self, request):
        data = request.query_params.dict()
        signature = data.pop("sign")

        alipay = Alipay(appid="2016100100641406",
                        app_notify_url=None,
                        app_private_key_path=os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            'app_private_key.pem'),
                        alipay_public_key_path=os.path.join(
                            os.path.dirname(os.path.abspath(__file__)),
                            'alipay_public_key.pem'),
                        sign_type="RSA2",
                        debug=True)

        success = alipay.verify(data, signature)

        if not success:
            return Response({'message': '非法请求'},
                            status=status.HTTP_403_FORBIDDEN)

        # 获取订单编号和支付宝流水号
        order_id = data.get('out_trade_no')
        trade_id = data.get('trade_no')

        # 校验订单id(order_id)
        try:
            order = OrderInfo.objects.get(
                order_id=order_id,
                user=request.user,
                status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'])
        except OrderInfo.DoesNotExist:
            return Response({'message': '订单信息有误'},
                            status=status.HTTP_400_BAD_REQUEST)

        # 更新订单的支付状态
        order.status = OrderInfo.ORDER_STATUS_ENUM['UNSEND']
        order.save()

        return Response({'trade_id': trade_id})