跳到内容
Surce Beats

文章

怎么在网上卖 Beat:一个真能用的购物车

制作人在家庭录音室里用笔记本电脑工作,前面是键盘和合成器

好几年里,我店里每条 Beat 只有一个按钮:购买。它打开授权选择器,你挑一档,BeatStars 就带着这一条 Beat 把你送到它的结账页。它能用,也在悄悄丢单。如果一个制作人想买两首,他得付两次钱,因为每个按钮都开始一笔新的购买。没人这么干。他买一首,说另一首回头再来,然后就没回来。

所以 10 月 22 日,我给站上装了一个真购物车。不是插件:这家店是用 Astro 搭的静态站,没有数据库,也没有自己的后台。这是店上线以来最大的一次改动,下面讲它怎么运作。

购买按钮的问题

Beat 店不是有一辆推车的商店。它是一个目录,每件商品有六档授权,而价格随档位变,不随数量变。这就是为什么多数制作人从来不折腾购物车:平台给你每条 Beat 一个链接,你把买家送过去就行了。

代价看不见但真实。每一次额外的结账,都是买家改主意的一次机会。他走两遍付款表单,输两遍同样的信息,为两个文件收到两封分开的邮件。而如果他想把一条 Beat 的 basic 授权和另一条的 stems 授权对比着买,那两笔购买完全互不相干。

BeatStars 给了你什么可以用的东西

BeatStars 没有公开购物车 API,但它的店面前端在用一套,而且能访问。三次调用就够:

  • 创建一个购物车,用一个新 uuid。每次结账都拿一个新的,买家不会继承上一次访问留下的商品。
  • 加一行,带上曲目 id 和所选授权的 contract id。定下档位和价格的是 contract,不是单靠曲目。
  • 要一个分享链接。买家打开那个 URL 时,购物车会复制到他自己的浏览器,并把他放到已经装好一切内容的 BeatStars 结账页上。

重要的部分:付款和交付留在 BeatStars。站上从不碰卡、从不存买家、也从不变商店。它只是把购物车搭好再交出去,这就是整件事能待在一个静态页面里的原因。

让静态站保持静态

购物车活在浏览器里。每行只存两样:哪条 Beat、哪档授权。就这些。名字、价格和 contract id 在页面每次加载时从站自己的配置里读,所以价格一改,别人上周开始的购物车里也不会留一个旧数字。

页头计数、加删按钮和合计都是纯 JavaScript。没有 session、没有登录、中间也没有我的服务器。站上唯一跟别人说话的时机,是买家按下结账、分享链接被拼出来的那一刻。

测试时有两个小细节很关键。每条 Beat 只能有一档授权:购物车拒绝把同一条 Beat 放两次,因为平台就是这么处理的,而试着这么做的买家只会困惑,不会得到服务。还有,当人去了结账页又没付款回来,购物车还在,从离开前存下的那份副本恢复。这是在没有账号系统的前提下,你能做出的最接近弃购挽回的东西。

暗色显示器上的 HTML 代码,正在写购物车逻辑

折扣是没人做对的那部分

我的授权带着店里的活动:买一档 basic 送两条,或者买三档 standard 送两条。BeatStars 在结账时按每个购物车应用一次,落在最便宜的那几行上。如果站上显示合计 65.90 美元,结账页说 32.95,买家不会觉得自己运气好,只会觉得被骗。

所以购物车复刻这套规则,并在任何人离开之前显示同一道算式:哪些是免费的、还差多少能解锁下一个免费名额、合计会是多少。阶梯在填车的时候就看得见,而不是最后突然冒出来。它同时也告诉买家真话,而这是唯一一种经得起结账页检验的折扣。

为什么你大概不会自己动手做

这看着像个小功能,其实不是。站上没有后台、没有 CMS、没有插件:每个页面都提前生成,然后当纯 HTML 上传。一个只活在浏览器里的购物车,必须在没有任何服务器仲裁的情况下,让合计、授权和结账三者保持一致。

平台那一侧更麻烦。BeatStars 没有文档化购物车 API,所以背后那三次调用是从它自己的前端里找出来的,再一条条试。每行都需要曲目 id 和授权的 contract id,因为价格住在 contract 里,不在 Beat 里。一条 Beat 上被店里禁用的授权会让整个结账失败,所以错误必须带着出问题那条 Beat 的名字回来,而不是一个白屏。

