コード例 #1
0
ファイル: rest_api.py プロジェクト: cash2one/Logistics
def api_shop_web_top_up_callback_post():
    params = ctx.request.input()
    logging.info("[WEB/APP]Alipay callback request-params=%s." % params)

    result = web_trade_notice_handler(params)
    # 充值成功: 记录result到对应的充值记录; 记录到流水表; 更新商户余额
    if result['result'] == 'success':
        FlowLogic.top_up_success(**result)
    # 充值失败: 记录result到对应的充值记录;
    else:
        FlowLogic.notified_of_failure(**result)
    return 'success'
コード例 #2
0
ファイル: rest_api.py プロジェクト: cash2one/Logistics
def api_shop_wxpay_top_up_callback():
    # 给微信支付的第三方回调
    body = ctx.request.get_body()
    logging.info('[WX-TOP-UP]wxPay callback request-body=%s' % body)

    # result, out_trade_no => transact_num
    result = wx_callback(body)
    if result['result'] == 'success':
        msg = FlowLogic.top_up_success(**result)
        return {'ret': generate_xml({'return_code': 'SUCCESS'}), 'msg': msg}
    else:
        msg = FlowLogic.notified_of_failure(**result)
        return {'ret': generate_xml({'return_code': 'FAIL'}), 'msg': msg}
コード例 #3
0
ファイル: rest_api.py プロジェクト: cash2one/Logistics
def api_shop_wap_transfer_callback():
    kw = ctx.request.input()
    logging.info("[WAP-TRANSFER]Alipay callback request-body=%s." % kw)

    result = wap_transfer_notice_handler(kw)

    if result['result'] == 'success':
        FlowLogic.transfer_success(**result)
        logging.info('[WAP-TRANSFER] success.')
    else:
        FlowLogic.notified_of_failure(**result)
        logging.info('[WAP-TRANSFER] failure.')
    return 'success'
コード例 #4
0
ファイル: rest_api.py プロジェクト: cash2one/Logistics
def api_shop_cash_flow():
    """
    @api {post} /shop/cash_flow [商户]扣款/退款
    @apiName api_shop_cash_flow
    @apiGroup shop

    @apiParam {string(6)} transact_type 交易类型, 只能是(`PAY`, `REFUND`)中的任意一个.
    @apiParam {string(24)} shop_id 商户id, 如 "56c2d708a785c90ab0014d00".
    @apiParam {decimal} cash 充值金额(元),精确到小数点后2位, ROUND_DOWN.

    @apiParamExample {json} 请求示例:
    Request Method: POST
    Request URL: http://123.57.45.209:9099/shop/cash_flow
    Request Body:
        {
            "transact_type": "pay",
            "shop_id": "56c2d708a785c90ab0014d00",
            "cash": 0.01
        }
    @apiSuccessExample {string} 扣款/退款成功返回交易流水号示例:
        HTTP/1.1 200 OK
        "20160301151746"
    @apiErrorExample {json} 失败示例:
        HTTP 400 ValueError:
        {
            "message": "error message"
        }
    """
    params = ctx.request.input()
    # 交易类型检查: 'PAY', 'REFUND'
    if safe_str(params.transact_type).strip().upper() not in ('PAY', 'REFUND'):
        raise ValueError("transact_type[%s] should be in ('PAY', 'REFUND')." %
                         params.transact_type)
    params.transact_type = safe_str(params.transact_type).strip()
    # 金额检查:
    if 'cash' not in params:
        raise ValueError(
            "Should provide me with params [cash] and [shop_id] in body.")
    cash = round(decimal.Decimal(params.cash, 2), 2)
    if cash <= 0.0:
        raise ValueError("cash[%s] should be at least [0.01]." % params.cash)
    params.cash = cash
    # 扣款: 记录到流水表; 更新商户余额;
    params.transact_num = gen_transact_num()
    params.transact_type = str(params.transact_type).upper()
    if params.transact_type == TRANSACT_TYPE.PAY:
        return FlowLogic.deduct(**params)
    elif params.transact_type == TRANSACT_TYPE.REFUND:
        return FlowLogic.refund(**params)
コード例 #5
0
ファイル: rest_api.py プロジェクト: cash2one/Logistics
def api_shop_wap_top_up_callback_post():
    # 给支付宝充值的第三方回调
    params = ctx.request.input()
    logging.info("[WAP-TOP-UP]Alipay callback request-params=%s." % params)

    # result,out_trade_no=>transact_num
    result = wap_trade_notice_handler(params)

    # 充值成功: 记录result到对应的充值记录; 记录到流水表; 更新商户余额
    if result['result'] == 'success':
        FlowLogic.top_up_success(**result)
    # 充值失败: 记录result到对应的充值记录;
    else:
        FlowLogic.notified_of_failure(**result)
    return 'success'
コード例 #6
0
ファイル: rest_api.py プロジェクト: cash2one/Logistics
def api_shop_native_alipay_callback():
    # 给支付宝扫二维码支付的第三方回调
    body = ctx.request.get_body()
    logging.info('[ALI-PAY]AliPay callback request-body=%s' % body)

    result = alipay_native_callback(body)
    if result['result'] == 'success':
        msg = FlowLogic.transfer_success(**result)
        return {
            'ret': 'success',
            'msg': msg,
            'transact_num': result['transact_num'],
            'trade_no': result['trade_no']
        }
    else:
        msg = FlowLogic.notified_of_failure(**result)
        return {'ret': 'success', 'msg': msg}
