V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
myrual
V2EX  ›  推广

Java 收发比特币的中文教程之二: 收发比特币

  •  
  •   myrual · 2019-02-13 10:21:56 +08:00 · 1462 次点击
    这是一个创建于 2112 天前的主题,其中的信息可能已经有所发展或是发生改变。

    上一篇教程中, 我们创建了自动回复消息的机器人,当用户发送消息"Hello,World!"时,机器人会自动回复同一条消息!

    第二课: 机器人接受比特币并立即退还用户

    本教程 Github 实时更新版本

    按本篇教程后学习后完成后,你的机器人将会接受用户发送过来的加密货币,然后立即转回用户。 在 App.java 中,找到 switch 条件,加入新的"CASE",内容如下:

    App.java

    switch (category) {
    ...
    case SYSTEM_ACCOUNT_SNAPSHOT:
        userId =
          obj.get("data").getAsJsonObject().get("user_id").getAsString();
        byte[] JsData = Base64.decodeBase64(obj.get("data").getAsJsonObject().get("data").getAsString());
        String JsStr = new String(JsData);
        System.out.println("SYSTEM_ACCOUNT_SNAPSHOT json: " + JsStr);
        JsonObject jsObj = new JsonParser().parse(JsStr).getAsJsonObject();
        System.out.println(jsObj.get("amount").getAsString());
        System.out.println(jsObj.get("asset_id").getAsString());
        if (jsObj.get("amount").getAsFloat() > 0) {
          String aesKey = new String (Base64.encodeBase64(Config.PAY_KEY));
          System.out.println(aesKey);
          System.out.println(Config.PAY_KEY.length);
          String encryptPin = MixinUtil.encryptPayKey(Config.PIN,Config.PAY_KEY);
          MixinBot.transfer(
              jsObj.get("asset_id").getAsString(),
              jsObj.get("opponent_id").getAsString(),
              jsObj.get("amount").getAsString(),
              encryptPin,
              Config.RSA_PRIVATE_KEY,
              Config.CLIENT_ID,
              Config.SESSION_ID
          );
        }
        break;
    ...
    

    Hello Bitcoin!

    在项目目录下,执行 **gradle run **

    response:Response{protocol=http/1.1, code=101, message=Switching Protocols, url=https://blaze.mixin.one/}
    [onMessage !!!]
    json: {"id":"712fbde1-1b72-4e8f-b731-b7dc6f689c3e","action":"LIST_PENDING_MESSAGES"}
    LIST_PENDING_MESSAGES
    <=========----> 75% EXECUTING [13s]
    > :run
    

    开发者可以通过消息面板,给机器人转比特币,当机器人收到比特币后,马上返还给用户!

    事实上,用户可以发送任意的币种给机器人,它都能马上返还!

    源代码解释

    if (jsObj.get("amount").getAsFloat() > 0) {
      String encryptPin = MixinUtil.encryptPayKey(Config.PIN,Config.PAY_KEY);
      MixinBot.transfer(
          jsObj.get("asset_id").getAsString(),
          jsObj.get("opponent_id").getAsString(),
          jsObj.get("amount").getAsString(),
          encryptPin,
          Config.RSA_PRIVATE_KEY,
          Config.CLIENT_ID,
          Config.SESSION_ID
      );
    }
    

    如果机器人收到币,jsObj.get("amount") 大于零;如果机器人支付币给用户,接收到的消息是一样的,唯一不同的是 jsObj.get("amount")是一个负数. 最后一步,调用 SDK 的 MixinBot.transfer 将币返还用户!

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1672 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:48 · PVG 00:48 · LAX 08:48 · JFK 11:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.