MCIO Plugins MCIO Plugins
首页
爱发电 (opens new window)
无法下载? (opens new window)

人间工作P

我每天都好困… 最近在学习和进行 VOCALOID 创作
首页
爱发电 (opens new window)
无法下载? (opens new window)
  • FiguraLambda

  • SweetAdaptiveShop

  • SweetCheckout

    • 简介
    • 部署 支付系统后端
    • 部署 Bukkit插件
    • 后端部署 订单码支付
    • 后端部署 Native支付
    • 后端部署 支付宝Hook
    • 后端部署 微信Hook
    • 命令与权限
    • PAPI变量
    • 开发者接口
      • 获取插件主类
      • 下单
      • 添加支付方案支持
  • SweetDrops

  • SweetMail

  • SweetMessages

  • SweetRewards

  • SweetTask

  • 杂物

  • 插件文档
  • SweetCheckout
2025-07-07
目录

开发者接口

(opens new window)

将下方的 $VERSION 替换为版本号。

    repositories {
        maven("https://jitpack.io/")
    }
    dependencies {
        compileOnly("top.mrxiaom.SweetCheckout:shared:$VERSION")
    }
    
    1
    2
    3
    4
    5
    6
    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>
    <dependency>
        <groupId>top.mrxiaom.SweetCheckout</groupId>
        <artifactId>shared</artifactId>
        <version>$VERSION</version>
    </dependency>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 获取插件主类

    PluginCommon.getInstance();
    
    1

    # 下单

    参考插件源码 (opens new window),通过 PaymentsAndQRCodeManager 和 PaymentAPI 发送和处理订单请求。

    import org.bukkit.entity.Player;
    import top.mrxiaom.pluginbase.utils.Pair;
    import top.mrxiaom.sweet.checkout.Errors;
    import top.mrxiaom.sweet.checkout.Messages;
    import top.mrxiaom.sweet.checkout.PluginCommon;
    import top.mrxiaom.sweet.checkout.func.*;
    import top.mrxiaom.sweet.checkout.map.IMapSource;
    import top.mrxiaom.sweet.checkout.packets.plugin.PacketPluginRequestOrder;
    
    void foo(Player player) {
        String type = "wechat";
        String productName = "商品名";
        String moneyStr = "1.00"; // 价格必须为 X.XX 的格式
        if (!PaymentAPI.inst().isConnected()) {
            // 提示: 插件未连接到后端,请联系服务器管理员
            Messages.not_connect.tm(player);
            PaymentsAndQRCodeManager.inst().remove(player);
        } else {
            PluginCommon plugin = PluginCommon.getInstance();
            PaymentsAndQRCodeManager manager = PaymentsAndQRCodeManager.inst();
            if (manager.isProcess(player)) {
                // 提示: 请先完成你正在进行的订单
                Messages.commands__buy__processing.tm(player);
                return;
            }
            manager.putProcess(player);
            // 向后端发送订单请求
            PaymentAPI.inst().send(new PacketPluginRequestOrder(
                    player.getName(), type, productName, moneyStr
            ), resp -> {
                String error = resp.getError();
                if (!error.isEmpty()) {
                    // 出现错误时提醒玩家
                    Errors.fromString(error).tm(player, Pair.of("%type%", error));
                    manager.remove(player);
                    return;
                }
                // 下单成功操作
                String orderId = resp.getOrderId();
                long now = System.currentTimeMillis();
                long outdateTime = now + (120 * 1000L) + 500L; // 120.5 秒内到期
                // 生成地图画
                IMapSource source = IMapSource.fromUrl(plugin, resp.getPaymentUrl());
                // 给予玩家地图,要求玩家扫码支付
                manager.requireScan(player, source, orderId, outdateTime, money -> {
                    // 支付完成执行操作
                    player.sendMessage("支付完成");
                });
            });
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51

    # 添加支付方案支持

    对于想要添加支付方案支持者,请参见 :backend:common 模块的 top.mrxiaom.sweet.checkout.backend.payment (opens new window) 包。支付订单下单逻辑、支付成功事件广播逻辑、取消支付逻辑等等,都在这里,请拉取本项目源码 (opens new window),按自身需求进行增改。
    基本上,经过这一层接口的抽象,我们需要传递的信息大约只有:商品名(可选)、金额、订单号、支付二维码。

    注意:由于本项目的目标是尽可能减少中间商,会造成增加中间商的拉取请求将被拒绝。

    上次更新: 2025/07/10, 03:44:57
    PAPI变量
    简介

    ← PAPI变量 简介→

    Theme fork from Vdoing | Copyright © 2018-2025 人间工作P | 到爱发电支持我

    除非特别说明,本站点所有文章均以 CC BY-SA 协议授权

    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式