hejianhao
2026-04-24 b96dc6440a5f74c3e1a9922d41cf64d2357ee7e4
feat(订阅): 上报用户同意的订阅模板到后端

新增 saveUserSubscribeMessage API 用于保存用户同意的订阅模板记录。
在订阅成功后,从结果中提取用户接受的模板ID并异步上报至后端,失败不影响主流程。
1个文件已添加
1个文件已修改
40 ■■■■■ 已修改文件
src/robotaxi/api/subscribe.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/subscribe.ts 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/api/subscribe.ts
New file
@@ -0,0 +1,13 @@
import request from '../../utils/request';
import { _ROBOTAXI_HOST } from '../../constants/api';
/**
 * 保存用户已同意的订阅模板记录。
 */
export const saveUserSubscribeMessage = async (payload: { templateIds: string[]; jscode: string }) => {
  return request({
    url: _ROBOTAXI_HOST + '/account/api/v1/mini-program/subscribeMessage/saveUserSubscribeMessage',
    method: 'POST',
    payload
  }, true);
};
src/utils/subscribe.ts
@@ -6,6 +6,7 @@
import Taro from "@tarojs/taro";
import { checkOtp } from "./tools";
import { saveUserSubscribeMessage } from "../robotaxi/api/subscribe";
import {
  OPERATION_COUPON_SUBSCRIBE_CONFIG,
  ORDER_SUCCESS_SUBSCRIBE_CONFIG,
@@ -97,6 +98,30 @@
  return `${sceneKey}_${bizId}`;
}
/**
 * 从订阅结果中提取用户同意(accept)的模板 ID。
 */
function getAcceptedTemplateIds(tmplIds: string[], result: Record<string, string>) {
  return tmplIds.filter((id) => result?.[id] === 'accept');
}
/**
 * 用户同意订阅后上报后端(失败不影响主流程)。
 */
async function saveAcceptedSubscribeTemplates(templateIds: string[]) {
  if (!Array.isArray(templateIds) || templateIds.length === 0) return;
  try {
    const loginRes = await Taro.login();
    const jscode = loginRes?.code;
    if (!jscode) return;
    await saveUserSubscribeMessage({
      templateIds,
      jscode
    });
  } catch (error) {
  }
}
// 执行通用订阅流程(失败/拒绝不影响主流程)
export async function runSubscribeScene(config: SubscribeSceneConfig, bizId?: string | number) {
  try {
@@ -108,6 +133,8 @@
        tmplIds: config.tmplIds,
        success: (result) => {
          checkSubscribeStatus(type, config.tmplIds, result, config.limit);
          const acceptedTemplateIds = getAcceptedTemplateIds(config.tmplIds, result as Record<string, string>);
          void saveAcceptedSubscribeTemplates(acceptedTemplateIds);
          resolve();
        },
        fail: () => {