大官人的博客 https://www.daguanren.cc 大官人的博客主要涉及:公众号和小程序的前沿知识,包括概念、产品设计、技术、实现、代码等全方面的解析;产品经理相关的互联网产品深度分析、原型设计技巧、工作职责、商业模式分析;运维相关API接口安全、Web攻击防护分析、MySQL、Linux系统使用介绍;常见的经济学概念分析、房价走势、高维牛股票技巧分析;办公软件Word、PowerPoint介绍。 zh-cn Tue, 19 Mar 2024 10:27:47 GMT 通用接口对接的加解密方式 https://www.daguanren.cc/post/tong-yong-jie-kou-dui-jie-de-jia-jie-mi-fang-shi.html

安全API接口文档

本文档提供了关于如何安全地调用API的指南,包括数据的加密传输和请求的签名验证。

安全机制概览

为确保数据传输的安全性和验证请求的合法性,我们实施了以下安全机制:

  1. 数据加密:使用AES-256-CBC算法对请求体数据进行加密,确保传输数据的保密性。
  2. 请求签名:通过SHA-256哈希算法对请求参数进行签名,验证请求的完整性和认证性。

数据加密

加密算法

  • 算法:AES-256-CBC
  • 密钥长度:256位
  • 初始向量(IV):随机生成,每次请求都应不同

加密步骤

  1. 准备数据:将请求体数据转换为JSON字符串格式。
  2. 生成IV:随机生成16字节的初始向量(IV)。
  3. 加密数据:使用AES-256-CBC算法,预共享的密钥,和随机生成的IV对数据进行加密。
  4. 拼接IV和密文:将IV和加密后的数据拼接,然后进行Base64编码,得到最终的请求体数据。

请求格式

加密后的请求体应该包含Base64编码的拼接IV和密文,如下所示:

{
  "encryptedData": "Base64编码的IV+加密数据"
}

请求签名

签名生成

  1. 收集参数:包括所有请求参数和加密的请求体。
  2. 排序和格式化:将所有参数按照键名字典序排序,然后格式化为key=value形式,并用&连接。
  3. 生成签名:使用SHA-256算法对上一步得到的字符串进行哈希运算,将哈希值作为签名。

签名传输

将生成的签名放在HTTP请求头中发送,例如:

X-Signature: <签名值>

服务器端验证

  1. 验证签名:服务器使用相同的规则重新生成签名,并与请求头中的签名进行比较。
  2. 解密数据:验证签名通过后,使用相同的AES密钥和IV解密请求体中的加密数据。

安全建议

  • 密钥应安全共享和存储,避免通过不安全的渠道传递。
  • 使用HTTPS协议传输所有请求,保护数据在传输过程中的安全。
  • 定期更新密钥,增强系统的安全性。

请根据实际的业务需求和安全要求调整以上内容。务必确保所有的安全措施都经过充分测试,并且符合相关的安全标准和最佳实践。

为了增强简化版加密方案的安全性,可以在请求中加入时间戳。时间戳有助于防止重放攻击(replay attacks),即攻击者捕获并重新发送之前的请求。在请求中包含时间戳后,服务器可以检查时间戳以确保请求是在合理的时间窗口内发送的。下面是包含时间戳的简化版加密方案的接口文档:


带时间戳的简化版安全API接口文档

本文档描述了如何使用简化的AES加密方案和时间戳安全地调用API,以确保数据传输的安全性并防止重放攻击。

数据加密

加密算法

  • 算法:AES-256
  • 模式:ECB(电子密码本模式)
  • 填充方式:PKCS#7

加密流程

  1. 数据准备:将需要传输的数据(如JSON格式的请求体)和当前的时间戳(如UNIX时间戳)一同组织成字符串格式。
  2. 执行加密:使用预共享的AES-256密钥对包含数据和时间戳的字符串进行加密。在ECB模式下,不使用IV。
  3. 编码:将加密后的数据进行Base64编码,以便在HTTP请求中安全传输。

请求格式

请求体应包含经过Base64编码的加密数据,示例如下:

{
  "encryptedData": "Base64编码的加密数据"
}

服务器端解密与验证

  1. 解密数据:服务器收到请求后,将Base64编码的加密数据解码,并使用相同的AES密钥进行解密,以获取包含原始数据和时间戳的字符串。
  2. 验证时间戳:解密得到的字符串中包含时间戳信息,服务器需要验证时间戳以确保请求是在预定的时间窗口内(如5分钟内)发送的。如果请求超出时间窗口,则可能是重放攻击,应拒绝该请求。

安全注意事项

  • 密钥安全:确保加密密钥的安全性和保密性,避免通过不安全的渠道共享密钥。
  • 时间同步:客户端和服务器需要时间同步,以确保时间戳验证的准确性。
  • 通信安全:建议通过HTTPS等安全协议传输所有请求,防止数据在传输过程中被截获和篡改。
  • 密钥管理:定期更新加密密钥,以增强安全性。

此接口文档提供了一个使用时间戳和简化AES加密的安全通信方案。尽管这种方案相对简单,但加入时间戳增加了一定的安全性,有助于防止重放攻击。在实施此方案时,请确保充分考虑所有安全因素,确保它满足您的安全需求。

]]>
Sun, 18 Feb 2024 06:39:34 GMT https://www.daguanren.cc/post/tong-yong-jie-kou-dui-jie-de-jia-jie-mi-fang-shi.html
京东快递接口对接 https://www.daguanren.cc/post/jing-dong-kuai-di-jie-kou-dui-jie.html

得益于京东自营商城,京东建立了庞大的物流体系,京东快递也对外开通了服务。我们的程序中需要用到京东快递进行发货,场景是我们做基因检测业务,根据顾客下单的地址,给顾客寄送采样盒,客户就像做核酸一样,采样后将样本放置到采样试管里给我们寄回。我们收到采样试管送入实验室进行实验。顾客将采样试管寄回的地址是固定的,运费也是我们自定义的。所以需要跟快递公司进行接口对接。本文将记录和讲述对于京东快递的对接方式和步骤。

第一步:确认应用类别

我们的程序里需要和京东快递对接,调用京东快递的接口实现产品的发货。文档参考: 京东物流-开放平台

顾客属于C端,我们属于商家B端,所以这种顾客寄回采样盒给到我们公司的对应京东快递文档中的C2B模式:

支持逆向物流,C端客户寄件给商家,例如:图书回收、洗护业务、电商平台客户退货发起的逆向业务等业务场景,以下的文档和API描述简称快递C2B

应用类别属于:商家自研应用

image.png

对应的时序图如下:

41768117d8e4d61d.png

第二步:获取access_token

调用以上接口同样和微信的接口类似,都需要用到access_token,不同于微信的 access_token一般只有2个小时的有效期,京东快递的access_token一旦获取了,会有1年的有效期。但要注意的是,京东快递的access_token分为预发环境和生产环境的。获取的方式可以参考如下文档:授权介绍,基本还是比较简单的,只需要用到AppKey就可以获取。

或者在京东提供的一个专门调试api的网页:常用开发工具 中点击获取“获取AccessToken ”来按提示获取也可以,如下图所示:

