Exemple #1
0
def receive_tax():
    openid = session.get('openid')
    if openid is None:
        return redirect(weixin_oauth2_url())

    remote_addr = request.environ['REMOTE_ADDR']
    if not request.data:
        app.logger.warning("get a empty pay request from user: %s, ip: %s",
                           openid, remote_addr)
        return ret_msg(FAIL, 'money amount is required')

    data = get_json_object(request)
    if 'money' not in data or type(
            data['money']
    ) is not int or data['money'] not in app.config['AVAILABLE_PAY_MONEY']:
        app.logger.warning(
            "get a illegal pay request from user: %s, ip: %s, illegal money: %s",
            openid, remote_addr, str(data.get('money')))
        return ret_msg(FAIL, 'money content error')

    order = _build_order(openid, data['money'], remote_addr)
    result = weixin.make_order(order)
    pay_info = dict(
        openid=openid,
        money=data['money'],
        trade_no=order.out_trade_no,
        ip=remote_addr,
    )

    if result.return_code == FAIL:
        app.logger.warning('communication error while make order, reason: %s',
                           result.return_msg)
        pay_info['state'] = FAIL
        pay_info['error_msg'] = result.return_msg
        g.service.save_user_pay(pay_info)
        return ret_msg(FAIL, result.return_msg)

    if result.result_code == FAIL:
        app.logger.warning('make order to weixin failed, reason: %d:%s',
                           result.err_code, result.err_code_des)
        pay_info['state'] = FAIL
        pay_info['error_msg'] = result.err_code_des
        g.service.save_user_pay(pay_info)
        return ret_msg(FAIL, "{}:{}".format(result.err_code,
                                            result.err_code_des))

    # save to db
    app.logger.info('user: %s make order success, wait to pay, trade_no: %s',
                    openid, order.out_trade_no)
    pay_info['state'] = 'PREPAY'
    pay_info['prepay_id'] = result.prepay_id
    g.service.save_user_pay(pay_info)

    # get sign
    pay_sign = weixin.get_pay_sign(result.prepay_id)
    pay_sign['ret'] = SUCCESS
    pay_sign['msg'] = 'ok'
    return json_dumps(pay_sign)
Exemple #2
0
def get_user_last_income():
    openid = session.get('openid')
    if openid is None:
        return redirect(weixin_oauth2_url())

    rsp = g.service.find_user_last_income(openid)
    rsp = rsp or (None, None)
    ret = dict(ret=SUCCESS, msg='ok', money=rsp[0], time=rsp[1])
    if rsp[0] is None:
        ret['msg'] = 'not found'

    return json_dumps(ret)
Exemple #3
0
def test(func):
    if not app.config['TESTING']:
        abort(403)

    if func == 'login':
        session['openid'] = request.args['openid']
        return 'ok'

    if func == 'logout':
        del session['openid']

    if func == 'session':
        return json_dumps(dict(session))
    return 'ok'
Exemple #4
0
def get_user_share_qrcode():
    openid = session.get('openid')
    if not openid:
        return redirect(weixin_oauth2_url())

    user = g.service.find_user(openid)
    rsp = dict(ret=SUCCESS, msg='ok')
    if not user['share_qrcode']:
        qr_file = randstr()
        auth_url = weixin.oauth2_url(
            app.config['RESTFUL_ROOT'] + '/auth/redirect', user['id'])
        short_url = weixin.url_to_short(auth_url)
        make_qrcode(short_url['short_url'],
                    '%s/%s.png' % (app.config['QRCODE_HOME'], qr_file))
        user['share_qrcode'] = qr_file + '.png'
        g.service.update_user(user)

    rsp['qrcode'] = user['share_qrcode']
    app.logger.debug("user: %s, get qrcode return: %s", openid, rsp)
    return json_dumps(rsp)
Exemple #5
0
def get_user_account_detail_as_agent():
    openid = session.get('openid')
    if openid is None:
        return redirect(weixin_oauth2_url())
    # todo: 检查参数中是否仅包含数字

    page = int(request.args.get('page', 0))
    pagesize = int(request.args.get('pagesize', 50))
    _offset = page * pagesize

    total_bill_num = g.service.find_agent_bill_num(openid)
    shared_bill_num = g.service.find_agent_shared_bill_num(openid)
    bills = g.service.find_agent_bill(openid, _offset, pagesize)

    total_income = 0
    shared_income = 0
    ret_bills = []
    for b in bills:
        income = shared_money(b['money'])
        total_income += income
        shared_income += b['shared_money'] or 0
        ret_bills.append(
            dict(income=income,
                 time=b['timestamp'],
                 shared=(b['shared_money'] is not None),
                 share_time=b['shared_timestamp']))

    ret = dict(ret=SUCCESS,
               msg='ok',
               total_bill_num=total_bill_num,
               shared_bill_num=shared_bill_num,
               page=page,
               pagesize=pagesize,
               total_income=total_income,
               shared_income=shared_income,
               follower_num=g.service.find_follower_num(openid),
               bills=ret_bills)
    return json_dumps(ret)
Exemple #6
0
def ret_msg(ret, msg=''):
    return json_dumps({'ret': ret, 'msg': msg})
Exemple #7
0
def get_jsapi_sign():
    url = request.args.get('url')  # 当前需要执行jsapi的url
    if url is None:
        return 'f**k you'

    return json_dumps(weixin.get_jsapi_sign(url))