Exemplo n.º 1
0
def pay_order(request):
	order_to_pay = None	
	profile = request.user_profile
	webapp_user = request.webapp_user

	order_id = request.POST.get('order_id', None)
	if order_id is None:
		response = create_response(400)
		response.errMsg = u'订单不存在'
		return response.get_response()

	try:
		order_to_pay = Order.objects.get(id=order_id)
	except:
		response = create_response(500)
		response.errMsg = u'获取订单失败'
		response.innerErrMsg = full_stack()
		return response.get_response()
	
	interface_id = int(request.POST.get('interface_id', 0))
	pay_interface = PayInterface.objects.get(id=interface_id)
	pay_url = shihuazhiye_util.pay(pay_interface, order_to_pay, request.webapp_owner_id)
	if pay_url:
		response = create_response(200)
		response.data.url = pay_url
	else:
		response = create_response(500)
		response.errMsg = u'支付失败'
		stack = unicode_full_stack()
		response.innerErrMsg = full_stack()
	
	return response.get_response()
Exemplo n.º 2
0
def get_or_create_messge(context, from_weixin_user):
    request, message, user_profile, member, response_rule, from_weixin_user, is_from_simulator = _get_info_from_context(
        context)

    try:
        mp_user = WeixinMpUser.objects.get(owner_id=user_profile.user_id)
    except:
        if settings.DUMP_DEBUG_MSG:
            from core.exceptionutil import full_stack
            print '========== start monitored exception =========='
            print full_stack()
            print 'no mp_user for webapp_id ', user_profile.webapp_id
            print '========== finish monitored exception =========='
        #没有注册mp user,人工客服不可用,直接返回
        return

    sender_icon = _get_weixin_user_head_icon(from_weixin_user.username)
    if message.has_key("content"):  #:hasattr(message, 'content'):
        content = message["content"]
    else:
        content = ''
    mediaId, picUrl = '', ''
    if message["msgType"] == WeixinMessageTypes.TEXT:
        content = message["content"]
    elif message["msgType"] == WeixinMessageTypes.VOICE:
        mediaId = message["mediaId"]
    elif message["msgType"] == WeixinMessageTypes.IMAGE:
        mediaId = message["mediaId"]
        picUrl = message["picUrl"]

    params = {
        'sender_username': from_weixin_user.username,
        'sender_nickname': from_weixin_user.username,
        'sender_fake_id': '',
        'sender_icon': sender_icon,
        'receiver_username': mp_user.username,
        'receiver_nickname': mp_user.username,
        'receiver_fake_id': '',
        'receiver_icon': '[not used]',
        'content': content,
        'mpuser': mp_user,
        'mode': settings.MODE,
        'weixin_created_at': message["createTime"],
        'message_type': message["msgType"],
        'msg_id': message["msgId"],
        'pic_url': picUrl,
        'media_id': mediaId
    }
    if 'sender_fake_id' in request["POST"]:
        params['sender_fake_id'] = request["POST"]['sender_fake_id']

    return message_util.record_message(params)
Exemplo n.º 3
0
    def _record_message(self, request, message, user_profile,
                        from_weixin_user):
        try:
            mp_user = WeixinMpUser.objects.get(owner_id=user_profile.user_id)
        except:
            if settings.DUMP_DEBUG_MSG:
                from core.exceptionutil import full_stack
                print '========== start monitored exception =========='
                print full_stack()
                print 'no mp_user for webapp_id ', user_profile.webapp_id
                print '========== finish monitored exception =========='
            #没有注册mp user,人工客服不可用,直接返回

            return

        sender_icon = self._get_weixin_user_head_icon(
            from_weixin_user.username)
        if hasattr(message, 'content'):
            content = message.content
        else:
            content = ''
        mediaId, picUrl = '', ''
        if message.msgType == WeixinMessageTypes.TEXT:
            content = message.content
        elif message.msgType == WeixinMessageTypes.VOICE:
            mediaId = message.mediaId
        elif message.msgType == WeixinMessageTypes.IMAGE:
            mediaId = message.mediaId
            picUrl = message.picUrl

        params = {
            'sender_username': from_weixin_user.username,
            'sender_nickname': from_weixin_user.username,
            'sender_fake_id': '',
            'sender_icon': sender_icon,
            'receiver_username': mp_user.username,
            'receiver_nickname': mp_user.username,
            'receiver_fake_id': '',
            'receiver_icon': '[not used]',
            'content': content,
            'mpuser': mp_user,
            'mode': settings.MODE,
            'weixin_created_at': message.createTime,
            'message_type': message.msgType,
            'msg_id': message.msgId,
            'pic_url': picUrl,
            'media_id': mediaId
        }
        if 'sender_fake_id' in request.POST:
            params['sender_fake_id'] = request.POST['sender_fake_id']

        return message_util.record_message(params)
