V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dream4ever
V2EX  ›  程序员

如何实现付费下载功能?

  •  
  •   dream4ever · 2022-10-31 09:06:58 +08:00 · 4795 次点击
    这是一个创建于 783 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在需要在微信公众号网页中实现这样一个功能:

    1. 有一批 PDF 文件,用户在未付费状态下只显示前几页的内容。
    2. 用户在微信中付费之后,才能下载这些 PDF 文件。

    我初步设想的实现思路是这样的:

    1. 提取出这批 PDF 的前几页存为图片,把图片展示在网页中,让用户可以预览 PDF 的部分内容。
    2. 用户付费成功后,显示一个文件下载按钮,用户点击按钮即可下载文件至手机。

    在功能的具体实现方面,我有几个问题:

    a. 对于 iOS 用户(以及一部分安卓用户),很多人下载文件后也不知道去哪儿找这个文件。那么有什么方法可以让用户比较方便地在电脑上下载文件么? b. 获取文件下载链接的功能,是否可以通过纯前端的方式来实现?如果通过后端服务来提供文件下载的话,可能需要花费较多的时间来开发这个功能。一方面这项业务并不需要对下载文件进行十分严密的保护,另一方面工期也比较紧,所以前端来控制下载权限的话是不是会简单很多?

    第一次做这种功能,Google 了一下也没找到可以参考的资料,所以来这里咨询一下,谢谢先~

    PS: 后端是用 Express.js 写的。

    第 1 条附言  ·  2022-11-04 11:31:12 +08:00
    研究了一下,初步定了这么一个实现方案:

    1. 用户在微信中支付成功后,保存微信所返回的订单信息和所购买 PDF 文件的 id ,订单信息中包含用户微信号的 openid ,这个可以用来唯一标识用户。
    2. 用户下载的时候,后端 Express.js 查询订单表中是否有该用户的 openid 和和所下载文件的 id ,有的话就用 res.sendFile() 把文件发送给前端。

    这样就完全不会暴露文件地址给前端,实现起来也简单。
    23 条回复    2022-11-04 11:31:19 +08:00
    jackma0571
        1
    jackma0571  
       2022-10-31 09:16:35 +08:00
    给一个百度云盘的地址,让他们存到自己百度云盘
    1343EFF
        2
    1343EFF  
       2022-10-31 09:18:30 +08:00
    付费成功后在用户中心显示一个购买记录供随时下载
    即便用户找不到下载的文件去哪儿了
    这个时候怪罪的也是微信&IOS 系统层的设计而不是怪罪 APP 开发者
    下载文件的功能必须后端参与判断吧
    比如提供一个有效期的密钥
    严格一点甚至可以加入 IP 判定防止用户随意分享付费资源
    GoCoV2
        3
    GoCoV2  
       2022-10-31 09:20:10 +08:00
    @jackma0571 给阿里云盘地址吧,起码不限速
    dabai0806
        4
    dabai0806  
       2022-10-31 09:31:07 +08:00
    邮箱发送 pdf
    darkengine
        5
    darkengine  
       2022-10-31 09:31:22 +08:00
    free_version.pdf, paid_version.pdf ,不用每次都生成。

    下载权限限制肯定要在后端做,放在前端太容易被绕过了。
    lhx2008
        6
    lhx2008  
       2022-10-31 09:33:11 +08:00
    如果是服务号可以直接发消息
    lakehylia
        7
    lakehylia  
       2022-10-31 09:34:21 +08:00
    发邮箱呗。
    A3m0n
        8
    A3m0n  
       2022-10-31 10:10:08 +08:00
    PDF 可以加密,可以提供下载加密后的版本,付费买个密码就可以了。
    Ausmo
        9
    Ausmo  
       2022-10-31 11:26:38 +08:00
    微信内网页压根不给下载文件吧?
    Ausmo
        10
    Ausmo  
       2022-10-31 11:32:21 +08:00
    @Ausmo 好吧 试了下是可以下载的,以前记得会被微信屏蔽来着
    weak
        11
    weak  
       2022-10-31 11:40:07 +08:00 via iPhone
    开个淘宝店,个人不要钱,阿奇索设置自动发货
    weak
        12
    weak  
       2022-10-31 11:40:55 +08:00 via iPhone
    要在公众号啊 看错了
    Fucter
        13
    Fucter  
       2022-10-31 12:26:55 +08:00 via Android
    @weak 电子出版物虚拟物品开店不是押金十万吗。。。 付费下载可以 wordpress +插件实现 discuz 也行
    brust
        14
    brust  
       2022-10-31 12:34:12 +08:00
    用原文件分出来一个小文件(预览版)只显示几页 后面几页直接写付费后可见
    pianjiao
        15
    pianjiao  
       2022-10-31 13:12:24 +08:00
    公众号 直接有付费购买呀
    pianjiao
        16
    pianjiao  
       2022-10-31 13:13:33 +08:00
    weak
        17
    weak  
       2022-10-31 13:55:50 +08:00 via iPhone
    @Fucter 你猜那些卖账号的付了十万没有
    xboxv
        18
    xboxv  
       2022-10-31 14:53:41 +08:00
    问题不错。 如果不是微信公众号,现在也有很多网站 需要扫描关注微信公众好或者付款之后才可看到网页内容,这个是怎么做到的? wordPress 好像有插件可以配置 对接支付可见
    wangyu17455
        19
    wangyu17455  
       2022-10-31 16:19:52 +08:00
    pdf 放对象存储上,买了的用户每次想下载让后端调对象存储的 sdk 生成临时链接
    yufeng0681
        20
    yufeng0681  
       2022-10-31 22:58:58 +08:00
    微信公众号 不审核你 这些 pdf 是否有版权? 你被举报了一次,还想卖就得被封好久,怎么举证?
    dream4ever
        21
    dream4ever  
    OP
       2022-11-01 08:48:07 +08:00
    @yufeng0681 教育相关的企业,内容是自己生产制作的,版权完全没问题。
    yufeng0681
        22
    yufeng0681  
       2022-11-01 09:50:24 +08:00
    有个面包多网站,最近因为内容违规,主域名被封了
    https://support.qq.com/products/64077/?id=50255 这是它家的内容介绍, 看文章介绍是可以在微信公众号里面引流到它的平台付费的, 自制电子书可以卖

    https://mbd.pub/ 目前这个域名是可用的。

    他家这样的竞品也有
    dream4ever
        23
    dream4ever  
    OP
       2022-11-04 11:31:19 +08:00
    研究了一下,初步定了这么一个实现方案:

    1. 用户在微信中支付成功后,保存微信所返回的订单信息和所购买 PDF 文件的 id ,订单信息中包含用户微信号的 openid ,这个可以用来唯一标识用户。
    2. 用户下载的时候,后端 Express.js 查询订单表中是否有该用户的 openid 和和所下载文件的 id ,有的话就用 res.sendFile() 把文件发送给前端。

    这样就完全不会暴露文件地址给前端,实现起来也简单。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2502 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 15:39 · PVG 23:39 · LAX 07:39 · JFK 10:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.