WechatIMG4773.jpg

第三步:组织url及参数

获取到access_token后,组织url及参数,生成类似这种格式的请求头:

https://api.jdl.com/ecap/v1/orders/precheck?app_key=yourAppKey&access_token=yourAccessToken&timestamp=2022-04-01 23:04:14&v=2.0&LOP-DN=ECAP&sign=yourSign

这里面的计算签名和微信各类文档中的其实是大同小异的。

参考非SDK调用API(开发者→京东物流)

文档中有Java和Python示例代码,如果不能满足你的需求,可以复制出来到chatgpt让其帮你改写成想要的语言,比如Nodejs:

/**
     * 根据京东快递的规则,将输入的url增加token和加密串,返回生成好的URL
     * @param {type}  
     * @param {type} 
     * @return 
     */
    async generateURL(path, algorithm, body) {
        const base_uri = 'YOUR_BASE_URI';
        const app_key = 'YOUR_APPKEY';
        const app_secret = 'YOUR_APPSECRET';
        const access_token = 'YOUR_ACCESS_TOKEN';
        const domain = 'ECAP';
        const method = 'POST';
        const timestamp = moment(new Date().getTime()).format('YYYY-MM-DD HH:mm:ss');

        if (typeof(body) == 'object') {
            body = JSON.stringify(body);
        }

        const content = [
            app_secret,
            'access_token' + access_token,
            'app_key' + app_key,
            'method' + path,
            'param_json' + body,
            'timestamp' + timestamp,
            'v2.0',
            app_secret
        ].join('');

        const sign_ = await this.sign(algorithm, content, app_secret);

        const queries = {
            'LOP-DN': domain,
            'app_key': app_key,
            'access_token': access_token,
            'timestamp': timestamp,
            'v': '2.0',
            'sign': sign_,
            'algorithm': algorithm
        };

        const offset = String(-new Date().getTimezoneOffset() / 60);

        const options = {
            method: method,
            headers: {
                'lop-tz': offset,
                'User-Agent': 'lop-http/nodejs'
            }
        };

        const url = `${base_uri}${path}?${querystring.stringify(queries)}`;

        return url;

        const req = https.request(url, options, (res) => {
            console.log('statusCode:', res.statusCode);
            console.log('headers:', res.headers);

            res.on('data', (d) => {
                process.stdout.write(d);
            });
        });

        req.on('error', (e) => {
            console.error(e);
        });

        req.write(body);
        req.end();


    }

第四步:调用所需的接口

预下单接口正式下单接口

注意事项

  • 调用接口文档的时候需要注意的是请求参数之间彼此是关联的,需要仔细阅读文档,防止调用不成功,具体还是可以使用常用开发工具来进行调试。

WechatIMG4774.jpg

WechatIMG4772.png

如果顾客刚一下单你就进行订阅,那么就会返回:

{
    "code":1206002,
    "mills":10,
    "msg":"获取订单详情失败",
    "requestId":"ec7df5c0-92c4-4a13-b59b-5c4b599c8cfd",
    "subMsg":"order not exists:根据自定义单号未查到订单",
    "success":false
}

这个时候就很尴尬,一定要注意。在测试时,一定要下单后,等待至少1分钟再进行订阅,订阅成功后,当客户取消订单,或者快递小哥取消订单时才能收到京东快递服务器推送给我们的同步消息。

  • 预发环境下的订单有可能也是正式的订单(记不太清了),不管是是预发环境还是正式环境测试时最好备注是测试订单,和快递小哥提前沟通好,否则可能给快递小哥造成不必要的麻烦
]]>
Sun, 27 Aug 2023 06:51:52 GMT https://www.daguanren.cc/post/jing-dong-kuai-di-jie-kou-dui-jie.html
有关视频流媒体的深入探讨 https://www.daguanren.cc/post/you-guan-shi-pin-liu-mei-ti-de-shen-ru-tan-tao.html

mp4转m3u8流媒体

我现在有很多拍的mp4格式的文件,如何像腾讯视频和B站一样转成m3u8这种类型的流媒体来播放?是需要我自己开发播放器吗?

将MP4视频转换为M3U8流媒体格式并进行播放的过程确实涉及一些技术步骤。你不需要从头开始开发播放器,但是需要使用一些工具和服务。以下是更具体的步骤:

  1. 转换视频文件到M3U8格式

你可以使用FFmpeg这样的工具来将MP4转换为M3U8。一个基本的命令可能如下所示:

ffmpeg -i input.mp4 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8

这将创建一个M3U8文件和相关的TS分段。

  1. 托管M3U8文件和TS分段

你需要将这些文件放在Web服务器上,以便观众能够访问。你可以使用常见的Web服务器软件如Apache或Nginx。

  1. 在Web页面中嵌入播放器

有许多现成的HTML5视频播放器支持M3U8流,例如Video.js、HLS.js等。你可以将其中一个嵌入到Web页面中,并指向你的M3U8文件。

以下是使用Video.js的一个例子:

<video id="my_video" class="video-js" controls preload="auto" width="640" height="264">
  <source src="index.m3u8" type="application/x-mpegURL">
</video>

<script src="https://vjs.zencdn.net/7.8.4/video.js"></script>
<script>
  var player = videojs('my_video');
  player.play();
</script>
  1. 测试

确保在不同的浏览器和设备上测试你的流,以确保一切正常工作。

注意

  • HLS流在某些旧版本的浏览器或操作系统上可能不受支持。你可能需要使用一些polyfills或fallbacks来确保广泛的兼容性。
  • 如果你要为大量观众提供流,你可能还需要考虑CDN和缓存策略,以确保可扩展性和性能。
  • 请确保遵循所有相关的法律和许可协议,特别是与版权和隐私有关的内容。

这些步骤应该提供一个从MP4开始到通过Web播放HLS流的完整路径。当然,具体实现可能会有所不同,取决于你的需求和环境。

转流媒体的好处

为什么要将视频转成流媒体,这样做有什么好处呢?是怕别人直接下载你的视频吗?还是说这种比较节省资源呢?

将视频转换为流媒体格式有许多优势,不仅限于防止直接下载或节省资源。以下是一些主要优点:

  1. 适应性比特率流 (Adaptive Bitrate Streaming, ABR): 通过流媒体,服务器可以提供不同质量的视频流,并根据用户的网络速度动态调整。这确保了在低带宽环境下的流畅播放,同时也可以在高带宽环境下提供高质量的体验。

  2. 提前开始播放: 用户不必等待整个文件下载完毕就可以开始观看视频。这提供了更快的启动时间和更好的用户体验。

  3. 节省带宽: 通过流媒体,只传输用户实际观看的部分,而不是整个文件。如果用户在观看一部分视频后停止观看,那么服务器不必发送整个文件,从而节省带宽。

  4. 增强的安全性: 虽然流媒体并不是防止视频被下载的完全保障(有专门工具可以捕获流媒体内容),但它确实增加了难度。它可以与DRM(数字权利管理)等技术结合使用,以进一步保护内容。

  5. 更好的兼容性和可扩展性: 流媒体技术通常支持多种设备和网络条件。通过使用标准的流媒体协议(如HLS或DASH),内容提供商可以更容易地向各种客户端提供内容。

  6. 实时或近实时传输: 对于直播流,流媒体提供了实时或近实时的视频传输能力。这对于直播事件、体育赛事等场景至关重要。

  7. 个性化和分析: 流媒体允许更精细的用户行为分析,如观看时长、暂停位置等。这可以为内容提供商提供更多关于观众参与度的洞见,并允许更个性化的体验。

  8. 配合CDN使用: 流媒体可以更好地与内容分发网络(CDN)配合,实现全球范围内的快速、可靠的内容传输。

