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)
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)
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'
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)
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)
def ret_msg(ret, msg=''): return json_dumps({'ret': ret, 'msg': msg})
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))