Exemplo n.º 4
0
def get_express_details_by_order(order):
    """
	根据 order 获取 快递明细信息
	"""
    details = ExpressDetail.objects.filter(
        order_id=order.id).order_by('-display_index')
    if details.count() > 0:
        return list(details)

    expresses = ExpressHasOrderPushStatus.objects.filter(
        express_company_name=order.express_company_name,
        express_number=order.express_number)
    if expresses.count() == 0:
        return list([])

    try:
        express = expresses[0]
        return list(
            ExpressDetail.objects.filter(
                express_id=express.id).order_by('-display_index'))
    except:
        innerErrMsg = full_stack()
        watchdog_fatal(
            u'获取快递详情失败,order_id={}, case:{}'.format(order.id, innerErrMsg),
            EXPRESS_TYPE)
        return list([])
Exemplo n.º 5
0
def wapi_log(self, app, resource, method, params, time_in_s, status=0):
    """
	记录WAPI信息,保存到mongo中
	"""
    try:
        if settings.WAPI_LOGGER_ENABLED:
            global _wapi_logger
            if _wapi_logger is None:
                _wapi_logger = MongoAPILogger()
            if settings.MODE == 'develop' or settings.MODE == 'test':
                logging.info(
                    "develop mode, called WAPI (in {} s): {} {}/{}, param: {}".
                    format(time_in_s, method, app, resource,
                           param_to_text(params)))
            return _wapi_logger.log(app, resource, method,
                                    morph_params(params), time_in_s, status)
        else:
            logging.info("called WAPI (in {} s): {} {}/{}, param: {}".format(
                time_in_s, method, app, resource, param_to_text(params)))
        return 'OK'
    except:
        logging.error("Failed to send wapi log, retrying.:Cause:\n{}".format(
            full_stack()))
        raise self.retry()
    return 'OK'
Exemplo n.º 6
0
def _watchdog(type,
              message,
              severity=WATCHDOG_INFO,
              user_id='0',
              db_name='default'):
    """
	watchdog : 向日志记录表添加一条日志信息
	"""
    try:
        if isinstance(user_id, int):
            user_id = str(user_id)

        if settings.WATCH_DOG_DEVICE == 'console':
            if severity == WATCHDOG_DEBUG:
                severity = 'DEBUG'
            elif severity == WATCHDOG_INFO:
                severity = 'INFO'
            elif severity == WATCHDOG_NOTICE:
                severity = 'NOTICE'
            elif severity == WATCHDOG_WARNING:
                severity = 'WARNING'
            elif severity == WATCHDOG_ERROR:
                severity = 'ERROR'
            elif severity == WATCHDOG_FATAL:
                severity = 'FATAL'
            elif severity == WATCHDOG_ALERT:
                severity = 'ALERT'
            elif severity == WATCHDOG_EMERGENCY:
                severity = 'EMERGENCY'
            else:
                severity = 'UNKNOWN'
            # if not settings.IS_UNDER_BDD:
            # 	logging.info("[%s] [%s] : %s" % (severity, type, message))
        else:
            try:
                # if not settings.IS_UNDER_BDD:
                # 	logging.info("[%s] [%s] : %s" % (severity, type, message))
                WeappMessage.objects.using(settings.WATCHDOG_DB).create(
                    type=type,
                    message=message,
                    severity=severity,
                    user_id=user_id)
            except:
                # logging.error(u'>>>>>>>>>>>>>>>>> not connection operation databases settings.WATCHDOG_DB={}'.format(settings.WATCHDOG_DB))
                # logging.error("Cause:\n{}".format(full_stack()))
                print 'error message==============', message
                Message.objects.create(type=type,
                                       message=message,
                                       severity=severity,
                                       user_id=user_id)
    except:
        #TODO, 通过监控和心跳来发现
        try:
            logging.error(
                "Failed to save watchdog, type:{}, message:{}".format(
                    type, message))
            logging.error("Cause:\n{}".format(full_stack()))
        except:
            pass