总的来说,流媒体提供了更优的观看体验、更高的效率和更灵活的内容交付。这些因素使它成为现代在线视频的首选方法。

流媒体转换代码和工具

ffmpeg -i input.mp4 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8 这个代码是啥意思?是将input.mp4转换成了什么?转换成了哪些文件呢?

这段代码使用了ffmpeg命令行工具,将一个输入的MP4文件(input.mp4)转换成了HLS(HTTP Live Streaming)格式的流媒体文件。下面详细解释每个参数的作用:

  • -i input.mp4: 指定输入文件的路径,这里是input.mp4
  • -profile:v baseline: 设置视频编码的配置文件为基线配置(baseline profile),这通常用于确保最大的兼容性,特别是对于旧设备和网络条件较差的环境。
  • -level 3.0: 指定编码级别,与选定的配置文件协同工作,用于进一步确定编码的约束和功能。
  • -s 640x360: 设置输出视频的分辨率为640x360像素。
  • -start_number 0: 设置HLS播放列表(m3u8文件)中的片段序号从0开始。
  • -hls_time 10: 设置每个HLS片段的持续时间为10秒。这意味着每个TS文件(传输流文件)将包含10秒的视频。
  • -hls_list_size 0: 设置HLS播放列表文件(m3u8文件)的大小。设置为0表示播放列表将包括所有片段,并且不会被限制大小。
  • -f hls: 指定输出格式为HLS。
  • index.m3u8: 指定输出m3u8文件的名称和路径。这个文件包含了指向各个片段(.ts文件)的引用。

转换完成后,将会产生一个index.m3u8文件和多个与之关联的.ts文件。每个.ts文件包含了视频的一部分(在这个例子中是10秒),而index.m3u8文件包含了这些.ts文件的索引,以便于播放器按顺序播放它们。

此命令执行的结果是将输入的MP4文件转换为适合流式传输的格式,使得用户可以在下载的同时观看视频,或者根据网络速度自动调整视频质量等。

流媒体转换示例

比如一个大小为1个G的视频,转换成流媒体后,视频大小会压缩吗?我看B站等视频网站很多720p和1080p的视频用软件下载下来都会比较小。他们是如何压缩的呢?

转换视频到流媒体格式不一定会导致文件大小的压缩。大小的压缩取决于编码参数和设置,包括但不限于视频分辨率、编码质量、比特率等。

  1. 分辨率: 通过降低分辨率(例如从1080p降低到720p)可以减小文件大小,但可能会牺牲一些图像质量。

  2. 编码质量: 一些编码器允许你选择质量设置,通常以CRF(恒定速率因子)值表示。较高的CRF值通常会导致较低的文件大小,但可能会损失一些质量。

  3. 比特率: 比特率是指视频中每秒的数据量。降低比特率可以显著减小文件大小,但如果降低得过多,可能会导致视频质量下降。

例如,B站 使用了一套复杂的编码和适配流程来适应不同用户的设备和网络条件。他们可能使用了更先进的编码器和特定的编码设置,以在保持可接受的视频质量的同时减小文件大小。使用高效的编码器,如H.264或H.265,可以在保留相同的视觉质量的情况下大大减小文件大小。

如果你想模仿这样的效果,你可以尝试调整上述的编码参数,比如使用FFmpeg的-crf-b:v选项来控制质量和比特率。在大多数情况下,合理的压缩并不会对观看体验造成太大的影响。

请注意,过度压缩可能会导致视频质量下降,所以找到适当的平衡点是关键。你可能需要进行一些试验,以找到适合你的特定视频和应用场景的最佳设置。

视频网站如何压缩的?

所以视频网站也基本上是使用FFmpeg来压缩的吗?包括一些其他的压缩软件,都是使用的FFmpeg?

B站和许多其他的大型视频平台可能使用的是专门定制的编码和压缩解决方案。虽然FFmpeg是一款非常强大和流行的开源工具,适用于许多编码和转码任务,但对于大型企业级操作,可能会选择更特定、可定制的解决方案。

有些压缩软件可能确实在底层使用FFmpeg。FFmpeg的库能够被其他软件和系统集成,因此许多开发人员和公司可能会选择使用它来处理视频和音频编码任务。

B站和其他大型平台可能还使用了一些先进的技术和算法,用于更精细的控制和优化,以适应他们的特定需求和规模。这些可能包括自适应比特率流、专门的硬件加速、云端分布式编码等。

简而言之,虽然FFmpeg是一款流行的工具,但不是所有的公司和平台都一定使用它。大型企业可能有资源和需求来开发或购买更专门化的解决方案。

初创企业视频解决方案的建议

对于我们一家初创企业,你的建议是什么?我们是一家做培训教育的公司,会生产一些培训视频教程。这些视频我们如何提供给付费用户来观看?

对于一家做培训教育的初创企业,你们的视频内容战略会是核心的一部分。以下是一些具体建议,帮助你们提供付费用户观看的视频:

  1. 内容保护和授权管理

    • 使用数字权利管理(DRM)或其他加密技术确保内容的安全性。
    • 使用用户授权和身份验证来控制谁可以访问特定内容。
  2. 视频格式和编码

    • 你可以考虑使用开源工具,例如FFmpeg,来转码视频到适合在线观看的格式,例如HLS(HTTP Live Streaming)。
    • 适应不同设备和网络条件的自适应比特率流也是个不错的选择。
  3. 内容分发网络(CDN)

    • 为了确保良好的用户体验,可以考虑使用CDN来分发内容。这可以提高加载速度并减轻服务器的负担。
  4. 付费和订阅模型

    • 你可以使用第三方支付网关来处理付费和订阅。有些解决方案专为订阅服务而设计。
  5. 集成现有的视频平台

    • 如果你不想自行处理所有这些技术细节,可以考虑使用现有的视频托管平台,如Vimeo Pro或Wistia等。它们提供了许多上述功能,并可以轻松嵌入你的网站。
  6. 用户体验和界面设计

    • 最后但同样重要的是,确保你的用户界面易于使用,美观,以及与你的品牌和使命相一致。
  7. 遵守法律规定

    • 根据你的运营地点和市场,确保你遵守有关隐私、版权和其他相关法律的规定。

通过将这些要素结合在一起,你可以创建一个安全、高效、用户友好的视频教程平台,满足你的付费用户的需求。如果可能的话,与一位有经验的技术顾问或团队合作可能是明智的选择,以确保你的解决方案既符合你的业务需求,也符合最佳实践和行业标准。

