将你的爱发电接入到你的网站中--爱发电API使用指南(实现网页显示爱发电赞助者名单)

由 Polze Li 发布

爱发电接入网站(PHP)实现

前言:有许多开发者拥有自己的网站和爱发电,可能需要赞助支持运营,而更好的获取到赞助者名单以及将其公示以表感谢是非常有必要的。小编我是因为我在一个我的世界服务器做技术,刚好需要这一类需求,于是摸索总结给需要的人。事例:https://catland.com.cn/afd.php

一、进入爱发电开发者后台

后台地址:https://afdian.net/dashboard/dev

需要您的user_id和api token(注意保密,不要泄露!!!)

将你的爱发电接入到你的网站中--爱发电API使用指南(实现网页显示爱发电赞助者名单)
将你的爱发电接入到你的网站中--爱发电API使用指南(实现网页显示爱发电赞助者名单)

二、PHP实现api对接

在您网站的目录下创建一个.php文件,用于获取api内容以及显示内容。

api接口:https://afdian.net/api/open/query-sponsor

api字段: 订单(爱发电官网原文)

total_count     赞助者总数
total_page      页数,默认每页50条,请求时,传 page ,curr_page < total_page则可继续请求

out_trade_no 订单号
custom_order_id 自定义信息
user_id 下单用户ID
plan_id 方案ID,如自选,则为空
title 订单描述
month 赞助月份
total_amount 真实付款金额,如有兑换码,则为0.00
show_amount 显示金额,如有折扣则为折扣前金额
status 2 为交易成功。目前仅会推送此类型
remark 订单留言
redeem_id 兑换码ID
product_type 0表示常规方案 1表示售卖方案
discount 折扣
sku_detail 如果为售卖类型,以数组形式表示具体型号
address_person 收件人
address_phone 收件人电话
address_address 收件人地址

api字段: 赞助者(爱发电官网原文)

total_count     赞助者总数
total_page      页数,默认每页20条,请求时,传 page ,curr_page < total_page则可继续请求

sponsor_plans    []数组类型,具体节点为多个赞助方案。
current_plan     当前赞助方案,如果节点仅有 name:"",不包含其它内容时,表示无方案
all_sum_amount   累计赞助金额,此处为折扣前金额。如有兑换码,则此处为虚拟金额,回比实际提现的多
create_time      int 秒级时间戳,表示成为赞助者的时间,即首次赞助时间
last_pay_time    int 秒级时间戳,最近一次赞助时间

user 节点表示用户属性
user_id    用户唯一ID
name        昵称,非唯一,可重复
avatar    头像

通过阅读爱发电官方的API文档我们可知以下内容(爱发电官网原文)

签名介绍

为了保证数据安全与灵活性,平台做了一个简单的签名逻辑。平台接收的参数如下。 

user_id: 上面的 user_id,表明你是谁
params: 具体接口传参的json字符串
ts: 发出请求时秒级时间戳
sign: 针对上面3个数据的签名,防止伪造数据。

sign 的计算规则为:md5(token+请求数据按key排序拼接key和value)

具体到这次场景,参数key为固定值,只有上面四个字段 sign 签名可以简化为
sign = md5({token}params{params}ts{ts}user_id{user_id})
{}包的数据为具体数值

也就是说他需要和他通讯时进行签名验证,如下(爱发电官网原文)

示例

假设当前数据如下
user_id abc
params  {"a":333}
ts      1624339905
token   123        注意这个不传递到服务端,仅参与签名计算

sign = md5('123params{"a":333}ts1624339905user_idabc')

sign = a4acc28b81598b7e5d84ebdc3e91710c

注意token直接写具体值,其它参数写kv,没有任何连接字符,直接拼接

JSON请求示例 

{"user_id":"abc", "params": "{\"a\":333}", "ts": 1624339905, "sign":"a4acc28b81598b7e5d84ebdc3e91710c"}

这里他会回一个响应码(也就是文档提到的ec),若ec=200,则我们的和API的交接成功,我们连接到了爱发电并获取到了信息,获取到赞助者信息事例如下(事例为爱发电官网原文)