Exemplo n.º 7
0
def pay_order(request):
    """
	订单支付api, 获取【支付跳转路径】
	避免使用,直接通过save_order方法返回【支付跳转路径】
	"""
    order_to_pay = None
    #profile = request.user_profile
    #webapp_user = request.webapp_user

    order_id = request.POST.get('order_id', None)
    if order_id is None:
        response = create_response(400)
        response.errMsg = u'订单不存在'
        return response.get_response()

    try:
        order_to_pay = Order.objects.get(id=order_id)
    except:
        response = create_response(500)
        response.errMsg = u'获取订单失败'
        response.innerErrMsg = full_stack()
        return response.get_response()

    interface_id = int(request.POST.get('interface_id', 0))
    if interface_id == 0:
        #没有指定interface id, 根据interface type获取
        pay_interface = PayInterface.objects.get(
            owner_id=request.webapp_owner_id,
            type=request.POST['interface_type'])
    else:
        pay_interface = PayInterface.objects.get(id=interface_id)

    pay_url = pay_interface.pay(order_to_pay, request.webapp_owner_id)
    if pay_url:
        response = create_response(200)
        response.data.url = pay_url
    else:
        response = create_response(500)
        response.errMsg = u'支付失败'
        #stack = unicode_full_stack()
        response.innerErrMsg = full_stack()

    return response.get_response()
Exemplo n.º 8
0
def save_activity_apply(request, webapp_id, activity_id):
    member = mobile_views.__get_current_member(request)
    try:
        activity = Activity.objects.get(id=activity_id)
    except:
        response = create_response(500)
        response.errMsg = u'该活动不存在'
        response.innerErrMsg = full_stack()
        return response.get_response()

    if member is None:
        response = create_response(500)
        response.errMsg = u'您还不是会员'
        return response.get_response()

    if request.POST:
        try:
            items = ActivityItems.objects.filter(activity=activity)
            for item in items:
                input_name = '{}-{}'.format(item.id, item.type)
                if item.type == TYPE_IMAGE:
                    file = request.POST[input_name]
                    value = save_base64_img_file_local_for_webapp(
                        request, file)
                else:
                    value = request.POST.get(input_name, '')

                ItmesValue.objects.create(owner=request.user_profile.user,
                                          items=item,
                                          activity=activity,
                                          member=member,
                                          value=value)
            response = create_response(200)
        except:
            response = create_response(500)
            response.errMsg = u'提交错误'
            response.innerErrMsg = full_stack()
            return response.get_response()
    else:
        response = create_response(500)
        response.errMsg = u'is not POST method'
    return response.get_response()
Exemplo n.º 9
0
def get_cities(request, province_id):
    response = create_response(200)

    try:
        cities = _get_cities_for_province(province_id)
        response.data = cities
    except:
        response = create_response(500)
        response.innerErrMsg = full_stack()

    return response.get_response()
Exemplo n.º 10
0
def get_provinces(request):
    response = create_response(200)

    try:
        provinces = _get_all_provinces()
        response.data = provinces
    except:
        response = create_response(500)
        response.innerErrMsg = full_stack()

    return response.get_response()