微信小程序解决方案

微信小程序有相关的解决方案吗?

当然,微信小程序提供了一系列的API和组件,可以支持在小程序中嵌入和播放视频内容。对于做培训教育的公司,可以开发微信小程序来提供付费视频课程。以下是一些关键方面的解决方案:

  1. 视频播放组件: 微信小程序提供了<video>组件,可以用于在小程序中播放视频文件。你可以设置各种属性,例如自动播放、循环播放、全屏等。

  2. 用户认证和授权: 可以通过微信的登录和授权机制,实现对付费用户的身份验证。

  3. 支付集成: 微信支付是小程序中常用的支付方式,可以用于处理付费课程的购买。

  4. 视频文件的存储和分发: 可以使用云存储服务来存储视频文件,并使用内容分发网络(CDN)来确保高效的视频加载。

  5. 视频安全: 通过设置适当的CORS策略和使用签名URL,可以增加视频文件的安全性,确保只有授权的用户可以访问。

  6. 自适应流媒体: 可以考虑将视频转码为适合在线观看的格式,例如HLS,以适应不同的网络环境和设备。

  7. 用户体验和界面设计: 微信小程序提供了丰富的UI组件和样式,可以设计吸引人的用户界面。

  8. 法律和合规性: 同样要确保遵守所有适用的法律和规定,特别是有关隐私和消费者权益的法律。

通过综合以上方面,微信小程序确实为提供付费视频教程提供了一个可行的平台。不过,实现这些功能可能需要一些开发经验和专业知识,因此可能需要与有经验的开发人员或团队合作。此外,不同的业务需求可能还需要进一步的定制和集成。在开始项目之前进行充分的需求分析和规划将是明智的选择。

微信小程序具体实现

微信小程序如何实现流媒体呢?

在微信小程序中实现流媒体播放主要涉及以下几个方面:

  1. 选择合适的流媒体格式:流媒体通常采用一些可以渐进下载和播放的格式,例如HLS(HTTP Live Streaming)。这允许视频在下载的同时开始播放,并可以根据用户的网络条件自适应地调整质量。

  2. 准备视频文件:你可以使用像FFmpeg这样的工具将视频文件转换为适合流媒体的格式。例如,使用HLS,你可以将视频文件分割成一系列较小的文件,然后通过M3U8文件索引它们。

  3. 存储和分发视频文件:流媒体文件应存储在一个可以快速分发到用户的位置。通常,这意味着使用内容分发网络(CDN)或云存储服务。

  4. 嵌入视频播放器:微信小程序提供了<video>组件,允许在小程序中嵌入和控制视频播放。只需将HLS的M3U8文件的URL设置为视频源即可。

  5. 用户认证和访问控制:如果视频是付费内容,你可能还需要实现一些身份验证和授权机制,以确保只有付费和授权的用户可以访问视频。

  6. 优化用户体验:可以通过设置合适的缓冲策略、提供多个质量选项、添加控制和界面反馈等来优化用户体验。

  7. 分析和监控:可能还希望收集一些分析数据,例如用户观看时间、播放质量等,以便了解用户的观看习惯并优化服务。

以下是一个微信小程序中使用<video>组件播放HLS流媒体的示例代码:

<video 
  src="https://example.com/path/to/index.m3u8" 
  controls 
  autoplay 
  loop 
  poster="https://example.com/path/to/placeholder.jpg"
></video>

请注意,流媒体播放可能涉及许多技术和业务考虑因素,因此根据具体需求和环境可能需要进一步的定制和集成。如果你不熟悉流媒体技术,可能需要考虑聘请专业开发人员或使用第三方流媒体服务。

微信小程序的DRM加密

小程序文档里的DRM 加密播放是什么?

以下是小程序的官方文档,DRM 加密播放是干嘛的?有什么用呢?请详细解释下

DRM 加密播放
小程序开发者获取到 DRM 加密的 视频地址、身份认证 url、license url
使用 video 标签将以上几个参数填入
小程序确认该 video 为 DRM 视频源,进行 DRM 设备身份认证并且获取播放许可证
设备身份认证通过并获取播放许可证之后,由 DRM 底层进行解密播放

Q&A
Q:为什么设备身份认证 url 要区分 Android 和 iOS ?

A:由于 Android 和 iOS 是基于不同的 DRM 协议,Android:widevine;iOS:fairplay,所以身份认证这块有所不同,需要分别提供身份认证 url。

Q:license url 的格式是什么样的?

A:目前 license url 需要支持标准 license 回包,即裸 license

DRM(数字版权管理)是一种用于保护数字内容版权的技术。在视频播放领域,DRM用于确保只有已授权的用户能够播放受保护的视频内容,并防止未经授权的复制和分发。以下是DRM加密播放在微信小程序中的具体作用和用途的详细解释:

  1. 保护视频内容:通过加密视频文件,DRM确保了只有具有合适许可证的设备才能解密和播放视频。这可以有效防止未经授权的人员访问、下载、复制和分发受保护的内容。

  2. 设备身份认证:DRM系统需要验证设备的身份,以确保它有权访问受保护的内容。这通常涉及与远程服务器的交互,其中服务器根据设备提供的凭证和/或用户的登录信息确定设备是否有权访问内容。

  3. 获取播放许可证:设备身份认证通过后,设备可以从许可证服务器获取播放许可证。这个许可证包括解密视频所需的密钥以及可能的其他限制,例如播放期限、允许的播放次数等。

  4. 兼容性问题:不同的设备和操作系统可能使用不同的DRM方案。例如,在小程序文档中提到的Android使用Widevine,而iOS使用FairPlay。因此,可能需要为不同的设备和操作系统提供不同的认证URL和许可证URL。

  5. license url的格式:license url用于从许可证服务器获取播放许可证。它需要支持标准的license回包,即“裸license”,意味着license应按照特定格式直接返回,而不应嵌入其他数据或结构。

总的来说,DRM加密播放为微信小程序提供了一种方法来播放受版权保护的视频内容,同时确保只有已授权的用户和设备能够访问和播放该内容。这对于付费视频、独家内容或任何其他需要严格版权控制的场景非常重要。

DRM许可证服务器是啥?

许可证服务器是啥?谁负责管理的?比如我们的视频如何申请?

许可证服务器是一个专门的服务器,负责存储和分发数字版权管理(DRM)许可证。这些许可证包括解密受保护内容所需的密钥和关于如何使用该内容的规则(例如观看期限、允许的设备数量等)。许可证服务器与DRM客户端(例如用户的设备或应用程序)交互,以验证用户的身份并提供适当的许可证。

