Skip to content

用户事件

本页面介绍用户相关的事件类型及处理示例。

事件列表

事件标识说明payload
USER_REGISTER用户注册用户ID
USER_LOGIN_SUCCESS用户登录成功用户ID
USER_UPDATE_INFO用户信息修改用户ID
USER_UPDATE_PHONE用户手机号修改用户ID
USER_CHANGE_PASSWORD用户密码修改用户ID
USER_BIND_WECHAT用户绑定微信用户ID
USER_BIND_ALIPAY用户绑定支付宝用户ID
USER_LOGOFF用户注销用户ID
USER_SIGN_IN用户签到成功用户ID
USER_POINTS_EXCHANGE用户积分兑换成功兑换记录ID
USER_RECHARGE_SUCCESS用户充值成功充值订单号
USER_CONSUME_SUCCESS用户消费成功消费订单号
USER_LEVEL_UP会员等级升级用户ID
USER_PAID_MEMBER_BUY购买付费会员成功会员订单ID

事件数据结构

大多数用户事件的payload用户ID(Long类型):

json
{
  "eventKey": "USER_REGISTER",
  "payload": 12345,
  "timestamp": 1704067200000
}

USER_REGISTER - 用户注册

新用户注册成功时触发。

触发时机

  • 微信小程序授权登录首次注册
  • 手机号验证码注册
  • H5/APP端注册

处理示例:新用户欢迎

javascript
// 接口路径: /custom/user/welcome
// 处理 USER_REGISTER 事件

var event = payload.event;
var userId = event.payload;

log.info("处理用户注册事件: userId={}", userId);

// 查询用户信息
var user = db.selectOne(`
    SELECT uid, nickname, avatar, phone, create_time, spread_uid
    FROM eb_user
    WHERE uid = ?
`, userId);

if (!user) {
    log.error("用户不存在: {}", userId);
    return { success: false, message: "用户不存在" };
}

// 1. 发放新人优惠券
var newUserCoupons = db.select(`
    SELECT id FROM eb_store_coupon
    WHERE is_new_user = 1 AND status = 1
    AND start_time <= NOW() AND end_time >= NOW()
`);

for (coupon in newUserCoupons) {
    db.insert(`
        INSERT INTO eb_store_coupon_user
        (uid, coupon_id, status, create_time)
        VALUES (?, ?, 0, NOW())
    `, userId, coupon.id);
}
log.info("新人优惠券发放完成: userId={}, count={}", userId, newUserCoupons.length);

// 2. 发送欢迎短信
if (user.phone) {
    http.post(env.get('SMS_API_URL') + '/send', {
        headers: { 'Authorization': 'Bearer ' + env.get('SMS_API_KEY') },
        body: {
            phone: user.phone,
            template: 'user_welcome',
            params: { nickname: user.nickname || '新用户' }
        }
    });
}

// 3. 同步到CRM
http.post(env.get('CRM_API_URL') + '/customer/create', {
    headers: { 'Authorization': 'Bearer ' + env.get('CRM_TOKEN') },
    body: {
        externalId: 'miseb_' + user.uid,
        name: user.nickname,
        phone: user.phone,
        avatar: user.avatar,
        source: 'MISEB商城',
        registerTime: user.create_time,
        referrerId: user.spread_uid > 0 ? 'miseb_' + user.spread_uid : null
    }
});

log.info("用户注册处理完成: userId={}", userId);

return { success: true };

USER_LOGIN_SUCCESS - 用户登录成功

用户登录时触发。

处理示例:登录日志记录

javascript
// 接口路径: /custom/user/login-log
// 处理 USER_LOGIN_SUCCESS 事件

var event = payload.event;
var userId = event.payload;

log.info("处理用户登录事件: userId={}", userId);

// 记录登录日志(可以存到ES或数据库)
db.insert(`
    INSERT INTO user_login_log
    (uid, login_time, login_ip, user_agent)
    VALUES (?, NOW(), ?, ?)
`, userId, request.getRemoteAddr(), request.getHeader('User-Agent'));

// 检测异常登录(1小时内登录超过10次)
var loginCount = db.selectInt(`
    SELECT COUNT(*) FROM user_login_log
    WHERE uid = ?
    AND login_time > DATE_SUB(NOW(), INTERVAL 1 HOUR)
`, userId);

if (loginCount > 10) {
    // 发送告警
    var user = db.selectOne(`SELECT nickname, phone FROM eb_user WHERE uid = ?`, userId);

    http.post(env.get('DINGTALK_WEBHOOK'), {
        body: {
            msgtype: 'text',
            text: {
                content: '【异常登录告警】\n' +
                    '用户:' + user.nickname + '\n' +
                    '手机:' + user.phone + '\n' +
                    '1小时内登录次数:' + loginCount
            }
        }
    });

    log.warn("异常登录: userId={}, loginCount={}", userId, loginCount);
}

return { success: true };

USER_RECHARGE_SUCCESS - 用户充值成功

用户余额充值成功时触发。

处理示例:充值通知&同步财务

javascript
// 接口路径: /custom/finance/recharge-sync
// 处理 USER_RECHARGE_SUCCESS 事件

var event = payload.event;
var rechargeOrderNo = event.payload;  // 注意:这里是充值订单号

log.info("处理充值成功事件: orderNo={}", rechargeOrderNo);

// 查询充值订单
var recharge = db.selectOne(`
    SELECT r.*, u.nickname, u.phone
    FROM eb_user_recharge r
    LEFT JOIN eb_user u ON r.uid = u.uid
    WHERE r.order_id = ?
`, rechargeOrderNo);