Exemplo n.º 11
0
def get_districts(request, city_id):
    response = create_response(200)

    try:
        districts = _get_districts_for_city(city_id)
        response.data = districts
    except:
        response = create_response(500)
        response.innerErrMsg = full_stack()

    return response.get_response()
Exemplo n.º 12
0
def play_test_game(request):
    member = request.member
    webapp_user = request.webapp_user
    game_id = request.POST['game_id']
    score = request.POST['score']

    try:
        game = TestGame.objects.get(id=game_id)
    except:
        response = create_response(500)
        response.errMsg = u'该趣味测试不存在'
        response.innerErrMsg = full_stack()
        return response.get_response()

    if request.POST:
        try:
            is_participated = False  #是否已经参加
            #判断是否参与过
            records = TestGameRecord.objects.filter(
                webapp_user_id=webapp_user.id, test_game=game.id)
            if records:
                is_participated = True

            TestGameRecord.objects.create(test_game=game,
                                          webapp_user_id=webapp_user.id,
                                          score=score)

            if member and (not is_participated):
                prize_info = PrizeInfo.from_json(game.award_prize_info)
                award(prize_info, member, u'趣味测试获得积分')
            response = create_response(200)
        except:
            response = create_response(500)
            response.errMsg = u'提交错误'
            response.innerErrMsg = full_stack()
            return response.get_response()
    else:
        response = create_response(500)
        response.errMsg = u'is not POST method'

    return response.get_response()
Exemplo n.º 13
0
def get_order_info(request):
	express_company = request.GET.get('company', '')
	express_number = request.GET.get('number', '')
	order_by = request.GET.get('order_by', 'desc')

	response = create_response(200)
	try:
		query = ExpressOrderQuery(request, express_company, express_number, order_by)
		json_data = query.get_express_order_data()
		response.data = json_data
	except:
		response = create_response(500)
		response.errMsg = u'获取失败'
		response.innerErrMsg = full_stack()
		watchdog_fatal(u'代码错误!%s' % response.innerErrMsg, EXPRESS_TYPE)

	return response.get_response()
Exemplo n.º 14
0
def __get_http_response_data(domain, url, method="GET"):
    error_info = None
    conn = httplib.HTTPConnection(domain)
    try:
        conn.request(method, url)
        r1 = conn.getresponse()
        print r1.status
        if r1.status is not 200:
            error_info = r1.read()
            data_str = None
        else:
            data_str = r1.read()
    except:
        data_str = None
        error_info = full_stack()
    finally:
        conn.close()
    return data_str, error_info
Exemplo n.º 15
0
    def _verify_response(self):
        """用支付宝返回的notify_id调用支付宝相应接口验证是否是支付宝发来的请求"""

        verity_url = self.ALIPAY_VERIFY_URL_TMPL.format(
            self.config.partner, self.notify_data_soup.notify_id.text)

        verified_result = 'false'
        verify_response = None
        try:
            verify_response = urllib2.urlopen(verity_url)
            verified_result = verify_response.read().strip()
        except:
            try:
                watchdog_error(u'从支付宝验证失败' + full_stack())
            except:
                pass

        return verified_result
Exemplo n.º 16
0
def update_order_status(request):
    order_id = request.POST.get('order_id', 0)
    action = request.POST.get('action', '')
    if not order_id or action == '':
        response = create_response(500)
        response.errMsg = u'webapp中修改订单失败'
        return response.get_response()

    try:
        order = Order.objects.get(id=order_id)
        mall_api.update_order_status(request.user, action, order)
        response = create_response(200)
    except:
        response = create_response(500)
        response.errMsg = u'webapp中修改订单失败'
        response.innerErrMsg = full_stack()
        notify_message = u"webapp中修改订单状态失败, order_id:{}, action:{}, cause:\n{}".format(
            order_id, action, unicode_full_stack())
        watchdog_error(notify_message)

    return response.get_response()