关于谁负责管理和如何申请,以下是一些可能的场景:

  1. 自己托管许可证服务器:一些组织选择自己托管和管理许可证服务器。这可能涉及购买和配置专门的DRM解决方案,并与内容分发网络(CDN)和/或媒体服务器集成。这种方法提供了最大的灵活性,但也可能相对复杂和昂贵。

  2. 使用第三方DRM提供商:许多初创企业和小型组织选择与第三方DRM提供商合作。这些提供商提供完整的DRM服务,包括许可证服务器托管、内容加密、用户身份验证等。这种方法通常更快、更便宜,并减少了技术复杂性。

  3. 申请过程:具体的申请过程可能因DRM提供商和解决方案而异。通常,您需要与提供商联系,解释您的需求和用例,并选择合适的服务计划。他们将协助您设置和集成DRM,包括提供必要的密钥、认证URL和许可证URL。

  4. 内容加密:在设置许可证服务器之后,您还需要对您的视频内容进行加密,并确保播放器能够与许可证服务器交互以获取解密密钥。这可能涉及使用特定的工具或库,并可能需要一些技术专长。

对于培训教育的初创企业来说,与第三方DRM提供商合作可能是一个合理的选择,特别是如果您不具备大量的技术资源或对DRM不熟悉。许多提供商专门服务于小型和中型企业,并提供易于使用的工具和支持来帮助您保护您的内容。

小程序权限控制和许可证服务器的区别

还是不太懂,不是在小程序上播放吗?我们可以在小程序上判断这个用户有没有登录和看视频的权限呀。为啥还要搞个许可证服务器呢?

我理解您的困惑,特别是当您已经在小程序上进行了用户身份验证和权限检查时。让我们深入了解许可证服务器和DRM加密播放在内容保护方面的作用,以及为什么它们可能对您有用。

  1. 基本权限检查:在小程序中进行的用户身份验证和权限检查确实可以控制谁可以访问和观看视频。然而,一旦用户访问了视频文件,他们可能会尝试下载、复制或以其他方式非法共享该内容。基本的身份验证并不阻止这样的行为。

  2. DRM(数字版权管理):DRM旨在保护内容不仅在传输过程中,还在播放过程中。通过使用许可证服务器和特定的加密技术,DRM确保只有经过授权的设备和应用程序可以播放内容。即使用户设法下载加密的文件,他们也无法在未经授权的播放器上观看它。

  3. 许可证服务器的作用:许可证服务器扮演了核心角色,因为它管理着解密内容所需的密钥。当用户尝试观看受保护的视频时,播放器将与许可证服务器通信,验证用户的身份和权限,并获取解密密钥。如果用户没有适当的权限,许可证服务器将拒绝提供密钥,从而防止播放。

  4. 为什么使用DRM:如果您的内容非常重要,且您不希望它被非法复制和共享,那么DRM可能是一个合适的解决方案。尤其是对于付费内容,防止未经授权的访问和分发可以保护您的收入和知识产权。

  5. 权衡考虑:DRM确实增加了复杂性,并可能涉及额外的成本。不是每个场景都需要它。如果您的内容不是高价值或敏感,或者您更关心用户体验而不是安全性,那么简单的身份验证和权限检查可能就足够了。

总而言之,许可证服务器和DRM提供了更高层次的内容保护,超出了基本的身份验证和权限检查所能提供的范围。是否需要它取决于您的具体需求和关注点。

有授权才能播放流媒体

哦,是不是这样理解,比如我的视频发布在小程序上,别人通过某些手段,比如我的视频是m3u8的,别人通过下载m3u8的所有ts文件后拼接成了完整的视频,然后别人拿着这个视频要播放的话,是不是如果没有授权就播放不了?我好像理解的不太对。

您的理解接近正确,但是还有一些细微的差异,让我更详细地解释一下。

  1. 加密过程:当您使用DRM(数字版权管理)保护视频时,视频文件会被加密。对于使用m3u8格式的流媒体,这意味着各个ts文件片段会被加密。

  2. 播放过程:要播放受保护的视频,播放器必须与许可证服务器通信以获取解密密钥。只有在满足许可条件的情况下,服务器才会提供密钥。

  3. 非法下载的问题:如果某人设法下载了所有加密的ts文件并尝试将它们拼接在一起,他们还是无法观看视频,因为文件是加密的。除非他们有正确的解密密钥(这只能通过许可证服务器获得),否则他们无法解密视频。

  4. 拷贝与共享的问题:由于DRM加密,即使有人可以下载整个视频文件,他们也无法在没有正确许可证的其他设备或播放器上播放它。这样就防止了未经授权的复制和共享。

所以,总结一下,您的理解基本正确。通过使用DRM和许可证服务器,您可以确保即使有人下载了视频的所有片段,他们也无法观看或共享整个视频,除非他们通过了合适的身份验证和授权过程。这增强了您的内容保护,并可以确保只有付费或合格的用户能够访问视频。

DRM和TLS的区别

DRM这个感觉和tls有点像呢

确实,DRM(数字版权管理)与TLS(传输层安全协议)在某些方面有相似之处,尤其是它们都涉及加密和身份验证。以下是它们之间的一些相似和不同之处:

相似之处:

  1. 加密:两者都使用加密来保护数据。DRM加密内容,以防止未授权访问,而TLS加密在网络上传输的数据,以保护隐私和完整性。

  2. 身份验证:两者都涉及身份验证过程。在DRM中,许可证服务器验证请求许可证的设备或用户的身份。在TLS中,服务器证书帮助客户端验证服务器的身份。

  3. 密钥管理:两者都涉及密钥的生成、交换和使用,以实现加密和解密过程。

不同之处:

  1. 目的和应用领域:DRM主要用于保护数字内容,如音乐、电影和电子书,防止未经授权的复制和分发。TLS主要用于保护网络通信,确保在互联网上发送的数据的机密性和完整性。

  2. 实施细节:虽然都涉及加密,但DRM和TLS在如何实现和管理加密方面有所不同。DRM可能涉及更复杂的许可模型,而TLS更关注端到端的连接安全。

  3. 技术和协议:DRM和TLS使用不同的技术和协议来实现它们的目标。例如,TLS使用的是一套标准化的安全协议,而DRM可能涉及各种专有或标准化的技术,具体取决于所用的DRM系统。

总的来说,尽管DRM和TLS在某些方面有所相似,但它们解决的问题和应用的场景有所不同。不过,它们确实都是信息安全领域的重要组成部分。

那怎么防止录屏呢?

明白了,这也是一种保护手段。如果客户通过录屏,其实还是可以将视频保存下来。

是的,你完全正确。DRM(数字版权管理)是一种保护数字内容的手段,旨在防止未经授权的访问和分发。然而,就像许多技术保护措施一样,它并不是完全无懈可击的。

录屏技术可以绕过DRM保护,通过捕获正在播放的视频的屏幕图像,从而创建内容的未经授权的副本。虽然这种方法可能导致一些质量损失(例如分辨率降低、可能出现的水印等),但它确实是一种可以突破DRM保护的方式。

因此,虽然DRM可以大大提高内容保护的门槛,使得大规模的非法分发更加困难,但它并不能阻止所有形式的侵权。对于希望保护其内容的公司来说,DRM可以作为一个有效的屏障,但还需要结合其他方法,如法律手段、水印技术、监控分析等,以形成更全面的保护机制。

未完待续

]]>
Sun, 20 Aug 2023 06:26:11 GMT https://www.daguanren.cc/post/you-guan-shi-pin-liu-mei-ti-de-shen-ru-tan-tao.html
如何获取关注公众号的链接 https://www.daguanren.cc/post/ru-he-huo-qu-guan-zhu-gong-zhong-hao-de-lian-jie.html

