def POST(self): web.header("Content-Type", "application/json") param = web.input(session_id='', node_id='', include_me='0') # include_me == 1 同时返回当前节点数据 print param if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -2, 'msg': '无效的session_id'}) if param.node_id == '': return json.dumps({'ret': -2, 'msg': '参数错误'}) ret_data = [] child_data = find_child(ObjectId(param['node_id']), param.include_me) for i in child_data: ret_data.append({ '_id': str(i['_id']), 'text': i['text'], 'position': i['position'], 'child': i['child'], 'node_prop': i.get('node_prop', ''), # 节点属性 2018-08-14 'node_weight': i.get('node_weight', '1'), # 节点权重 2018-08-14 }) print ret_data return json.dumps({'ret': 0, 'data': ret_data})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='', session_id='') if param.openid == '' and param.session_id == '': return json.dumps({'ret': -2, 'msg': '参数错误'}) # 同时支持openid和session_id if param.openid != '': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: db_shop = db.base_shop.find_one( {'_id': ObjectId(setting.default_shop)}, {'name': 1}) # 返回全局参数 return json.dumps({ 'ret': 0, 'data': { 'free_delivery': '%.2f' % app_helper.free_delivery, 'first_promote': '%.2f' % app_helper.first_promote, 'cod_enable': False, 'image_host': '/static/image/product', 'image_host2': 'http://%s/image/product' % setting.image_host, 'banner': app_helper.BANNER['c001'], 'default_shop': setting.default_shop, # 返回默认站店 'default_name': db_shop['name'] if db_shop else '', 'phone_number': uname['uname'], } }) else: return json.dumps({'ret': -4, 'msg': '无效的openid'})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='', session_id='', order_id='', star='') if '' in (param.order_id, param.star): return json.dumps({'ret' : -2, 'msg' : '参数错误'}) if param.openid=='' and param.session_id=='': return json.dumps({'ret' : -2, 'msg' : '参数错误1'}) # 同时支持openid和session_id if param.openid!='': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: db_user = db.app_user.find_one({'openid':uname['openid']},{'coupon':1}) if db_user==None: # 不应该发生 return json.dumps({'ret' : -5, 'msg' : '未找到用户信息'}) # 订单打分 db.order_app.update_one({'order_id' : param.order_id, 'user':{'$in':uname.values()}},{ '$set' : { 'star': int(param.star) }, '$push' : { 'history' : (app_helper.time_str(), uname['openid'], '订单打分')}, }) return json.dumps({'ret' : 0, 'msg' : '订单已打分!'}) else: return json.dumps({'ret' : -4, 'msg' : '无效的openid'})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='', session_id='', shop_id='', order_id='', addr_id='', coupon_id='', cart='') if '' in (param.shop_id, param.addr_id, param.cart): return json.dumps({'ret': -2, 'msg': '参数错误'}) if param.openid == '' and param.session_id == '': return json.dumps({'ret': -2, 'msg': '参数错误1'}) print param # 同时支持openid和session_id if param.openid != '': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: ret_json = checkout(uname, param) print ret_json return json.dumps(ret_json) else: return json.dumps({'ret': -4, 'msg': '无效的openid'})
def POST(self): web.header("Content-Type", "application/json") param = web.input(session_id='', note_code='', version='') print param if param.session_id=='': return json.dumps({'ret' : -1, 'msg' : 'session参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret' : -2, 'msg' : '无效的session_id'}) if param.note_code=='': return json.dumps({'ret':-2, 'msg':'参数错误'}) # 先指定版本查找,未找到则不指定版本,只按索引号找 2019-02-02 r2 = db.notes.find_one({'note_code':param['note_code'].upper(), 'version' : param['version']}) # 索引编码大写, if r2 is None: print 'NOT FOUND NOTE with version' r2 = db.notes.find_one({'note_code':param['note_code'].upper()}) # 索引编码大写 if r2 is None: print 'NOT FOUND NOTE' return json.dumps({'ret':-3, 'msg':'未找到注释内容!'}) ret_data = { 'note_code' : r2['note_code'], 'content' : r2['note_content'], } return json.dumps({'ret':0,'data':ret_data})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='', cate_id='') print param if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -2, 'msg': '无效的session_id'}) if param.cate_id == '': # 根目录 data = get_list() # 记录点击 app_helper.click_inc() else: data = get_list2(param.cate_id) print data # 返回 return json.dumps({ 'ret': 0, 'data': { 'data': data, } })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='', page_id='', page_code='') print param if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -2, 'msg': '无效的session_id'}) if param['page_id'] == '' and param['page_code'] == '': return json.dumps({'ret': -3, 'msg': '参数错误'}) if len(param['page_code']) > 0: r1 = db.pages.find_one( { 'page_code': param['page_code'].upper(), #'page_type' : 0, 'available': 1 }, {'history': 0}) if r1 is None: r1 = db.pages.find_one( { 'page_code': param['page_code'].upper() + '#1', # 加 '#1' 再试一次 #'page_type' : 0, 'available': 1 }, {'history': 0}) if r1 is None: return json.dumps({'ret': -4, 'msg': '页面不可用!'}) else: r1 = db.pages.find_one({'_id': ObjectId(param['page_id'])}, {'history': 0}) if r1 is None: return json.dumps({'ret': -4, 'msg': '页面不可用!'}) r1['_id'] = str(r1['_id']) r2 = db.nodes.find_one({'_id': ObjectId(r1['start_node'])}) if r2 is None: return json.dumps({'ret': -5, 'msg': '页面数据错误!'}) if len(r2.get('child', [])) > 0: r1['type'] = 'map' # 显示规则树 else: r1['type'] = 'text' # 显示纯文本 # 返回 return json.dumps({ 'ret': 0, 'data': { 'data': r1, } })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='', object_id='') if param.object_id == '': return json.dumps({'ret': -2, 'msg': '参数错误'}) if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session_id参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -4, 'msg': '无效的session_id'}) #-------------------------------------------------- if param.object_id[0] == '1': # 课程 r3 = db.obj_store.find_one({'obj_id': param.object_id}) else: # 专辑 r3 = db.topic_store.find_one({'tpc_id': param.object_id}) if r3 is None: return json.dumps({'ret': -5, 'msg': '错误的object_id'}) if len(r3['image']) > 0: # 取第1张图, image_url = app_helper.image_url(r3['image'][0]) else: image_url = '' #专辑里面的视频音频分享 # http://wxpretty.f8cam.com/static/wx/test2/albumMedia.html?object_id=10000053&object_id_album=20000054 #专辑分享 # http://wxpretty.f8cam.com/static/wx/test2/testAlbum.html?object_id=20000037 #视频分享: # http://wxpretty.f8cam.com/static/wx/test2/test.html?object_id=10000036 #if param.object_id[0]=='1': # 课程 # if r3['obj_type']=='topic': # 专辑课程 # share_url = 'http://%s/static/wx/test2/albumMedia.html?'\ # 'object_id=%s&object_id_album=%s'%(setting.wx_host,r3['obj_id'],r3['tpc_id']) # else: # share_url = 'http://%s/static/wx/test2/test.html?object_id=%s'%(setting.wx_host,r3['obj_id']) #else: # 专辑 # share_url = 'http://%s/static/wx/test2/testAlbum.html?object_id=%s'%(setting.wx_host,r3['tpc_id']) ret_data = { "object_id": param.object_id, # 唯一代码 "type": 1 if param.object_id[0] == '1' else 2, # 类型: 1 课程, 2 专辑 "share_title": r3['title'], "share_content": r3['description'], "share_img": image_url, # 分享图片 #"share_url" : share_url, # 分享的链接 } # 返回 return json.dumps({ 'ret': 0, 'data': ret_data, })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='', session_id='', addr_id='', name='', tel='', addr='') if '' in (param.addr_id, param.name, param.tel, param.addr): return json.dumps({'ret': -2, 'msg': '参数错误'}) if param.openid == '' and param.session_id == '': return json.dumps({'ret': -2, 'msg': '参数错误1'}) # 同时支持openid和session_id if param.openid != '': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: # 需要判断地址是否有对应门店,否则不在送货范围内 # app_helper.check_address() # 查找并修改收货地址 r = db.app_user.find_one({'openid': uname['openid']}, {'address': 1}) new_addr = [] for i in r['address']: if i[0] == param.addr_id: new_addr.append( (param.addr_id, param.name.strip(), param.tel.strip(), param.addr.strip(), int(time.time()))) else: new_addr.append(i) r = db.app_user.update_one({'openid': uname['openid']}, {'$set': { 'address': new_addr }}) # 返回 return json.dumps({ 'ret': 0, 'data': { 'addr_id': param.addr_id, } }) else: return json.dumps({'ret': -4, 'msg': '无效的openid'})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='', page_id='', tnm='') # tnm 只包含选择的那项分期因素 print param if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -2, 'msg': '无效的session_id'}) if param['page_id'] == '': return json.dumps({'ret': -3, 'msg': '参数错误'}) if param['tnm'] == '': return json.dumps({'ret': -5, 'msg': '参数错误'}) tnm = json.loads(param['tnm']) r1 = db.tnm.find_one({'_id': ObjectId(param['page_id'])}, {'history': 0}) if r1 is None: return json.dumps({'ret': -4, 'msg': '页面不可用!'}) # 下一个可用分期因素 ret_list = [] tnm_name = tnm.get('tnm_name', '') tnm_code = tnm.get('tnm_code', '') if tnm_name in TNM_NAME: next_tnm = TNM_NAME[TNM_NAME.index(tnm_name) + 1] for i in r1['stage']: if tnm_code in i[tnm_name]['val']: ret_list.extend(i[next_tnm]['val']) print ret_list # 返回 return json.dumps({ 'ret': 0, 'data': { 'next_tnm': next_tnm, 'next_list': ret_list, } })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='', nickname='', headimage='', image_type='') if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session_id参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -4, 'msg': '无效的session_id'}) #-------------------------------------------------- update_set = {} if len(param['nickname']) > 0: update_set['nickname'] = param['nickname'] if len(param['headimage']) > 0: if param['image_type'].upper() not in ('JPG', 'PNG'): return json.dumps({'ret': -5, 'msg': 'image_type取值错误'}) data = urllib.unquote_plus(param['headimage']) #print data #print len(data) # 保存图片 filename = app_helper.write_image(param['image_type'], data) update_set['img_url'] = app_helper.image_url(filename) # 图片url if len(update_set) > 0: # 只保存在手机号码账户里 type==1 db.app_user.update_one({ 'userid': uname['userid'], 'type': 1 }, {'$set': update_set}) # 获取当前设置 r4 = app_helper.get_user_detail(uname['userid']) # 返回 return json.dumps({ 'ret': 0, 'data': { 'headimage_url': r4['img_url'], } })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='', parent_id='') print param if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -2, 'msg': '无效的session_id'}) data = [] last_dir_id = '' last_dir_name = '' if param['parent_id'] != '': # 准备显示目录页 # 子目录 deepin = True db_obj = db.pages.find_one({'_id': ObjectId(param.parent_id)}) if db_obj: if db_obj.get('dir_name') == u'筛查': # 筛查单列,文件夹作为根目录 2020-04-26 deepin = False # 记录点击 app_helper.click_inc() else: last_dir_id = str(db_obj['parent_id']) last_dir_name = db_obj['dir_name'] data = get_list(param['parent_id'], deepin) else: # 根目录 data = get_list(param['parent_id'], False) # 记录点击 app_helper.click_inc() for i in data: i['rich_text'] = '' # 返回 return json.dumps({ 'ret': 0, 'data': { 'data': data, 'parent_id': param['parent_id'], 'last_dir_id': last_dir_id, 'last_dir_name': last_dir_name } })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='') if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session_id参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -4, 'msg': '无效的session_id'}) #-------------------------------------------------- r4 = app_helper.get_user_detail(uname['userid']) ret_data = { "name": r4['nickname'], "image": r4['img_url'], # 用户头像 "tel": r4['mobile'], # 用户注册手机号 "user_type": uname['type'], # 用户类型 # 店员信息 "shop_name": r4.get('shop_name', ''), "real_name": r4.get('real_name', ''), "shop_nickname": r4.get('shop_nickname', ''), "contact_info": r4.get('contact_info', ''), # 店主信息 "licence_pic": app_helper.image_url(r4['licence_pic']) if r4.get('licence_pic', '') != '' else '', "shop_pic": [app_helper.image_url(x) for x in r4.get('shop_pic', [])], } # 返回 return json.dumps({ 'ret': 0, 'data': ret_data, })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='') if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session_id参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -4, 'msg': '无效的session_id'}) #-------------------------------------------------- now_tick = int(time.time()) # 拉取符合条件的banner, 时间区间,是否可用 r2 = db.banner_info.find( { 'available': 1, '$and': [{ 'start_tick': { '$lt': now_tick } }, { 'expire_tick': { '$gt': now_tick } }], }, sort=[('sort_weight', 1)]) banner_data = [] for i in r2: banner_data.append({ 'image': app_helper.image_url(i['image']), 'click': i['click_url'], }) # 返回 return json.dumps({ 'ret': 0, 'data': { 'banner': banner_data, } })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='', session_id='') if param.openid == '' and param.session_id == '': return json.dumps({'ret': -2, 'msg': '参数错误1'}) # 同时支持openid和session_id if param.openid != '': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: db_user = db.app_user.find_one({'openid': uname['openid']}, {'coupon': 1}) if db_user == None: # 不应该发生 return json.dumps({'ret': -5, 'msg': '未找到用户信息'}) # 这里应该增加对有效期的检查!!! coupon = [] unused = 0 for i in db_user['coupon']: if app_helper.time_str(format=1) > i[1]: # 过期抵用券不返回 2015-08-22 continue coupon.append({ 'id': i[0], 'valid': i[1], 'cash': i[2], 'status': 'unused' if i[3] == 1 else 'used', }) unused += (1 if i[3] == 1 else 0) # 返回 return json.dumps({ 'ret': 0, 'data': { 'coupon': coupon, 'total': len(coupon), 'unused': unused, } }) else: return json.dumps({'ret': -4, 'msg': '无效的openid'})
def POST(self): web.header('Content-Type', 'application/json') #print web.input() param = web.input(openid='', session_id='', number='') if param.number == '': return json.dumps({'ret': -2, 'msg': '参数错误'}) if param.openid == '' and param.session_id == '': return json.dumps({'ret': -2, 'msg': '参数错误1'}) # 同时支持openid和session_id if param.openid != '': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: #print 'user_phone', uname if len(uname['uname'].strip()) > 0: return json.dumps({'ret': -5, 'msg': '已绑定手机号码,不能重复绑定'}) number = param.number.strip() if len(number) < 11 or (not number.isdigit()): return json.dumps({'ret': -3, 'msg': '手机号码格式错误'}) # 随机码 rand = app_helper.my_rand(base=1) register = False #发送短信验证码 sms.send_rand(number, rand, register) #临时保存到phone字段 db.app_user.update({'openid': uname['openid']}, {'$set': { 'phone': number, 'rand': rand }}) # 返回 return json.dumps({'ret': 0}) else: return json.dumps({'ret': -4, 'msg': '无效的openid'})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='', session_id='', addr_id='') if param.addr_id == '': return json.dumps({'ret': -2, 'msg': '参数错误'}) if param.openid == '' and param.session_id == '': return json.dumps({'ret': -2, 'msg': '参数错误1'}) # 同时支持openid和session_id if param.openid != '': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: # 查找并删除收货地址 r = db.app_user.find_one({'openid': uname['openid']}, {'address': 1}) new_addr = [] for i in r['address']: if i[0] == param.addr_id: continue else: new_addr.append(i) r = db.app_user.update_one({'openid': uname['openid']}, {'$set': { 'address': new_addr }}) # 返回 return json.dumps({ 'ret': 0, 'data': { 'addr_id': param.addr_id, } }) else: return json.dumps({'ret': -4, 'msg': '无效的openid'})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='', session_id='') if param.openid == '' and param.session_id == '': return json.dumps({'ret': -2, 'msg': '参数错误1'}) # 同时支持openid和session_id if param.openid != '': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: db_user = db.app_user.find_one({'openid': uname['openid']}, {'address': 1}) if db_user == None: # 不应该发生 return json.dumps({'ret': -5, 'msg': '未找到用户信息'}) addr = [] for i in db_user['address']: addr.append({ 'id': i[0], 'name': i[1], 'tel': i[2], 'addr': i[3], 'tick': i[4] if len(i) > 4 else 0, }) #print addr addr2 = quick(addr) #print addr2 # 返回 return json.dumps({ 'ret': 0, 'data': { 'addr': addr2, 'total': len(addr2), } }) else: return json.dumps({'ret': -4, 'msg': '无效的openid'})
def POST(self): web.header("Content-Type", "application/json") param = web.input(session_id='', node_id='', correct_note='', source="cnnc") print param if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -2, 'msg': '无效的session_id'}) if param.node_id == '': return json.dumps({'ret': -2, 'msg': '参数错误'}) db.correct.insert_one({ 'node_id': param['node_id'], 'note': param['correct_note'], 'openid': uname['openid'], 'time_t': app_helper.time_str(), # 提交时间 'status': 'WAIT', # WAIT 等待处理,PASS 接受,NOGO 拒绝 'source': param['source'], # 2019-10-29, 区分来源 }) if param['source'] == 'tnm': r2 = db.tnm.update_one({'_id': ObjectId(param['node_id'])}, {'$set': { 'node_question': True }}) else: r2 = db.nodes.update_one({'_id': ObjectId(param['node_id'])}, {'$set': { 'node_question': True }}) print r2.matched_count, r2.modified_count return json.dumps({'ret': 0, 'data': {}})
def GET(self): render = create_render(plain=True) param = web.input(code='', state='', appid='') if param.code != '': #if param.appid!=qy_helper.corpid: # return render.info('appid参数错误!') if param.state != 'PASS': return render.info('state参数错误!') session_id = qy_helper.init_job(param.code) if session_id is not None: raise web.seeother('/qywx/user_info?session_id=%s' % session_id) # 初次进入跳转 else: return render.info('code参数错误!') if param.session_id == '': return render.info('请用企业维修登录!') # session登录后进入 uname = app_helper.wx_logged(param.session_id) if uname is None: return render.info('无效的session_id!') r2 = app_user_helper.get_user_info(uname['openid'], q_type='openid') if r2 is None: return render.info('未找到用户信息,请联系管理员!') user_info = { 'career_code': r2['career_code'], 'name': r2['wx_info']['name'], 'mobile': r2['wx_info']['mobile'], 'email': r2['wx_info']['email'], 'user_id': r2['openid'], } return render.user_info(param.session_id, user_info)
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='', session_id='', order_id='') if param.order_id=='': return json.dumps({'ret' : -2, 'msg' : '参数错误'}) if param.openid=='' and param.session_id=='': return json.dumps({'ret' : -2, 'msg' : '参数错误1'}) # 同时支持openid和session_id if param.openid!='': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: db_user = db.app_user.find_one({'openid':uname['openid']},{'coupon':1}) if db_user==None: # 不应该发生 return json.dumps({'ret' : -5, 'msg' : '未找到用户信息'}) # 获得订单 db_order = db.order_app.find_one( {'order_id' : param.order_id, 'user': {'$in':uname.values()}}, {'status':1, 'cart':1, 'due':1, 'shop':1} ) if db_order==None: return json.dumps({'ret' : -3, 'msg' : '未找到订单!'}) elif db_order['status']!='DUE': return json.dumps({'ret' : -3, 'msg' : '不是待付款订单!'}) # 取消订单 db.order_app.update_one({'order_id' : param.order_id,},{ '$set' : { 'status':'CANCEL' }, '$push' : { 'history' : (app_helper.time_str(), uname['openid'], '取消账单')}, }) return json.dumps({'ret' : 0, 'msg' : '订单已取消!'}) else: return json.dumps({'ret' : -4, 'msg' : '无效的openid'})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='', order_trade_id='', data='') if param.order_trade_id=='': return json.dumps({'ret' : -2, 'msg' : '参数错误'}) if param.session_id=='': return json.dumps({'ret' : -1, 'msg' : 'session_id参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret' : -4, 'msg' : '无效的session_id'}) #-------------------------------------------------- # 修改充值订单状态 r2 = db.order_recharge.find_one_and_update( {'recharge_id' : param.order_trade_id}, # 实充值订单号 { '$set' : {'status':'PREPAY'}, '$push' : {'order_paid_data':param.data}, }, ) ret_data = { "order_trade_id" : param.order_trade_id, "due" : r2['due'], # 应付金额,单位 分 "paid" : r2['due'], # 实付金额 "status" : "PENDING", # 订单状态:PAID/PENDING 已支付/未支付 } # 返回 return json.dumps({ 'ret' : 0, 'data' : ret_data, })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='') if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session_id参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -4, 'msg': '无效的session_id'}) #-------------------------------------------------- r2 = credit_helper.check_balance(uname['userid']) ret_data = { "cash": r2, # 余额 单位 分 } # 返回 return json.dumps({ 'ret': 0, 'data': ret_data, })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='',session_id='') if param.openid=='' and param.session_id=='': return json.dumps({'ret' : -2, 'msg' : '参数错误1'}) # 同时支持openid和session_id if param.openid!='': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: # 返回host地址、端口 host = setting.app_pool[random.randint(0,len(setting.app_pool)-1)] print 'host = ', host return json.dumps({'ret' : 0, 'data' : { 'protocol' : 'http', #'host' : setting.app_host, #'app.urfresh.cn', 'host' : host, 'port' : '12050', }}) else: return json.dumps({'ret' : -4, 'msg' : '无效的openid'})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='') if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session_id参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -4, 'msg': '无效的session_id'}) #-------------------------------------------------- r2 = db.order_trade.find({'userid': uname['userid']}, sort=[('_id', -1)]) orders = [] for i in r2: if i['trade_type'] == 'consume': sign = -1 else: sign = 1 orders.append({ "action": i['comment'], "cash": i['total_sum'] * sign, # 金额,单位 分 "date": i['pay_time'], # 发生时间 "order_id": i['order_trade_id'], # 订单号 }) ret_data = {"order": orders} # 返回 return json.dumps({ 'ret': 0, 'data': ret_data, })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='',session_id='') if param.openid=='' and param.session_id=='': return json.dumps({'ret' : -2, 'msg' : '参数错误1'}) # 同时支持openid和session_id if param.openid!='': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: db_user = db.app_user.find_one({'openid':uname['openid']},{'coupon':1,'credit':1}) if db_user==None: # 不应该发生 return json.dumps({'ret' : -5, 'msg' : '未找到用户信息'}) # 返回 return json.dumps({'ret' : 0, 'data' : { 'credit' : '%.2f' % db_user.get('credit', 0.0) }}) else: return json.dumps({'ret' : -4, 'msg' : '无效的openid'})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='', category='', page_size='', page_index='') if '' in (param.page_size, param.page_index): return json.dumps({'ret': -2, 'msg': '参数错误'}) if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session_id参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -4, 'msg': '无效的session_id'}) #-------------------------------------------------- cate_id = param['category'].strip( ) if param['category'].strip() != '' else app_helper.DEFAULT_CATEGORY r2 = db.online_cate_obj.find({ 'cate_id': cate_id, 'available': 1, }, sort=[('sort_weight', 1)]) obj_list = [i['obj_id'] for i in r2] r3 = db.obj_store.find({ 'obj_id': { '$in': obj_list }, 'try_time': { '$gt': 0 }, }) obj_data = {} for i in r3: obj_data[i['obj_id']] = i # 所有试听数据 try_obj_list = [] for i in obj_list: if i not in obj_data.keys(): continue if obj_data[i].get('status') != 'PASSED': # 审核未通过,应该是上架后又有修改 continue if len(obj_data[i]['image']) > 0: # 取第1张图 image_url = app_helper.image_url(obj_data[i]['image'][0]) else: image_url = '' try_obj_list.append({ 'object_id': obj_data[i]['obj_id'], 'title': obj_data[i]['title'], 'title2': obj_data[i]['title2'], 'speaker': obj_data[i]['speaker'], 'type': 1 if obj_data[i]['media'] == 'video' else 2, # 1- 视频 2 - 音频 'image': image_url, 'length': obj_data[i]['length'], # 长度,单位:秒 'try_time': obj_data[i]['try_time'], # 试听长度,单位:秒 }) # 取指定区间的 start_pos = int(param.page_size) * int(param.page_index) end_pos = start_pos + int(param.page_size) try_obj_list_page = try_obj_list[start_pos:end_pos] ret_data = { "try": try_obj_list_page, "total": len(try_obj_list_page), # 返回的课程数量,小于 page_size说明到末尾 "page_size": param.page_size, # 分页尺寸,与调用参数相同 "page_index": param.page_index, # 页索引 } #print ret_data # 返回 return json.dumps({ 'ret': 0, 'data': ret_data, })
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='', session_id='', order_id='', pay_type='', data='') print param if '' in (param.order_id, param.pay_type): return json.dumps({'ret' : -2, 'msg' : '参数错误'}) if param.openid=='' and param.session_id=='': return json.dumps({'ret' : -2, 'msg' : '参数错误1'}) # 同时支持openid和session_id if param.openid!='': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: db_user = db.app_user.find_one({'openid':uname['openid']},{'coupon':1, 'credit':1}) if db_user==None: # 不应该发生 return json.dumps({'ret' : -5, 'msg' : '未找到用户信息'}) # 支付操作:1,记录订单支付,2.改变订单状态,3.修改库存显示 !!!!!! # 获得订单 db_order = db.order_app.find_one( {'order_id' : param.order_id}, #{'status':1, 'cart':1, 'due':1, 'shop':1} {'_id':0} ) if db_order==None: return json.dumps({'ret' : -3, 'msg' : '未找到订单!'}) # 支付宝和微信支付订单,已PAID说明提前收到异步通知 if db_order['status']=='PAID' and param.pay_type in ('ALIPAY','WXPAY'): # 记录此次调用 db.order_app.update_one( { 'order_id' : param.order_id, }, { '$set' : { 'pay_type' : param.pay_type, 'pay' : db_order['due'], 'paid2_time' : app_helper.time_str(), 'paid2_tick' : int(time.time()), }, '$push' : { 'history' : (app_helper.time_str(), uname['openid'], '提交付款')}, } ) return json.dumps({'ret' : 0, 'data' : { 'order_id' : param.order_id, 'due' : db_order['due'], 'paid' : db_order['due'], 'status' : '已支付' }}) # 只能处理未支付订单 if db_order['status']!='DUE': return json.dumps({'ret' : -3, 'msg' : '不是待付款订单!'}) # 余额支付和支付宝/微信支付未到账处理 if param.pay_type=='CREDIT': # 检查余额是否够支付 if float(db_order['due'])>db_user.get('credit',0.0): return json.dumps({'ret' : -6, 'msg' : '余额不足!'}) # 使用的优惠券失效 #db_user = db.app_user.find_one({'uname':r['uname']}) coupon = [] if db_order['coupon']!=None: for i in db_user['coupon']: if i[0]==db_order['coupon'][0]: # 这次使用 #coupon.append((i[0],i[1],i[2],0)) i2=list(i) i2[3]=0 coupon.append(i2) else: coupon.append(i) else: coupon = db_user['coupon'] # 更新优惠券 db.app_user.update_one({'openid':db_order['uname']}, {'$set':{'coupon':coupon}}) # 正常减库存! # item = [ product_id, num, num2, price] # k - num 库存数量 print "修改库存." b2 = [] # C端商品 b3 = [] # B3整箱预售商品 b3_total = 0.0 for item in db_order['cart']: #r3 = db.sku_store.find_one({'product_id' : item['product_id']}, # {'list_in_app':1}) #if r3['list_in_app']==3: # B3商品不需要改库存 # b3_total += float(item['price']) # b3.append(item) # item['title'] = item['title']+u'(整箱预售,次日送达)' # b2.append(item) # continue # 买一送一 if item['product_id'] in app_helper.buy_1_give_1: lc_num2 = float(item['num2']) item['num2'] = int(lc_num2 + lc_num2) item['title'] = item['title'].replace(u'买一送一',u'特惠活动') # 过滤数量价格为零的 if item['num2']==0 and float(item['price'])==0.0: continue r = db.inventory.find_one_and_update( # 不检查库存,有可能负库存 { 'product_id' : item['product_id'], 'shop' : db_order['shop'], }, { '$inc' : { 'num' : 0-float(item['num2']), # num2 实际购买数量 'pre_pay_num' : float(item['num2']), # 记录预付数量 } #'$push' : { 'history' : (helper.time_str(), # helper.get_session_uname(), '售出 %s' % str(item['num']))}, }, {'_id':1} ) #print r if r==None: # 不应该发生 return json.dumps({'ret' : -9, 'msg' : '修改库存失败,请联系管理员!'}) else: b2.append(item) # 更新第3方库存 2015-10-10 app_helper.elm_modify_num(db_order['shop'], item['product_id']) # 检查是否有b3商品, 3种情况 # 1. b2, b3 都有,拆单 # 2. 只有b3,站点改为B3站点,保留收货站点 # 3. 只有b2,保持订单不变 #print b2 #print b3 if len(b3)>0 and (len(b2)-len(b3))>0: # 情况1 print "拆单" r4 = db_order.copy() r4['order_id'] = r4['order_id']+u'-b3' r4['shop_0'] = r['shop'] r4['shop'] = ObjectId(setting.B3_shop) r4['cart'] = b3 r4['status'] = 'PAID' r4['ali_trade_no'] = param.get('trade_no') r4['paid_time'] = param.get('gmt_payment') r4['paid_tick'] = int(time.time()) r4['history'] = [(app_helper.time_str(), 'credit', '余额付款-拆单')] r4['total'] = '%.2f' % b3_total r4['cost'] = '0.00' r4['coupon_disc'] = '0.00' r4['first_disc'] = '0.00' r4['delivery_fee'] = '0.00' r4['due'] = '0.00' db.order_app.insert_one(r4) # 增加子订单 elif len(b3)>0: # 情况 2 print "订单改到B3站点" db.order_app.update_one({'order_id':param.order_id},{'$set' : { 'shop_0' : r['shop'], 'shop' : ObjectId(setting.B3_shop), }}) else: # 情况3,什么都不做 print "订单保持不变" # 更新销货单信息 db.order_app.update_one({'order_id' : param.order_id,},{ '$set' : { 'status' : 'PAID', 'cart' : b2, # 更新购物车 2015-09-11 'pay_type' : param.pay_type, 'pay' : db_order['due'], 'paid_time' : app_helper.time_str(), 'paid_tick' : int(time.time()), }, '$push' : { 'history' : (app_helper.time_str(), uname['openid'], '余额付款')}, }) # 消费余额 db.app_user.update_one({'openid' : uname['openid'],},{ '$inc' : { 'credit' : 0-float(db_order['due']), }, '$push' : { 'history' : (app_helper.time_str(), uname['openid'], '消费余额 %s' % db_order['due'].encode('utf-8')) }, }) elif param.pay_type in ('ALIPAY', 'WXPAY'): # 更新销货单信息, r = db.order_app.find_one_and_update( { 'order_id' : param.order_id, 'status' : 'DUE' }, { '$set' : { 'status' : 'PREPAID', 'pay_type' : param.pay_type, 'pay' : db_order['due'], 'paid2_time' : app_helper.time_str(), 'paid2_tick' : int(time.time()), 'pay_data' : param.data, }, '$push' : { 'history' : (app_helper.time_str(), uname['openid'], '提交付款')}, }, {'status':1} ) # 如果不是DUE,说明已收到异步通知 if r==None: db.order_app.update_one( { 'order_id' : param.order_id, }, { '$set' : { 'pay_type' : param.pay_type, 'pay' : db_order['due'], 'paid2_time' : app_helper.time_str(), 'paid2_tick' : int(time.time()), }, '$push' : { 'history' : (app_helper.time_str(), uname['openid'], '提交付款')}, } ) # 返回 return json.dumps({'ret' : 0, 'data' : { 'order_id' : param.order_id, 'due' : db_order['due'], 'paid' : db_order['due'], 'status' : '已支付' }}) else: return json.dumps({'ret' : -4, 'msg' : '无效的openid'})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(openid='', session_id='', type='', data='') if param.type == '': return json.dumps({'ret': -2, 'msg': '参数错误'}) if param.type not in ['GPS', 'NAME']: return json.dumps({'ret': -3, 'msg': 'type参数错误'}) if param.openid == '' and param.session_id == '': return json.dumps({'ret': -2, 'msg': '参数错误1'}) # 同时支持openid和session_id if param.openid != '': uname = app_helper.check_openid(param.openid) else: uname = app_helper.wx_logged(param.session_id) if uname: # 准备用户坐标 if param.type == 'NAME': ret, loc = lbs.addr_to_loc(param['data'].encode('utf-8')) print ret, loc if ret < 0: # 重试一次,网络可能会失败 ret, loc = lbs.addr_to_loc(param['data'].encode('utf-8')) print ret, loc if ret < 0: loc = {'lat': 0, 'lng': 0} else: loc0 = param.data.split(',') # 31.20474193,121.620708272 loc = {'lat': float(loc0[0]), 'lng': float(loc0[1])} # 找最近距离的店 min_d = 999999 min_shop = None poly_shop = None # 多边形匹配 db_shop = db.base_shop.find( {'type': { '$in': ['chain', 'store', 'dark'] }}) for s in db_shop: if s.get('app_shop', 1) == 0: # 忽略不支持线上销售的店 continue #d=lbs.geo_distance(s['loc']['lat'],s['loc']['lng'],loc['lat'],loc['lng']) #print 'd = ', d, min_d #if d<s.get('radius', 2) and d<min_d: # 默认半径2公里 # min_d=d # min_shop=(s['_id'],s['name'],s['address']) # 多边形检查 poly = s.get('poly_xy', []) if len(poly) == 0: # 没有多边形数据 print "缺少多边形数据!" continue if lbs.wn_PnPoly((loc['lat'], loc['lng']), poly) != 0: print 'bingo! poly_shop' poly_shop = (s['_id'], s['name'], s['address']) break if poly_shop == None and min_shop == None: print '不在配送范围内' return json.dumps({'ret': -6, 'msg': '不在配送范围内'}) if poly_shop == None: # 返回最近shop print 'choose:', min_shop[1].encode('utf-8') return json.dumps({ 'ret': 0, 'data': { 'shop_id': str(min_shop[0]), 'shop_name': min_shop[1], 'address': min_shop[2], } }) else: # 返回多边形匹配shop print 'choose:', poly_shop[1].encode('utf-8') return json.dumps({ 'ret': 0, 'data': { 'shop_id': str(poly_shop[0]), 'shop_name': poly_shop[1], 'address': poly_shop[2], } }) else: return json.dumps({'ret': -4, 'msg': '无效的openid'})
def POST(self): web.header('Content-Type', 'application/json') param = web.input(session_id='', page_size='', page_index='') if '' in (param.page_size, param.page_index): return json.dumps({'ret': -2, 'msg': '参数错误'}) if param.session_id == '': return json.dumps({'ret': -1, 'msg': 'session_id参数错误'}) uname = app_helper.wx_logged(param.session_id) if uname is None: return json.dumps({'ret': -4, 'msg': '无效的session_id'}) #-------------------------------------------------- course_list = [] # 用户自己买的课程 r2 = db.user_property.find( { 'userid': uname['userid'], 'status': 'paid', 'obj_type': 'course' }, sort=[('_id', 1)], # 按时间倒序 #skip=int(param.page_size)*int(param.page_index), #limit=int(param.page_size) ) course_list = [x['obj_id'] for x in r2] # 被授权的课程 r4 = db.employee_auth.find({'employee_userid': uname['userid']}) for x in r4: for y in x['object_list']: if y not in course_list: course_list.append(y) # 取指定区间的 start_pos = int(param.page_size) * int(param.page_index) end_pos = start_pos + int(param.page_size) course_list = course_list[start_pos:end_pos] course_data = [] for i in course_list: r3 = db.obj_store.find_one({'obj_id': i}) if r3 is None: continue if len(r3['image']) > 0: # 取第1张图 image_url = app_helper.image_url(r3['image'][0]) else: image_url = '' # 已授权店员数,只统计本店主的店员数 auth_num = db.employee_auth.find({ 'owner_userid': uname['userid'], 'object_list': r3['obj_id'] }).count() # 测试成绩 r5 = db.test_info.find_one({ 'userid': uname['userid'], 'obj_id': r3['obj_id'] }) score = r5['score'] if r5 else -1 # 完成进度 r6 = db.progress_info.find_one({ 'userid': uname['userid'], 'obj_id': r3['obj_id'] }) progress = r6['progress'] if r6 else 0 # 是否有测试题 r7 = db.exam_info.find({ 'obj_id': r3['obj_id'], 'available': 1 }).count() course_data.append({ "object_id": r3['obj_id'], # 内部唯一标识 "title": r3['title'], "title2": r3['title2'], "speaker": r3['speaker'], "type": 1 if r3['media'] == 'video' else 2, # 1- 视频 2 - 音频 "image": image_url, # 课程主图 "length": r3['length'], # 长度,单位:分钟 "progress": progress, # 课程进度百分比,0表示未上课,100表示已上课 "exam_score": score, # 课后测试成绩,-1表示未测试 "auth_num": auth_num, # 已授权店员数 , "have_exam": 1 if r7 > 0 else 0, # 是否有课后测试,2017-06-09 }) ret_data = { "course": course_data, "total": len(course_data), # 返回的课程数量,小于 page_size说明到末尾 "page_size": param.page_size, # 分页尺寸,与调用参数相同 "page_index": param.page_index, # 页索引 } # 返回 return json.dumps({ 'ret': 0, 'data': ret_data, })