接着是没人看见的那块:在买家离开之前复刻折扣阶梯,让这里的合计和结账页的合计是同一个数。BeatStars 每个购物车只应用一次免费行,落在最便宜的那几行上。这块弄错,购物车就不是功能,而是投诉。

这就是为什么多数制作人租一个平台,而不是自己造一个。也是这个站跑在不会垮的主机上的原因:别的一切都是静态文件,唯一在动的是收钱的那个平台。

底下的站

这些放在一个装了十五个插件的 WordPress 上是活不下来的。这家店是静态站:430 个页面提前生成,一份样式表,加一点给播放器和购物车用的 JavaScript。访客落进来的时候,没有任何数据库被问任何问题。

音频走的是同一套思路:用 56 kbps 的 HE-AAC 而不是 320 kbps 的 MP3,索引放在文件开头,播放可以在 Beat 下载完之前就开始,再加一个让它在访客机器上留一年的缓存头。

之后主机要做的事很少,但必须做好:快速送文件、正确处理 byte range 和缓存头、带上 SSL 和 HTTP/2。这个站就跑在这样一台上面。如果你想让自己的店也踩在同样的底座上,那是你唯一真正需要租的东西。

看看我在用的主机

如果你在别的平台上卖

这个具体做法是 BeatStars,因为我的授权和买家都在那儿。逻辑是可以搬的:任何暴露购物车端点的商店,都能用同样的方式被一个静态站驱动。搬不走的是那条捷径。购物车不是一个写着加入购物车的按钮,它是一个对得上的价格、一份对得上的授权,以及一个装着买家所选内容打开的结账页。

如果你还在一次结账卖一条 Beat,先从目录和授权做起,再做购物车。完整 Beat 目录在这里,如果你想听听这家店是围着什么样的 Beat 建的,可以从这条 boom bap 伴奏开始。

33 – Old School Type Beat 封面,Surce Beats33
下载

常见问题

给 Beat 店加购物车需要找开发吗?

静态站的话,是的,需要一些代码。调用是三个打到平台购物车端点的 mutation,其余是浏览器状态,但总得有人写,并且把每一档授权都对着结账合计测一遍。

买家改主意换授权,购物车还行吗?

行。每行带着自己的授权,可以直接在购物车里切换。购物车不允许同一条 Beat 出现两次,所以换授权会替换那一行,而不是再加一行。

付款在哪里发生?

永远在 BeatStars。站上只负责搭好购物车并带着它打开结账页。卡、发票、交付和授权 PDF 都留在平台里面。

为什么不直接在站上卖?

因为那样站上就需要支付处理、税务处理、发票和一个客户数据库。一个静态目录,加一个把活交给平台的购物车,能让快的部分保持快,把钱的部分留给本来就在合法做这件事的人。

分享这篇文章

试听最新伴奏

全部伴奏
封面标题时长标签购买
Wild (With Hook) – EDM Trap Type Beat 封面,Surce BeatsEDM Trap Type Beat - 电子 trap 伴奏02:54Trap电子
下载
Flava – Boom Bap Type Beat 封面,Surce BeatsBoom Bap Type Beat 老派嘻哈伴奏02:40Hip HopOld School 老派
下载
Hot Sauce (With Hook) – Trap Type Beat 封面,Surce BeatsHard Bouncy Trap Type Beat 弹跳陷阱伴奏03:13TrapHip Hop
下载
33 – Old School Type Beat 封面,Surce BeatsBoom Bap Type Beat 90 年代老派说唱伴奏03:24Old School 老派Boombap
下载
Fuk It Up – Club Trap Type Beat 封面,Surce BeatsHard Club Trap Type Beat 凶猛 808 伴奏03:20Trap夜店
下载

选择授权

    所有授权均无标签、免版税。必须注明:Prod. by Surce Beats。

    查看购物车

    免费下载

    仅供非商业用途免费使用。MP3 带有人声水印,不能发行、变现或上传到流媒体平台。用于这些用途需要购买授权。