H5页面上关注公众号比较麻烦,最常见的只能通过在H5上放置一个公众号的二维码,然后长按识别关注公众号。

有没有什么方法能够在H5上可以直接关注公众号,又不用扫码呢?

答案是有的。先看下实现效果:

*.png

在微信打开链接,直接跳转到历史消息页面,在历史消息页面就可以点击关注进行公众号的关注,关注后,按钮会变成发消息,点击发消息即可进入公众号页面。

那么这个链接如何获取呢?

首先打开你想要获取关注的公众号,看下有没有发过文章,如果有的话随便打开一篇该公众号发过的文章。

例如,“光翰科技”公众号里有这样一篇文章:https://mp.weixin.qq.com/s/TFTJ7xTT62M2xRiTwR8EXQ

将这篇文章用浏览器打开,然后点击查看源代码:

*.png

搜索__biz,找到这一行:

_g.msg_link = "http://mp.weixin.qq.com/s?__biz=MzUzNjQxMjQ1Mw==&amp;mid=2247484434&amp;idx=1&amp;sn=4c20933947e10110e6c4e651a1048ecb&amp;chksm=faf7ec58cd80654e2e2246192f3272b27ca42e2042b224e23b8ebfa1e6933c8e1cba92bd4621#rd";

将=号和;号之间的文本全部复制,替换掉下面的中文部分。

https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=这里替换&scene=110#wechat_redirect

形成最终的url:

https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzUzNjQxMjQ1Mw==&mid=2247484434&idx=1&sn=4c20933947e10110e6c4e651a1048ecb&chksm=faf7ec58cd80654e2e2246192f3272b27ca42e2042b224e23b8ebfa1e6933c8e1cba92bd4621#rd&scene=110#wechat_redirect

然后将此url放置到H5上即可。

另外,小程序上也可以直接关注公众号。具体可以看见这篇文章:

微信小程序中显示关注公众号按钮

参考:

公众号在哪里获得链接,让别人点击链接跳转到关注页面?

]]>
Thu, 17 Aug 2023 11:41:05 GMT https://www.daguanren.cc/post/ru-he-huo-qu-guan-zhu-gong-zhong-hao-de-lian-jie.html
Midjourney创建的图片可以商用吗? https://www.daguanren.cc/post/Midjourney-ni-yong-dui-le-ma.html

Midjourney的官网是可以直接打开的,包括官网的文档和官网的Showcase:

*.png *.png

但是你要创建你的图片就需要登录,登录目前只能通过discord这个软件,但这个软件是无法使用的。所以目前想要使用Midjourney创建图片,可能去尝试QQ的内测申请和等待QQ的公测了。可参见:年赚1亿美金,只有11个人,Midjourney做对了什么?

商用问题

假设我们已经可以正常使用midjourney。那么有几个问题我们应该关注下:

  1. 我们创建的图片可以直接商用吗?

    • 如果我们是免费的用户,创建的图片可以商用吗?
    • 如果我们是付费用户呢?
    • 如果我们是付费用户创建的,但是后面我不付费了,还可以商用吗?
  1. 放大别人的图片或者直接复制别人创建的图片也可以商用吗?

  2. midjourney在大陆使用创建的图片也受保护吗?

官方服务条款(以官网最新版为准)

要回答这个问题,我们必须得看下官网文档有关我们权利的定义,参考Midjouney文档的Your Rights描述

*.png

这是midjourney服务的权利条款,大致意思如下:

  1. 你对自己创建的资产拥有所有权:如果你按照本协议使用该服务创建了资产(如图像、视频等),你将拥有这些资产的所有权。但是,这不包括将他人的图像放大的情况,这些图像仍由原始资产创建者拥有。对于法律适用情况,midjourney不提供任何保证或承诺,如果你想了解更多关于你所在地法律的信息,建议你咨询律师。即使你在未来降级或取消会员资格,你对所创建资产的所有权仍然保持。

  2. 大公司的使用要求:如果你是年收入超过100万美元的公司的员工或所有者,并且代表你的雇主使用该服务,你必须为每个代表你使用该服务的人购买“Pro”或“Mega”会员才能拥有你创建的资产。如果你不确定你的使用是否代表你的雇主,请假定它是的。

  3. 未付费会员的资产权利:如果你不是付费会员,你不拥有你创建的资产。但是,Midjourney将根据Creative Commons Noncommercial 4.0 Attribution International License授权给你资产的使用权。完整的文本可以在以下链接找到:https://creativecommons.org/licenses/by-nc/4.0/legalcode。

  4. Midjourney是一个开放的社区:其他人可以使用和重新混合你在公共环境中发布的图像和提示。默认情况下,你的图像是公开可查看和可重新混合的。购买"Pro"或"Mega"计划的用户可以绕过一些这些公共共享默认设置。

  5. Stealth特性:如果你购买了Stealth特性作为你的“Pro”或"Mega"订阅的一部分,或通过之前可用的附加组件购买,当你在服务中启用Stealth模式时,我们同意尽最大努力不在任何情况下发布你制作的资产。

  6. 注意事项:请注意,任何你在共享或公开空间(如Discord聊天室)中制作的图像都可被该聊天室中的任何人查看,无论是否启用Stealth模式。

总之,Midjourney的权利条款规定了在使用该服务时对创建的资产的所有权和许可权的不同情况。在某些情况下,例如在公共环境中发布的图像和提示,还存在其他用户使用和重新混合的可能性。

所以Midjourney的权利条款中提到的Creative Commons Noncommercial 4.0 Attribution International License也很关键。

Creative Commons Attribution-NonCommercial 4.0 International Public License(简称CC BY-NC 4.0)是一种公共许可证,允许您在非商业目的下使用许可资料。以下是该许可证的主要内容:

  1. 许可范围:
  • 允许您在全球范围内、免版税、不可转让、非独占、不可撤销地行使许可资料的许可权。
  • 您可以复制和分享许可资料(整体或部分)仅用于非商业目的。
  • 您可以制作、复制和分享改编资料仅用于非商业目的。
  1. 许可条件:
  • 如果您分享许可资料(包括修改后的形式),您必须:
    • 保留许可人提供的许可资料的相关信息(如创建者标识、版权通知、许可证引用等)。
    • 指示您修改了许可资料,并保留对其进行的任何先前修改的说明。
    • 指示许可资料在本公共许可证下获得许可,并包含本公共许可证的文本或链接。
  1. 非商业定义:
  • 非商业定义为不主要针对或朝向商业利益或货币补偿。在本公共许可证下,通过数字文件共享或类似方式交换许可资料与其他受版权和类似权利保护的资料,只要不涉及货币补偿的支付,都被视为非商业行为。
  1. 免责声明和责任限制:
  • 许可人在尽可能的范围内提供许可资料“按原样”和“按现状”,不对许可资料作任何形式的陈述或保证。许可人在尽可能的范围内不对因本公共许可证或许可资料的使用而产生的任何损失、费用、开支或损害承担责任。
  1. 许可期限和终止:
  • 本公共许可证适用于许可的版权和类似权利的期限。但是,如果您未遵守本公共许可证,那么您在本公共许可证下的权利将自动终止。