{
  "ec": 200,
  "em": "",
  "data": {
    "total_count": 14,
    "total_page": 2,
    "list": [
      {
        "sponsor_plans": [],
        "current_plan": {
          "name": ""
        },
        "all_sum_amount": "0.00",
        "create_time": 1581011280,
        "last_pay_time": 1598852327,
        "user": {
          "user_id": "3524370d11e8ae8852540025c377",
          "name": "Hee",
          "avatar": "https://pic1.afdiancdn.com/user/27f7sss7/avatar/2d9659585fc4798068efbb652e56c08a.jpg"
        }
      },
      {
        "sponsor_plans": [
          {
            "plan_id": "sdfsf",
            "rank": 0,
            "user_id": "34343",
            "status": 3,
            "name": "独立永久方案",
            "pic": "",
            "desc": "啊1;",
            "price": "1.00",
            "update_time": 1621084278,
            "pay_month": 1,
            "show_price": "1.00",
            "independent": 1,
            "permanent": 1,
            "can_buy_hide": 0,
            "need_address": 0,
            "product_type": 0,
            "sale_limit_count": -1,
            "need_invite_code": false,
            "expire_time": 2114352000,
            "sku_processed": [],
            "rankType": 21
          }
        ],
        "current_plan": {
          "plan_id": "sdfsfsf",
          "rank": 0,
          "user_id": "3453535",
          "status": 3,
          "name": "独立永久方案",
          "pic": "",
          "desc": "啊1;",
          "price": "1.00",
          "update_time": 1621084278,
          "pay_month": 1,
          "show_price": "1.00",
          "independent": 1,
          "permanent": 1,
          "can_buy_hide": 0,
          "need_address": 0,
          "product_type": 0,
          "sale_limit_count": -1,
          "need_invite_code": false,
          "expire_time": 2114352000,
          "sku_processed": [],
          "rankType": 21
        },
        "all_sum_amount": "13.00",
        "first_pay_time": 1576776221,
        "last_pay_time": 1581083107,
        "user": {
          "user_id": "sfff",
          "name": "sfsf:十五种幸福(新版)",
          "avatar": "https://pic1.afdiancdn.com/user/sdfsfsf/avatar/c13b6125cbd9fbe7810c79256df1f5b2_w4032_h3024_s3215.jpeg"
        }
      }
    ]
  }
}

ec的字段

ec 字段异常错误码

200 成功
400001  params incomplete
400002  time was expired
400003  params was not valid json string
400004  no valid token found
400005  sign validation failed

目前我们只需要赞助者的名称和id还有累积赞助金额,则我们需要用到[user][user_id]和[user][name]和[all_sum_amount]这些key

简单代码实现如下(用json实现收发):

<?php

// 你的用户ID
$user_id = "你的用户ID";

// 生成的API Token
$token = "你的API Token";

// 获取当前时间戳
$ts = time();

// 构建请求参数
$params = [
    "page" => 1 // 查询第一页的赞助者
];

// 按照要求的格式拼接字符串
$kv_string = "params" . json_encode($params) . "ts" . $ts . "user_id" . $user_id;

// 计算签名
$sign = md5($token . $kv_string);

// 构建请求数据
$request_data = [
    "user_id" => $user_id,
    "params" => json_encode($params),
    "ts" => $ts,
    "sign" => $sign
];

// 转换为 JSON 格式
$json_data = json_encode($request_data);

// 设置请求的 URL
$url = "https://afdian.net/api/open/query-sponsor";

// 初始化 cURL
$curl = curl_init();

// 设置 cURL 选项
curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $json_data,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Content-Length: ' . strlen($json_data)
    ],
]);

// 发送请求并获取响应
$response = curl_exec($curl);

// 关闭 cURL 资源
curl_close($curl);

// 处理响应数据
if ($response) {
    $data = json_decode($response, true);

    if (isset($data['ec']) && $data['ec'] == 200) {
        // 查询成功
        $sponsors = $data['data']['list'];

        // 输出赞助者信息
        echo '<h1>赞助者列表</h1>';
        foreach ($sponsors as $sponsor) {
            echo '<p>用户ID: ' . $sponsor['user']['user_id'] . '</p>';
            echo '<p>昵称: ' . $sponsor['user']['name'] . '</p>';
            echo '<p>累计赞助金额: ' . $sponsor['all_sum_amount'] . '</p>';
            echo '<hr>';
        }
    } else {
        // 查询失败
        echo '查询赞助者失败: ' . $data['em'];//这里反馈了ec状态
    }
} else {
    // 请求失败
    echo '请求失败';
}

?>

这里我们获取到了用户的id和昵称和累积赞助金额

将你的爱发电接入到你的网站中--爱发电API使用指南(实现网页显示爱发电赞助者名单)

如果您觉得不够美观,可以进阶使用CSS来排版,示例代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>赞助者列表</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f4f4f4;
            color: #333;
        }
        .container {
            max-width: 800px;
            margin: 20px auto;
            padding: 20px;
            background-color: #fff;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }
        .sponsor {
            border-bottom: 1px solid #ccc;
            padding: 20px 0;
            display: flex;
            align-items: center;
        }
        .avatar {
            width: 80px;
            height: 80px;
            border-radius: 50%;
            margin-right: 20px;
        }
        .info {
            flex: 1;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>赞助者列表</h1>
        <?php
        /*api代码*/
        ?>
    </div>
</body>
</html>

然后以上就可以实现下图

将你的爱发电接入到你的网站中--爱发电API使用指南(实现网页显示爱发电赞助者名单)

以上就是全部教程,如有疑问可以留言询问

版权所有:lzz0403的技术博客
文章标题:将你的爱发电接入到你的网站中--爱发电API使用指南(实现网页显示爱发电赞助者名单)
除非注明,文章均为 lzz0403的技术博客 原创,请勿用于任何商业用途,禁止转载

0条评论

发表评论