查看wordpress上的文章

或者发表您的想法

  • 更新日志

    2025.12.7

    • 更新了redirect.php页面的样式,增加了授权中、授权成功、授权失败三种不同状态下的动态显示效果
    • 增加了对重复请求回调的处理(主动报错)
    • 将链接有效期延长1分钟,11分钟之外的回调会被视为无效

    2025.12.10

    • 配置专门的本地sqlite来专注处理接口业务,并使用脚本定期将sqlite里面的数据同步至原有的mysql表,以此实现wordpress业务和核心接口业务的分离,增强系统稳健性
    • 增加了captcha业务及对应接口(从原业务网站搬过来的),无需验签

    2025.12.29

    • 对callback接口增加了请求限制,提高了接口的安全性
    • 整体迁移了站点并升级了网站业务的wordpress版本
    • 增加了skyscript转换工具页面

    2025.12.31

    • 增加了redirect接口和callback接口的安全性,这两个接口将不再作为可直接调用接口开放,redirect接口启用了JS质询来防止未经过浏览器访问的请求,callback接口增加了一次性令牌管理(类似于JWT的机制,访问redirect时服务器对参数生成签名,然后callback再验证签名)
    • 增加了state接口的速率限制,同一个IP每10秒钟调用超过10次后,后续请求将会被阻止
    • 更新了skyscript转换工具
      • 修复了在部分场景下部分区域无法点击的BUG
      • 修复了无法在预览时多指点击的BUG
      • 增加了预览结束后自动回滚至第一行
      • 修复了遗留的时间间隔算法问题,公式修改为:基础等待时间=两音符之间的单位时间差÷最大公约数,其余公式不变
      • 构造的脚本中增加了歌曲原始信息的说明

  • 网站介绍

    这个网站使用了ClawCloud平台搭建了一个WordPress应用,并且在应用的基础上增加了/oauth/路由专门作为oauth授权的服务路由

    网站的域名来自于DNSHE平台,并且使用了cloudflare平台对服务器的域名进行托管并使用WAF服务以确保网站的安全

    网站现已启用了SMTP邮件服务,使用了Resend平台的域名邮件托管服务,可以收到来自本网站邮箱发送的系统业务消息

    值得一提的是,搭建这一网站截止至目前为止没有产生过任何费用,并且相对而言是匿名的,唯一产生成本的可能是站长在编写应用接口程序时喝掉的几瓶可乐以及若干根头发。

    如果你想接入本网站的oauth服务,可以查看接入条件这一文章。

    captcha业务允许任何用户接入,可以参考captcha业务接口这一文章。

    网站使用wordpress搭建了一个博客平台,网站本身运营了wordpress业务,可以参考网站说明

  • captcha业务接口

    本文下面的接口是图像验证码获取和核验的接口,与网站业务和授权业务技术栈无关,不影响原有业务,且无需appkey等参数

    调用流程:

    captcha接口用于获取验证码图像和ID,validate接口用于核验验证码

    一、captcha接口接口

    链接:https://www.zdjlales.de5.net/captcha/captcha.php

    必填请求参数:无

    示例返回:

    {
      "session_id": "c8203f6caa63b5db334a8f73d9fa974d",
      "captcha_image": "iVBORw0KGgoAA*******BJRU5ErkJggg=="
    }

    其中session_id是验证码ID,captcha_image是验证码图像base64编码之后的字符串

    二、validate接口

    这一接口会在用户授权成功后自动跳转至该链接,且自动挂载code和state参数。

    链接:https://www.zdjlales.de5.net/captcha/validate.php

    必填请求参数:

    • session_id:验证码ID
    • captcha:验证码

    示例返回:

    {"success":true}

    如果验证码错误则会返回:

    {"error":"验证码不正确"}

    核销的话,顾名思义,就是使用session_id去验证captcha是否正确,无论结果正确与否,session_id一旦核销则会立即删除,所以session_id只允许被核销一次。根据这个特性,建议在刷新验证码的时候先向服务器发送一个captcha的值为空的核销请求以确保安全

  • openid说明

    QQ方面设计的是每个QQ账号对同一个ID的应用有同一个openid,即同一个QQ用户登录同一个应用时产生的openid是固定的。可以使用这一特性将openid作为同一个QQ号的登录凭证。

    目前已知的是openid只和QQ号和应用的ID有关,但是无法通过openid获取QQ号,也不能通过QQ号和appid获取openid,唯一的方法是需要通过用户手动授权后获取。

    本网站接口在获取原有openid的基础上增加了一层HMAC-SHA256加密,以确保即使是同一个QQ号登录同一个应用,但必须是同一个appkey才能获取同样的openid,这样确保了一方面不会泄露原始的openid,另一方面也能够实现不同appkey之间的隔离。

  • test appkey

    here is a test appkey limited for verify the path of oauth is active or not: testkey

  • 获取appkey

    appkey是访问本网站上oauth接口的调用密钥,在调用state.php、query.php这两个接口时要求包含这一参数,以及可以使用appkey对响应和异步通知返回体进行签名验证

    appkey的调用有次数及频率上限,应当妥善保管你的appkey以防止未经过你同意的调用造成的额外限制。如appkey泄露请立即报备停用此密钥。

    如果你确定你满足获取appkey的条件,或者你的appkey已失效/需要更换,请联系QQ:3272976382

  • oauth业务接口说明

    整体调用流程:

    1. 设置appkey、异步通知地址和回调地址获取授权链接和state参数
    2. 用户完成授权回调路由
    3. 查询用户信息成功后向指定的异步通知地址发送POST请求,包含openid、头像、昵称参数

    4、回调路由自动跳转至指定的回调地址,且链接中附带state参数

    接口说明:

    一、获取授权地址接口

    链接:https://www.zdjlales.de5.net/oauth/state.php

    必填请求参数:

    • appkey:调用路由的密钥凭证
    • notify_url:指定的异步通知地址
    • return_url:指定的回调地址

    示例返回:

    {
      "code": 200,
      "msg": "success",
      "data": {
        "auth_url": "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=10*********4&redirect_uri=https%3A%2F%2Foauth.zdjlales.netlib.re%2Foauth%2Fredirect.php&state=c35e011f25c661bbb8100470348b286d",
        "state": "c35e011f25c661bbb8100470348b286d"
      },
      "sign": "da9d2bd5444793dfffc583810d9bbbea92250c720ad63dacc0151fa82bb29b1f"
    }

    创建授权链接成功后,数据库会记录state的值并与创建它时使用的appkey绑定

    二、回调路由接口

    这一接口会在用户授权成功后自动跳转至该链接,且自动挂载code和state参数。

    链接:https://www.zdjlales.de5.net/oauth/redirect.php

    必填请求参数:

    • code:授权码(回调时自动生成,无需填写)
    • state:授权请求ID(回调时自动生成,无需填写)

    示例返回:无

    示例跳转回return_urlhttps://www.zdjlales.de5.net/oauth/redirect.php?code=8a5a67f40b6ffcea7&state=c35e011f25c661bbb8100470348b286d

    三、回调处理接口

    此接口由上面的回调路由自动调用,无需手动调用

    链接:https://www.zdjlales.de5.net/oauth/callback.php

    必填请求参数:

    • code:授权码(自动调用,无需填写)
    • state:授权请求ID(自动调用,无需填写)

    示例同步返回内容:

    { 
       "return_url": "https://oauth.zdjlales.de5.net/oauth/query.php"
    }

    示例通知至notify_url

    {
      "code": 200,
      "msg": "查询成功",
      "data": {
        "state": "5c4c25daf11f0d2b2c6b11cfaa0fad10",
        "openid": "5*******************CD",
        "nickname": "**",
        "avatar": "http://thirdqq.qlogo.cn/ek_qqapp/W*****************kew/0",
        "timestamp": "1762977759"
      },
      "sign": "109439690b5100888a5a67f40b6ffcea7fd216886b15a163504c218dfbe2f86d"
    }

    四、查询授权接口

    链接:https://www.zdjlales.de5.net/oauth/query.php

    必填请求参数:

    • appkey:调用路由的密钥凭证,须与state绑定的appkey保持一致
    • state:授权请求ID

    示例返回:

    {
      "code": 200,
      "msg": "查询成功",
      "data": {
        "state": "5c4c25daf11f0d2b2c6b11cfaa0fad10",
        "status": "completed",
        "openid": "5*******************CD",
        "nickname": "**",
        "avatar": "http://thirdqq.qlogo.cn/ek_qqapp/****************kew/0",
        "created_at": "2025-11-12 20:00:47",
        "updated_at": "2025-11-12 20:01:06"
      },
      "sign": "109439690b5100888a5a67f40b6ffcea7fd216886b15a163504c218dfbe2f86d"
    }

    建议根据业务实际需求对收到的响应内容进行验签处理,详情可查看签名验签说明

  • 接入条件

    本网站的接口仅用作创建开发者平台的等待审核的

    1. 网站符合备案条件且双备案审核通过(需确保后续能够接入自己的应用)并在开放平台完成开发者注册
    2. 在开放平台完成应用创建,应用审核通过前可以临时将应用信息替换为本网站接口信息
    3. 开放平台有过审应用,即可将接口信息替换为自己的开放平台应用信息完成过渡

    如果你确认满足以上条件,那么请阅读获取appkey文章以获取接入网站API的密钥

    从备案到开放平台应用调试上的问题欢迎提出!

  • 签名验签说明

    将收到的返回JSON的data数据,如

    {"code": 200, "msg": "true", "data": {"键b": "值b", "键a": "值a"}, "sign": "xxxx"}

    的键按照从小到大的顺序排列,然后按照:”键a=值a&键b=值b” 的方式构造字符串(), 最后在构造的字符串加上:”&appkey=”+你的APPkey 得到:”键a=值a&键b=值b&appkey=YourAppKey”,再将这段字符串使用SHA256加密,得到签名后的签值,与sign的值比对一致则验签通过

    下面是服务器生成签名的原始代码:

    // 生成签名函数
    function generateSign($data, $appKey): string
    {
    if (is_array($data)) {
    ksort($data);
    $stringToSign = '';
    foreach ($data as $key => $value) {
    if ($key !== 'sign') {
    $stringToSign .= $key . '=' . $value . '&';
    }
    }
    $stringToSign .= 'key=' . $appKey;
    } else {
    $stringToSign = $data . '&key=' . $appKey;
    }
    return hash('sha256', $stringToSign);
    }

    如有疑问或免费获取appkey,请QQ联系3272976382

  • 世界,您好!

    欢迎使用 WordPress。这是您的第一篇文章。编辑或删除它,然后开始写作吧!