Exemplo n.º 17
0
def get_weather_info(request):
    weathers = Weather.objects.all()
    response = create_response(200)
    city_code = "101180801"
    morning_time = 6  # 早晨时间
    night_time = 18  # 晚上时间

    today_date = datetime.now()
    try:
        if weathers.count() == 0:
            weather_info, weather = __get_weather_info(city_code)
        else:
            weather = weathers[0]
            if __is_out_time_span(weather.update_time, weather.update_span):
                weather_info, weather = __get_weather_info(
                    city_code, weather_id=weather.id)
            else:
                weather_info = json.loads(weather.info)

        response.data.weather_info = weather_info
        response.data.today_date = today_date.strftime("%Y年%m月%d日")
        response.data.create_time = weather.update_time.strftime(
            "%Y年%m月%d日 %H:%M")

        # 计算白天还是晚上,True为白天,False为晚上
        hour = int(weather.update_time.strftime("%H"))
        if morning_time <= hour and hour < night_time:
            response.data.is_daytime = True
        else:
            response.data.is_daytime = False

        # 当前温度
        response.data.current_temp = __get_current_temp(city_code)
    except:
        response = create_response(500)
        response.errMsg = u'获取失败'
        response.innerErrMsg = full_stack()
        watchdog_fatal(u'代码错误!%s' % response.innerErrMsg, WATCHDOG_TYPE)

    return response.get_response()
Exemplo n.º 18
0
def get_or_create_messge(context, from_weixin_user):
    request, message, user_profile, member, response_rule, from_weixin_user, is_from_simulator = _get_info_from_context(
        context)

    try:
        mp_user = WeixinMpUser.objects.get(owner_id=user_profile.user_id)
    except:
        if settings.DUMP_DEBUG_MSG:
            from core.exceptionutil import full_stack
            print '========== start monitored exception =========='
            print full_stack()
            print 'no mp_user for webapp_id ', user_profile.webapp_id
            print '========== finish monitored exception =========='
        #没有注册mp user,人工客服不可用,直接返回
        return

    sender_icon = _get_weixin_user_head_icon(from_weixin_user.username)
    if message.has_key("content"):  #:hasattr(message, 'content'):
        content = message["content"]
    else:
        content = ''
    mediaId, picUrl = '', ''
    if message["msgType"] == WeixinMessageTypes.TEXT:
        content = message["content"]
    elif message["msgType"] == WeixinMessageTypes.VOICE:
        mediaId = message["mediaId"]
    elif message["msgType"] == WeixinMessageTypes.IMAGE:
        mediaId = message["mediaId"]
        picUrl = message["picUrl"]
        try:
            import time
            if picUrl.find('mmbiz.qpic.cn') > -1:
                nonce_str = ''.join(
                    random.sample(string.ascii_letters + string.digits, 6))
                picUrlName = "%s%s" % (nonce_str, str(int(time.time() * 1000)))
                picUrl = upyun_util.upload_weixin_url_to_upyun(
                    picUrl, picUrlName)
        except:
            print 'error at picUrl to upyun'

    #判断是否公众号信息: added by slzhu
    is_from_mp_user = False
    if response_rule:
        is_from_mp_user = True

    is_un_read_msg = True
    if response_rule and response_rule.has_key(
            'type') and response_rule['type'] == 1:
        is_un_read_msg = False

    params = {
        'sender_username': from_weixin_user.username,
        'sender_nickname': from_weixin_user.username,
        'sender_fake_id': '',
        'sender_icon': sender_icon,
        'receiver_username': mp_user.username,
        'receiver_nickname': mp_user.username,
        'receiver_fake_id': '',
        'receiver_icon': '[not used]',
        'content': content,
        'mpuser': mp_user,
        'mode': settings.MODE,
        'weixin_created_at': message["createTime"],
        'message_type': message["msgType"],
        'msg_id': message["msgId"],
        'pic_url': picUrl,
        'media_id': mediaId,
        'is_from_mp_user': is_from_mp_user,
        'is_un_read_msg': is_un_read_msg
    }
    # if 'sender_fake_id' in request["POST"]:
    # 	params['sender_fake_id'] = request["POST"]['sender_fake_id']
    #return message_util.record_message(params)
    return message_util.record_message(params)