コード例 #7
0
ファイル: rest_api.py プロジェクト: cash2one/Logistics
def api_shop_native_wx_pay_callback():
    # 给微信支付的第三方回调
    body = ctx.request.get_body()
    logging.info('[WX-PAY]wxPay callback request-body=%s' % body)

    result = wx_callback(body)
    if result['result'] == 'success':
        msg = FlowLogic.transfer_success(**result)
        return {
            'ret': generate_xml({'return_code': 'SUCCESS'}),
            'msg': msg,
            'transact_num': result['transact_num'],
            'trade_no': result['trade_no']
        }
    else:
        msg = FlowLogic.notified_of_failure(**result)
        return {'ret': generate_xml({'return_code': 'FAIL'}), 'msg': msg}
コード例 #8
0
def api_outsource_cash_flow(cash_flow_type):
    # 参数处理
    cash_flow_type = str(cash_flow_type).upper().strip()
    kw = ctx.request.input()
    transact_num = utc_8_day().replace(
        '-', '') + shortuuid.ShortUUID().random(length=6)
    kw['transact_num'] = kw.get('transact_num', transact_num)
    kw['type'] = cash_flow_type

    # 数据1: 可提现can_cash = VALIDATED - APPLY_WITHDRAW
    # 数据2: 待财务处理finance = APPLY_WITHDRAW - PAID - DECLINE
    # 数据3: 财务已打款paid = PAID
    # 数据4: 财务已拒绝decline = DECLINE
    # 后台已审核的派件员运单
    if cash_flow_type == CASH_FLOW.VALIDATED:
        # 提现流水 {transact_num, man_id, type, cash, expr_num, operator, create_time}
        FlowLogic.push_validated(**kw)
    # 申请提现
    elif cash_flow_type == CASH_FLOW.APPLY_WITHDRAW:
        # 限制1: 如果是系统有效全职,不可提现. ==>暂时通过登录来控制
        # 限制2: 限额设为sum(VALIDATED)-sum(APPLY_WITHDRAW)
        # 提现流水 {transact_num, man_id, type, cash, create_time}
        FlowLogic.push_apply_withdraw(**kw)
    # 财务打款
    elif cash_flow_type == CASH_FLOW.PAID:
        # 根据transact_num拿对应的man_id
        # 提现流水更新 {transact_num, "PAID", cash, <operator>, update_time}
        FlowLogic.paid(**kw)
    # 财务拒绝
    elif cash_flow_type == CASH_FLOW.DECLINE:
        # 提现流水更新 {transact_num, "DECLINE", cash, <operator>, update_time, remark}
        FlowLogic.decline(**kw)
    else:
        raise ValueError("CASH_FLOW[%s] should be in CASH_FLOW%s." %
                         (cash_flow_type, CASH_FLOW))
    return kw['transact_num']
コード例 #9
0
def api_retrieve_flow():
    filter_col_str, where, group_by_limit, args = complex_query(
        ctx.request.input())
    return FlowLogic.find_by(filter_col_str, where, group_by_limit, *args)
コード例 #10
0
ファイル: rest_api.py プロジェクト: cash2one/Logistics
def api_retrieve_flow():
    """
    @api {post} /shop/flow/complex_query/:page [商户]资金流水复杂查询
    @apiDescription 查询商户余额,消费金额等.
    @apiName api_retrieve_flow
    @apiGroup shop

    @apiParam {list} filter_col `["shop_id", "cash" ...]`. 表`flow`中的字段列表. `[]`表示取所有字段.
    @apiParam {str} [group_by] 按照什么来group by. 表`flow`中的字段. 如`shop_id`.
    @apiParam {str} op `AND`或者`OR`. 表示如何组合过滤条件.
    @apiParam {int} is_not 如果有这个key, 则表示该字段上的过滤条件要取非.
    @apiParam {int} page 2. 表示第二页, 从1开始. [1:2147483648), 分页查. <=20条数据, 一次返回所有; >20条, 一次返回20条.

    @apiParamExample {json} 请求body示例:
        {
            "filter_col": ["shop_id", "sum(cash) as paid"],
            "query":
                {
                    "op": "AND",
                    "exprs": [
                        {"shop_id": {"in": ["56c2d708a785c90ab0014d00", "56c2d708a785c90ab0014d00"]}},
                        {"type": {"like": "%PAY%"}},
                        {"is_not":1, "shop_name": {"like": "%测试%"}}
                    ]
                },
            "group_by": "shop_id"
        }
    @apiParamExample {json} 对于"query"部分的解释 expr_json_example:
        expr_json_atom = {
            "op": "AND",
            "exprs": [
                {"shop_id": {"in": ["56c2d708a785c90ab0014d00", "56c2d708a785c90ab0014d00"]}},
                {"type": {"like": "%PAY%"}},
                {"is_not":1, "shop_name": {"like": "%测试%"}}
            ]
        }

        expr_json_level_2 = {
            "op": "OR",
            "exprs": [
                expr_json_atom,
                # expr_json_atom,
            ]
        }

    @apiSuccessExample {json} 成功示例(filter_col列表长度是1,即查询单个值时):
        HTTP/1.1 200 OK
        [0.01, 0.02, 0.5, 0.0]

    @apiSuccessExample {json} 成功示例(filter_col列表长度大于1,即查询多个值时):
        HTTP/1.1 200 OK
        [
            {
                "shop_id": "56c2d708a785c90ab0014d00",
                "paid": 0.23
            }
        ]
    """
    filter_col_str, where, limit, args = complex_query(ctx.request.input())
    flows = FlowLogic.find_by(filter_col_str, where, limit, *args)
    _count = FlowLogic.found_rows(filter_col_str, where, *args)
    ctx.response.set_header("X-Resource-Count".encode('utf-8'), _count)
    return flows