1.需求

我现在有一个问题 就是 电影票方面 用户购买成功 需要给用户发送短信 取票码链接 一个专门的取票码页面 但是有一个问题 就是腾讯云的链接变量有限制

2024030300045 这样的订单号肯定是不行的 传递不过去

2.实现

将20 去掉前面的20 即 24030300045

使用base 62 的相互转换

//将十进制转换位base62进制decimalToBase62(decimal) {const characters ='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // Base62字符集合let result = '';while (decimal > 0) {const remainder = decimal % 62;result = characters[remainder] + result;decimal = Math.floor(decimal / 62);}return result;}//将base62进制转换为十进制base62ToDecimal(base62) {const characters ='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // Base62字符集合const base = characters.length;let decimal = 0;let power = 1;for (let i = base62.length - 1; i >= 0; i--) {const index = characters.indexOf(base62[i]);if (index === -1) {throw new Error('Invalid base62 character');}decimal += index * power;power *= base;}return decimal;}

就是 将你的订单号 生成 base62 的字符 以后 传递到腾讯云

然后 获取订单详情的时候 再想办法 把他解出来 比如去掉20 你解出来以后 还需要在加上20 目前是2024 年 只要 不出意外 反正能用七十多年还 如果说严谨的话 的确 不是很严谨 因为你要考虑70多年以后咋办 还得改成21

//返回订单详情async PageDetail(body) {const lpOrderNo = this.base62ToDecimal(body.code);console.log('20' + lpOrderNo.toString(), 'lpOrderNo.toString()');const orderInfo = await this.businessOrderEntity.findOneBy({lpOrderNo: '20' + lpOrderNo.toString(),});console.log(orderInfo, 'orderInfo');return orderInfo;}//返回取票码async PageVote(query) {try {if (!query.orderNo) {throw new CoolCommException('未找到订单号~');}const res = await this.bussinessVoteEntity.find({where: { orderId: query.orderNo },});if (res.length) {return res;} else {return [];}} catch (error) {throw new CoolCommException('暂无词条数据');}}//这个是我的后端接口基本上就是在加上20