Exemplo n.º 19
0
    def simple_app(environ, start_response):

        # 修改窗口名,目前只对windows有效
        try:
            os.system("title {}_bdd_server".format(self_name))
        except:
            pass

        setup_testing_defaults(environ)

        status = '200 OK'
        headers = [('Content-type', 'text/plain')]

        start_response(status, headers)

        # the environment variable CONTENT_LENGTH may be empty or missing
        try:
            request_body_size = int(environ.get('CONTENT_LENGTH', 0))
        except (ValueError):
            request_body_size = 0

        # When the method is POST the query string will be sent
        # in the HTTP request body which is passed by the WSGI server
        # in the file like wsgi.input environment variable.
        # 从http request解析请求
        request_body = environ['wsgi.input'].read(request_body_size)
        post = parse_qs(request_body)
        step_data = json.loads(post['data'][0])
        step = step_data['step'].strip()

        # 1. 解析step
        # 2. 执行step
        # 3. 分类step执行结果
        # 4. 返回http response

        # 0:成功,1:业务失败,2:异常
        result = 0
        if step == '__reset__':
            print('*********************** run step **********************')
            print(u'Reset bdd environment...')
            environment.after_scenario(context, context.scenario)
            environment.before_scenario(context, context.scenario)

            resp = {'result': result, 'bdd_server_name': self_name}

            return base64.b64encode(json.dumps(resp))
        else:
            # 解析请求携带的context
            _set_context_attrs(context, json.loads(step_data['context_attrs']))

            if step_data['context_text']:
                step_content = step_data['context_text']
            else:
                step_content = step_data['context_table']
            step = u'%s\n"""\n%s\n"""' % (step_data['step'], step_content)
            print('*********************** run step **********************')
            print(step)

            context_attrs = {}
            traceback = ''

            try:
                context.execute_steps(step)
            except AssertionError:
                result = 1
                from core.exceptionutil import full_stack
                print('*********************** failure **********************')
                traceback = full_stack()
                print(traceback.decode('utf-8'))

            except:
                result = 2
                from core.exceptionutil import full_stack
                print(
                    '*********************** exception **********************')
                traceback = full_stack()
                print(traceback.decode('utf-8'))

            else:
                result = 0
                context_attrs = context._stack[0]

            resp = {
                'result': result,
                'traceback': traceback,
                'context_attrs': context_attrs,
                'bdd_server_name': self_name
            }

            # 传递context时忽略基本类型外的对象
            return base64.b64encode(json.dumps(resp, default=_default))
Exemplo n.º 20
0
def join_research(request):
    member = request.member
    webapp_user = request.webapp_user
    research_id = request.POST['research_id']

    try:
        research = Research.objects.get(id=research_id)
    except:
        response = create_response(500)
        response.errMsg = u'该调研不存在'
        response.innerErrMsg = full_stack()
        return response.get_response()

    username = ''
    phone_number = ''
    if request.POST:
        try:
            items = ResearchItem.objects.filter(research=research)
            for item in items:
                input_name = '{}-{}'.format(item.id, item.type)
                if item.type == RESEARCHITEM_TYPE_IMAGE:
                    file = request.POST[input_name]
                    if file:
                        value = save_base64_img_file_local_for_webapp(
                            request, file)
                    else:
                        value = ''
                else:
                    value = request.POST.get(input_name, '')

                if item.title == u'姓名':
                    username = value
                if item.title == u'手机号':
                    phone_number = value

                ResearchItemValue.objects.create(
                    owner_id=request.webapp_owner_id,
                    item=item,
                    research=research,
                    webapp_user=webapp_user,
                    value=value)

            if member:
                try:
                    member.update_member_info(username, phone_number)
                except:
                    #不同步到会员
                    pass

                #给予奖励
                #无奖励
                if research.prize_type == -1:
                    pass
                #优惠券
                elif research.prize_type == 1:
                    rule_id = research.prize_source
                    # coupons = create_coupons(research.owner, rule_id, 1, member.id)
                    consume_coupon(research.owner.id, rule_id, member.id)
                #积分
                elif research.prize_type == 3:
                    prize_detail = research.prize_source
                    #增加积分
                    member.consume_integral(-int(prize_detail), u'参与调研,获得积分')

            response = create_response(200)
        except:
            response = create_response(500)
            response.errMsg = u'提交错误'
            response.innerErrMsg = full_stack()
            return response.get_response()
    else:
        response = create_response(500)
        response.errMsg = u'is not POST method'

    return response.get_response()