// 发送充值成功短信
if (recharge.phone) {
    http.post(env.get('SMS_API_URL') + '/send', {
        body: {
            phone: recharge.phone,
            template: 'recharge_success',
            params: {
                amount: (recharge.price / 100).toFixed(2),
                giveAmount: (recharge.give_price / 100).toFixed(2)
            }
        }
    });
}

// 同步到财务系统
http.post(env.get('FINANCE_API_URL') + '/transaction/create', {
    headers: { 'Authorization': 'Bearer ' + env.get('FINANCE_API_KEY') },
    body: {
        type: 'recharge',
        orderId: rechargeOrderNo,
        userId: recharge.uid,
        amount: recharge.price / 100,
        giveAmount: recharge.give_price / 100,
        payType: recharge.pay_type,
        time: recharge.pay_time
    }
});

log.info("充值同步完成: orderNo={}", rechargeOrderNo);

return { success: true };

USER_LEVEL_UP - 会员等级升级

用户会员等级提升时触发。

处理示例:升级通知&发放权益

javascript
// 接口路径: /custom/member/level-up
// 处理 USER_LEVEL_UP 事件

var event = payload.event;
var userId = event.payload;

log.info("处理会员升级事件: userId={}", userId);

// 查询用户和会员等级信息
var user = db.selectOne(`
    SELECT u.uid, u.nickname, u.phone, u.level,
           l.name as level_name, l.discount, l.icon
    FROM eb_user u
    LEFT JOIN eb_system_user_level l ON u.level = l.id
    WHERE u.uid = ?
`, userId);

// 发送升级通知
if (user.phone) {
    http.post(env.get('SMS_API_URL') + '/send', {
        body: {
            phone: user.phone,
            template: 'member_level_up',
            params: {
                nickname: user.nickname,
                levelName: user.level_name,
                discount: user.discount
            }
        }
    });
}

// 发放升级礼包优惠券
var levelCoupons = db.select(`
    SELECT coupon_id FROM eb_system_user_level_coupon
    WHERE level_id = ?
`, user.level);

for (coupon in levelCoupons) {
    db.insert(`
        INSERT INTO eb_store_coupon_user
        (uid, coupon_id, status, create_time)
        VALUES (?, ?, 0, NOW())
    `, userId, coupon.coupon_id);
}

log.info("会员升级处理完成: userId={}, level={}", userId, user.level_name);

return { success: true };

USER_SIGN_IN - 用户签到成功

用户每日签到时触发。

处理示例:签到积分记录

javascript
// 接口路径: /custom/user/sign-log
// 处理 USER_SIGN_IN 事件

var event = payload.event;
var userId = event.payload;

log.info("处理用户签到事件: userId={}", userId);

// 查询签到信息
var signInfo = db.selectOne(`
    SELECT sign_num, integral
    FROM eb_user_sign
    WHERE uid = ?
    ORDER BY id DESC
    LIMIT 1
`, userId);

// 记录签到日志
db.insert(`
    INSERT INTO user_sign_log
    (uid, sign_date, continuous_days, points, created_at)
    VALUES (?, CURDATE(), ?, ?, NOW())
`, userId, signInfo.sign_num, signInfo.integral);

// 连续签到奖励
if (signInfo.sign_num == 7) {
    // 发放7天连签奖励
    var bonusPoints = 100;
    db.update(`
        UPDATE eb_user SET integral = integral + ? WHERE uid = ?
    `, bonusPoints, userId);

    log.info("连续7天签到奖励: userId={}, bonusPoints={}", userId, bonusPoints);
}

return { success: true };

USER_LOGOFF - 用户注销

用户申请注销账号时触发。

处理示例:数据清理通知

javascript
// 接口路径: /custom/user/logoff-notify
// 处理 USER_LOGOFF 事件

var event = payload.event;
var userId = event.payload;

log.info("处理用户注销事件: userId={}", userId);

// 查询用户信息(注销前的数据)
var user = db.selectOne(`
    SELECT uid, nickname, phone, create_time
    FROM eb_user
    WHERE uid = ?
`, userId);

// 通知CRM删除用户
http.post(env.get('CRM_API_URL') + '/customer/delete', {
    headers: { 'Authorization': 'Bearer ' + env.get('CRM_TOKEN') },
    body: {
        externalId: 'miseb_' + userId,
        reason: '用户主动注销'
    }
});

// 记录注销日志
db.insert(`
    INSERT INTO user_logoff_log
    (uid, nickname, phone, register_time, logoff_time)
    VALUES (?, ?, ?, ?, NOW())
`, userId, user.nickname, user.phone, user.create_time);

// 发送通知给运营
http.post(env.get('DINGTALK_WEBHOOK'), {
    body: {
        msgtype: 'text',
        text: {
            content: '【用户注销通知】\n' +
                '用户ID:' + userId + '\n' +
                '昵称:' + user.nickname + '\n' +
                '手机:' + user.phone
        }
    }
});

log.info("用户注销处理完成: userId={}", userId);

return { success: true };

数据库表参考

eb_user 用户表

字段说明
uid用户ID
nickname昵称
avatar头像
phone手机号
level会员等级
integral积分
now_money余额(分)
spread_uid推荐人ID
create_time注册时间

eb_user_sign 签到表

字段说明
uid用户ID
sign_num连续签到天数
integral获得积分

eb_user_recharge 充值表

字段说明
order_id充值订单号
uid用户ID
price充值金额(分)
give_price赠送金额(分)
pay_type支付方式
pay_time支付时间

下一步

成都艾唯特软件有限公司