总结

好了,那么重点总结来了:

  • 如果我们是免费的用户,创建的图片可以商用吗?

根据这个许可证,如果您不付费,您仍然可以使用创建的图片,但只能用于非商业目的。您不能将这些图片用于商业利益或货币补偿的目的。此外,您必须遵守许可条件,包括正确归属和标注许可资料。

  • 如果我们是付费用户呢?

如果您是付费会员,并且遵守Midjourney的服务条款,您将拥有您使用服务创建的所有资产的所有权。

  • 如果我们是付费用户创建的,但是后面我不付费了,还可以商用吗?

如果您不再付费,您仍然拥有您在付费期间创建的资产的所有权。根据提供的Midjourney权利条款的描述,当你付费使用服务并创建的资产(在这里指的是图片),只要它们是在遵守服务协议的情况下创建的,你将拥有这些资产的所有权。这种所有权将在你降级或取消会员资格后仍然存在。因此,即使你后来不再付费,你之前在付费期间创建的图片仍然可以商用。

  • 放大别人的图片或者直接复制别人创建的图片也可以商用吗?

不能。你使用的图片应该是你自己创建的或者你有权使用的。如果你使用了他人的图片进行放大处理,则这些图片仍然属于原始资产创建者。

  • midjourney在大陆使用创建的图片也受保护吗?

一般来说,无论在哪里使用Midjourney服务创建的资产,都会享有与服务条款中描述的相同的版权。但是,由于不同国家和地区的版权法规定不同,你在中国大陆使用该服务创建的资产的版权可能会受到中国大陆法律的限制或影响。

总的来说,如果你在中国大陆使用Midjourney服务,可能会面临服务不稳定、不受官方支持、存在法律风险等问题,建议在了解相关法律规定并充分评估风险后谨慎使用。

有些服务是可以访问,但不对咱们提供服务。有些服务则是无法访问:

*.png ]]>
Wed, 16 Aug 2023 01:39:23 GMT https://www.daguanren.cc/post/Midjourney-ni-yong-dui-le-ma.html
微信网页开发-网页授权-获取用户信息 https://www.daguanren.cc/post/wei-xin-wang-ye-kai-fa---wang-ye-shou-quan---huo-qu-yong-hu-xin-xi.html

微信的隐私保护政策越来越严格,微信网页授权中获取用户信息的接口也不断调整,虽然官网也有文档,但是你会发现实际调用接口的时候,接口返回的数据与官网描述的返回字段并不匹配,因为官网文档的更新具有滞后性,此篇博文主要记录微信网页开发-网页授权-获取用户信息的实际返回字段。

首先,官方文档的访问链接在此:网页授权

这里获取用户信息所需要用到的access_token和公众号定时刷新的access_token不是同一个。这里的access_token,我并没有保存和定时刷新,因为没有看到获取限制。每个用户每次登录都能获取到的access_token都是不同的。

image.png

可以看到,目前微信返回的有效的用户信息,仅有头像、昵称、openid和unionid返回不是空。

但是奇怪的是,我这里选择的是snsapi_base,并不是snsapi_userinfo,依然可以调用此接口:

## 第四步:拉取用户信息(需 scope 为 snsapi_userinfo)

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
]]>
Fri, 28 Oct 2022 02:07:35 GMT https://www.daguanren.cc/post/wei-xin-wang-ye-kai-fa---wang-ye-shou-quan---huo-qu-yong-hu-xin-xi.html
通过小程序链接的Short Link跳转小程序(例如:#小程序://快团团) https://www.daguanren.cc/post/tong-guo-xiao-cheng-xu-lian-jie-de-ShortLink-tiao-zhuan-xiao-cheng-xu.html

最近发现很多快团团的商品可以通过点击微信内聊天对话框直接进入商品详情页,就去研究了下这个神奇的标签:

#小程序://快团团/boQHpC5N2sOeAoJ
*.png *.png

一开始不知道这个东西叫什么,搜了大半天,才发现叫做“Short Link”。

可以通过调用服务端的接口生成 Short Link

Short Link不是任何小程序都可以直接生成的,必须是电商类目小程序,具体包含以下一级类目:电商平台、商家自营、跨境电商。详情可参照获取 Short Link

具体案例:

接下来,我们用站直了小程序去尝试申请上面的类目。

*.png

基本上“入口”的东西都要经营资质,我们这里可以先选个家化(个护家清)的试下。

有了类目后,我们尝试使用postman调用接口来获取Short Link。

*.png

搞定,可以。

*.png

进阶案例:

利用这个short link能干啥呢?哼哼,它可以实现从我们的小程序通过short link直接跳转到快团团小程序。从而用我们小程序里的积分兑换快团团小程序里商品的优惠券。

使用逻辑大概是这样滴:

*.png

小程序内跳转的代码是这样滴:

wx.navigateToMiniProgram({
        shortLink: '#小程序://快团团/点击跟团/sdE2LZMyMnaW3Wt',
        success(res) {
          // 打开成功
        },
        fail(res) {
          // 打开失败
          console.log(res)
        },
      })

注意必须得是点击才能触发跳转。

那快团团如何设置和获取这些优惠券呢?看下面这张图:

*.png

目前还不支持批量生成一堆券,所以得很麻烦的复制short link并保存到自己的数据库中。

完结~~

直接在微信上点击链接获取优惠券:

*.png ]]>
Thu, 21 Jul 2022 05:22:38 GMT https://www.daguanren.cc/post/tong-guo-xiao-cheng-xu-lian-jie-de-ShortLink-tiao-zhuan-xiao-cheng-xu.html
Nginx获取真实的客户端IP和限制IP https://www.daguanren.cc/post/Nginx-huo-qu-zhen-shi-de-ke-hu-duan-IP-he-xian-zhi-IP.html

有时候,我们的服务会经过多层nginx代理转发。比如一个www.daguanren.cc这个服务部署在服务器A上,

经过反向代理后,由于在客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip,通过$remote_addr变量拿到的将是反向代理服务器的ip地址。

X-Forwarded-For:这个头部设置了客户端IP,以及每一级代理IP(形式为:clinet_ip, proxy1_ip, proxy2_ip, 需要在代理层配置) REMOTE_ADDR:上一级代理服务的IP,若上一级代理为空,即为客户端IP。

在真实场景中,我们以Nginx代理服务器、Node.js服务为例:
客户端 >>>> Nginx >>>> Node.js

在第一级代理处增加配置:
server {
  listen 8443;
  server_name xxx.xxx.com;

  location / {
    ...
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass your Node.js serve
    ...
  }
}

效果是:http头中会增加 x-real-ip 这个字段,并被Nginx赋值为客户端地址。Node.js通过读取http header中的 x-real-ip 即可获取客户端真实IP地址。

假如存在多级代理,即Nginx --> Nginx --> web服务,需这样处理:

a. 在第一层Nginx代理中配置: proxy_set_header x-real-ip $remote_addr; b. 第二层Nginx代理中则不添加该条配置 然后在web服务中直接从http头中读出x-real-ip这个字段作为ip地址即可。

参考:

https://www.jianshu.com/p/01e08c6eb85e

https://stackoverflow.com/questions/8107856/how-to-determine-a-users-ip-address-in-node

https://amos-x.com/index.php/amos/archives/nginx-realip/

https://blog.csdn.net/qq_34556414/article/details/106634895

IP限制的写法

server {
        listen 80;
        server_name www.daguanren.cc;
        allow 11.64.10.174;
        allow 127.0.0.1;
        allow 11.20.0.182;
        allow 47.4.18.240;
        allow 12.13.15.5;
        allow 9.32.35.18;
        allow 154.8.27.12;
        deny all;
        location / {
        #       proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                add_header Cache-Control 'no-cache, must-revalidate, proxy-revalidate, max-age=0';
                root /home/erp/;
                index index.html;
        }
}
#只允许指定的ip访问a1.htm a2.htm a3.htm这个三个页面,其他IP的访问都拒绝

location ~* /(a1.htm|a2.htm|a3.htm)$ {
 allow 10.0.0.2;
 deny all;
 condition………;
}

参考:

https://www.yisu.com/zixun/148142.html

]]>
Wed, 01 Jun 2022 05:05:38 GMT https://www.daguanren.cc/post/Nginx-huo-qu-zhen-shi-de-ke-hu-duan-IP-he-xian-zhi-IP.html
公众号模板消息和事件 https://www.daguanren.cc/post/gong-zhong-hao-mo-ban-xiao-xi-he-shi-jian.html

公众号模板消息展示内容减少,嗯,没错,又是为了防止滥用。

image.png

生成公众号带参二维码,扫码后的消息通知携带的参数为:

{
    "ToUserName": "gh_1e1393",
    "FromUserName": "oM3q_UseyO23SbI",
    "CreateTime": "1641347497",
    "MsgType": "event",
    "Event": "SCAN",
    "EventKey": "bdb3_297a23b35a30",
    "Ticket": "gQHF8DwAA3AAgQE_NR3cA"
}

灰色头像的地址:

https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132

]]>
Wed, 05 Jan 2022 01:56:10 GMT https://www.daguanren.cc/post/gong-zhong-hao-mo-ban-xiao-xi-he-shi-jian.html
小程序登录和用户信息获取 https://www.daguanren.cc/post/xiao-cheng-xu-deng-lu-he-yong-hu-xin-xi-huo-qu.html

兄弟们,我又要写一篇小程序登录相关的文章了,因为时代变了,小程序接口又又又又调整了。

2022-05-09 调整

小程序用户头像昵称获取规则调整公告

*.png

此后小程序无法直接获取头像和昵称。只能通过个人中心或设置等页面使用头像昵称填写能力让用户完善个人资料。小程序这样搞了,微信网页和公众号还会远吗?

*.png

参考头像昵称填写

2021-12-27 调整

open-data没用了。

小程序用户信息相关接口调整公告

组件功能调整

开发者在未获取用户明示同意的情况下通过 组件 在小程序中展示用户个人信息,用户容易误以为自己的个人信息在未授权的情况下,被小程序获取。平台计划从2022年2月21日24时起回收通过展示个人信息的能力,若小程序需收集用户昵称头像等信息,可以通过 头像昵称填写功能 功能进行收集。具体回收方式为:

  1. 头像展示 灰色头像
  2. 用户昵称展示“微信用户”
  3. 用户性别、地区、语言展示为为空(“”)

小程序通过展示群名称能力保留,平台会针对小程序生命周期内首次调用该组件展示群名称向用户提示:“群名称仅你可见,小程序无法获取。”

2021-09-26 可使用的功能

当前能获取到的用户信息只有:

  • 昵称nickName,通过wx.getUserProfile获取,每次获取微信均会弹框要求用户授权
  • 头像avatarUrl,通过wx.getUserProfile获取,每次获取微信均会弹框要求用户授权
  • openid,通过wx.login获取到code后,发给后台,后台调用auth.code2Session中提到的url,获取openid
  • unionid,通过wx.login获取到code后,发给后台,后台调用auth.code2Session中提到的url,如果已经在开放平台绑定,则可直接获取unionid

所以用户信息这一块,你会发现用session_key加解密好像不需要了。

但是session_key就没用了吗?不是滴,有些接口还是有用滴,例如获取微信步数的接口wx.getWeRunData ,如果你的应用是根据用户每天运动了多少步去判定用户完成任务与否,给用户发放奖励的话,一旦有鸡贼的用户利用IT知识,拿到了你系统的token,然后每天就可以直接用token调你的接口,给你传假的微信步数数据了。

最简单的想拿昵称和头像,直接调wx.getUserProfile

    wx.getUserProfile({
      desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: (res) => {
        console.log(res)
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    })

调用返回的userInfo可以直接读取里面的avatarUrl和nickName。

*.png *.png *.png

2021-09-26 调整

微信公众平台用户信息相关接口调整公告

不管是小程序、公众号还是Open平台(包括微信网页),用户性别及地区信息以及语言信息都只返回为空或者默认值了。腾讯称这样做是为了保护用户隐私。

*.png

*注:字段名均保持不变,小程序与小游戏获取用户信息接口“用户性别”字段名为gender;Open 平台授权接口“用户性别”字段名为 sex

不过这个修改应该影响不大,因为它还是返回值的,只是返回的值没有了参考意义,对于老用户,可以不去管它;对于新用户,在开发的时候就可以不存储这几个字段了。

哦,对了,这里还是有个坑,现在的小程序文档并没有备注它改成了统一返回默认值,比如这个文档:UserInfo 所以用户如果不看公告的话,可能还被蒙在鼓里,纳闷,为啥获取不到性别和地区咧。就比如这位大兄弟的灵魂拷问:获取用户信息UserInfo的性别返回0?

2021-04-15 调整

这波更新影响比较大,更新了:

  • wx.login,若小程序已在微信开放平台进行绑定,则通过wx.login接口获取的登录凭证可直接换取unionID
  • wx.getUserInfo、
  • 新增了getUserProfile,开发者每次通过该接口获取用户个人信息均需用户确认,请开发者妥善保管用户快速填写的头像昵称,避免重复弹窗。

这次更新后的最佳实践为:

调整后,开发者如需获取用户身份标识符只需要调用wx.login接口即可。

开发者若需要在界面中展示用户的头像昵称信息,可以通过组件进行渲染,该组件无需用户确认,可以在界面中直接展示。

在部分场景(如社交类小程序)中,开发者需要在获取用户的头像昵称信息,可调用wx.getUserProfile接口,开发者每次通过该接口均需用户确认,请开发者妥善处理调用接口的时机,避免过度弹出弹窗骚扰用户。

*.png *.png

小程序登录、用户信息相关接口调整说明

]]>
Tue, 23 Nov 2021 07:13:20 GMT https://www.daguanren.cc/post/xiao-cheng-xu-deng-lu-he-yong-hu-xin-xi-huo-qu.html