Exemplo n.º 21
0
def join_activity(request):
    weapp_user = request.webapp_user
    member = weapp_user.get_member_by_webapp_user_id(weapp_user.id)
    activity_id = request.POST['activity_id']

    try:
        activity = Activity.objects.get(id=activity_id)
    except:
        response = create_response(500)
        response.errMsg = u'该活动不存在'
        response.innerErrMsg = full_stack()
        return response.get_response()

    if not activity.is_non_member:
        if member is None:
            response = create_response(500)
            response.errMsg = u'您还不是会员'
            return response.get_response()

    username = ''
    phone_number = ''
    if request.POST:
        try:
            response = create_response(200)
            if activity.is_enable_offline_sign:
                sign_code = _create_activity_sign_code(request.webapp_user.id,
                                                       activity.id)
                ActivityUserCode.objects.create(
                    owner_id=request.webapp_owner_id,
                    activity=activity,
                    webapp_user_id=weapp_user.id,
                    sign_code=sign_code)
                response.data.sign_code = sign_code
            items = ActivityItem.objects.filter(activity=activity)
            for item in items:
                input_name = '{}-{}'.format(item.id, item.type)
                if item.type == ACTIVITYITEM_TYPE_IMAGE:
                    file = request.POST[input_name]
                    if file:
                        value = save_base64_img_file_local_for_webapp(
                            request, file)
                    else:
                        value = ''
                else:
                    value = request.POST.get(input_name, '')

                if item.title == u'姓名':
                    username = value
                if item.title == u'手机号':
                    phone_number = value

                ActivityItemValue.objects.create(
                    owner_id=request.webapp_owner_id,
                    webapp_user_id=weapp_user.id,
                    item=item,
                    activity=activity,
                    value=value)
            try:
                #是否开启线下签到
                is_enable_offline_sign = activity.is_enable_offline_sign
                if not is_enable_offline_sign and member:
                    member.update_member_info(username, phone_number)
                    #给予奖励
                    #无奖励
                    if activity.prize_type == -1:
                        pass
                    #优惠券
                    elif activity.prize_type == 1:
                        rule_id = activity.prize_source
                        # coupons = create_coupons(activity.owner, rule_id, 1, member.id)
                        consume_coupon(activity.owner.id, rule_id, member.id)
                    #积分
                    elif activity.prize_type == 3:
                        prize_detail = activity.prize_source
                        #增加积分
                        member.consume_integral(-int(prize_detail),
                                                u'参加活动,获得积分')
            except:
                ActivityItemValue.objects.filter(
                    owner_id=request.webapp_owner_id,
                    activity=activity,
                    webapp_user_id=weapp_user.id).delete()
                ActivityUserCode.objects.filter(
                    owner_id=request.webapp_owner_id,
                    activity=activity,
                    webapp_user_id=weapp_user.id,
                ).delete()
                raise IOError
        except:
            notify_msg = u"活动报名失败, cause:\n{}".format(unicode_full_stack())
            watchdog_fatal(notify_msg)
            response = create_response(500)
            response.errMsg = u'提交错误'
            response.innerErrMsg = full_stack()
            return response.get_response()
    else:
        response = create_response(500)
        response.errMsg = u'is not POST method'

    return response.get_response()