摘要:基于的語(yǔ)言比特幣開發(fā)教程用機(jī)器人接受和發(fā)送比特幣在上一篇教程中我們創(chuàng)建了自動(dòng)回復(fù)消息的機(jī)器人當(dāng)用戶發(fā)送消息時(shí),機(jī)器人會(huì)自動(dòng)回復(fù)同一條消息按本篇教程后學(xué)習(xí)后完成后,你的機(jī)器人將會(huì)接受用戶發(fā)送過來(lái)的加密貨幣,然后立即轉(zhuǎn)回用戶。
基于Mixin Network的Go語(yǔ)言比特幣開發(fā)教程 : 用 Mixin Messenger 機(jī)器人接受和發(fā)送比特幣
在 上一篇教程中, 我們創(chuàng)建了自動(dòng)回復(fù)消息的機(jī)器人,當(dāng)用戶發(fā)送消息"Hello,World!"時(shí),機(jī)器人會(huì)自動(dòng)回復(fù)同一條消息!
按本篇教程后學(xué)習(xí)后完成后,你的機(jī)器人將會(huì)接受用戶發(fā)送過來(lái)的加密貨幣,然后立即轉(zhuǎn)回用戶。
完整代碼如下:
main.go
fpackage main import ( "context" "encoding/base64" "encoding/json" "log" "github.com/MooooonStar/mixin-sdk-go/messenger" mixin "github.com/MooooonStar/mixin-sdk-go/network" ) type Listener struct { *messenger.Messenger } // interface to implement if you want to handle the message func (l *Listener) OnMessage(ctx context.Context, msg messenger.MessageView, userId string) error { data, err := base64.StdEncoding.DecodeString(msg.Data) if err != nil { return err } if msg.Category == "SYSTEM_ACCOUNT_SNAPSHOT" { var transfer messenger.TransferView if err := json.Unmarshal(data, &transfer); err != nil { return err } log.Println("I got a coin: ", transfer.Amount) mixin.Transfer(msg.UserId,transfer.Amount,transfer.AssetId,"",messenger.UuidNewV4().String(), PinCode,PinToken,UserId,SessionId,PrivateKey) return nil // return l.SendPlainText(ctx, msg.ConversationId, msg.UserId, string(data)) } else if msg.Category == "PLAIN_TEXT" { log.Printf("I got a message, it said: %s", string(data)) if string(data) == "g" { payLinkEOS := "https://mixin.one/pay?recipient=" + msg.UserId + "&asset=" + "6cfe566e-4aad-470b-8c9a-2fd35b49c68d" + "&amount=" + "0.1" + "&trace=" + messenger.UuidNewV4().String() + "&memo=" payLinkBTC := "https://mixin.one/pay?recipient=" + msg.UserId + "&asset=" + "c6d0c728-2624-429b-8e0d-d9d19b6592fa" + "&amount=" + "0.001" + "&trace=" + messenger.UuidNewV4().String() + "&memo=" log.Println(payLinkBTC) BtnEOS := messenger.Button{Label: "Pay EOS 0.1", Color: "#0080FF", Action: payLinkEOS} BtnBTC := messenger.Button{Label: "Pay BTC 0.0001", Color: "#00FF80", Action: payLinkBTC} if err := l.SendAppButtons(ctx, msg.ConversationId, msg.UserId, BtnEOS, BtnBTC); err != nil { return err } return nil } else if string(data) == "a" { card := messenger.AppCard{Title: "Pay BTC 0.0001", Description: "topay", Action: "http://www.google.cn", IconUrl: "https://images.mixin.one/HvYGJsV5TGeZ-X9Ek3FEQohQZ3fE9LBEBGcOcn4c4BNHovP4fW4YB97Dg5LcXoQ1hUjMEgjbl1DPlKg1TW7kK6XP=s128"} if err := l.SendAppCard(ctx, msg.ConversationId, msg.UserId, card); err != nil { return err } return nil } else if string(data) == "r" { mixin.Transfer(msg.UserId,"0.0001","c6d0c728-2624-429b-8e0d-d9d19b6592fa","",messenger.UuidNewV4().String(), PinCode,PinToken,UserId,SessionId,PrivateKey) return nil } else { return l.SendPlainText(ctx, msg.ConversationId, msg.UserId, string(data)) } } else { log.Println("Unknown message!", msg.Category) return err } } const ( UserId = "21042518-85c7-4903-bb19-f311813d1f51" PinCode = "911424" SessionId = "4267b63d-3daa-449e-bc13-970aa0357776" PinToken = "gUUxpm3fPRVkKZNwA/gk10SHHDtR8LmxO+N6KbsZ/jymmwwVitUHKgLbk1NISdN8jBvsYJgF/5hbkxNnCJER5XAZ0Y35gsAxBOgcFN8otsV6F0FAm5TnWN8YYCqeFnXYJnqmI30IXJTAgMhliLj7iZsvyY/3htaHUUuN5pQ5F5s=" //please delele the blank of PrivateKey the before each line PrivateKey = `-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQCDXiWJRLe9BzPtXmcVe6acaFTY9Ogb4Hc2VHFjKFsp7QRVCytx 3KC/LRojTFViwwExaANTZQ6ectwpAxIvzeYeHDZCXCh6JRFIYK/ZuREmYPcPQEWD s92Tv/4XTAdTH8l9UJ4VQY4zwqYMak237N9xEvowT0eR8lpeJG0jAjN97QIDAQAB AoGADvORLB1hGCeQtmxvKRfIr7aEKak+HaYfi1RzD0kRjyUFwDQkPrJQrVGRzwCq GzJ8mUXwUvaGgmwqOJS75ir2DL8KPz7UfgQnSsHDUwKqUzULgW6nd/3OdDTYWWaN cDjbkEpsVchOpcdkywvZhhyGXszpM20Vr8emlBcFUOTfpTUCQQDVVjkeMcpRsImV U3tPYyiuqADhBTcgPBb+Ownk/87jyKF1CZOPvJAebNmpfJP0RMxUVvT4B9/U/yxZ WNLhLtCXAkEAnaOEuefUxGdE8/55dUTEb7xrr22mNqykJaax3zFK+hSFBrM3gUY5 fEETtHnl4gEdX4jCPybRVc1JSFY/GWoyGwJBAKoLti95JHkErEXYavuWYEEHLNwv mgcZnoI6cOKVfEVYEEoHvhTeCkoWHVDZOd2EURIQ1eY18JYIZ0M4Z66R8DUCQCsK iKTR3dA6eiM8qiEQw6nWgniFscpf3PnCx/Iu3U/m5mNr743GhM+eXSj7136b209I YfEoQiPxRz8O/W+NBV0CQQDVPxqJlFD34MC9aQN42l3NV1hDsl1+nSkWkXSyhhNR MpobtV1a7IgJGyt5HxBzgNlBNOayICRf0rRjvCdw6aTP -----END RSA PRIVATE KEY-----` ) func main() { ctx := context.Background() m := messenger.NewMessenger(UserId, SessionId, PrivateKey) l := &Listener{m} go m.Run(ctx, l) select {} }你好, 比特幣!
在項(xiàng)目目錄下編譯并執(zhí)行
cd mixin_labs-go-bot go build ./mixin_labs-go-bot
開發(fā)者可以通過消息面板,給機(jī)器人轉(zhuǎn)比特幣,當(dāng)機(jī)器人收到比特幣后,馬上返還給用戶!
事實(shí)上,用戶可以發(fā)送任意的幣種給機(jī)器人,它都能馬上返還!
if msg.Category == "SYSTEM_ACCOUNT_SNAPSHOT" { var transfer messenger.TransferView if err := json.Unmarshal(data, &transfer); err != nil { return err } log.Println("I got a coin: ", transfer.Amount) mixin.Transfer(msg.UserId,transfer.Amount,transfer.AssetId,"",messenger.UuidNewV4().String(), PinCode,PinToken,UserId,SessionId,PrivateKey) return nil // return l.SendPlainText(ctx, msg.ConversationId, msg.UserId, string(data)) }
調(diào)用SDK的 mixin.Transfer 將幣返還用戶!
高級(jí)用法 APP_BUTTON_GROUP在一些應(yīng)用場(chǎng)景,比如:有一個(gè)交易所想提供換幣服務(wù),將比特幣換成以太坊,EOS,比特幣現(xiàn)金等,
你想顯示給用戶一組按鈕,它們分別代表不同的幣與不同的數(shù)量,APP_BUTTON_GROUP可以幫你做到這一點(diǎn).
payLinkEOS := "https://mixin.one/pay?recipient=" + msg.UserId + "&asset=" + "6cfe566e-4aad-470b-8c9a-2fd35b49c68d" + "&amount=" + "0.1" + "&trace=" + messenger.UuidNewV4().String() + "&memo=" payLinkBTC := "https://mixin.one/pay?recipient=" + msg.UserId + "&asset=" + "c6d0c728-2624-429b-8e0d-d9d19b6592fa" + "&amount=" + "0.001" + "&trace=" + messenger.UuidNewV4().String() + "&memo=" log.Println(payLinkBTC) BtnEOS := messenger.Button{Label: "Pay EOS 0.1", Color: "#0080FF", Action: payLinkEOS} BtnBTC := messenger.Button{Label: "Pay BTC 0.001", Color: "#00FF80", Action: payLinkBTC} if err := l.SendAppButtons(ctx, msg.ConversationId, msg.UserId, BtnEOS, BtnBTC); err != nil { return err }
這里演示給用戶BTC與EOS兩種,你還可以增加更多的按鈕.
APP_CARD如果你覺得一組按鈕太單調(diào)了,可以試一下APP_CARD,它提供一個(gè)圖標(biāo)的鏈接
card := messenger.AppCard{Title: "CNB", Description: "Chui Niu Bi", Action: "http://www.google.cn", IconUrl: "https://images.mixin.one/0sQY63dDMkWTURkJVjowWY6Le4ICjAFuu3ANVyZA4uI3UdkbuOT5fjJUT82ArNYmZvVcxDXyNjxoOv0TAYbQTNKS=s128"} if err := l.SendAppCard(ctx, msg.ConversationId, msg.UserId, card); err != nil { return err }
Full source code
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/24595.html
摘要:帳號(hào)之間的比特幣支付通過,我們可以先轉(zhuǎn)比特幣給機(jī)器人,然后讓機(jī)器人轉(zhuǎn)幣給新用戶。下面的代碼,可以讀取比特幣錢包余額讀取的余額,來(lái)確認(rèn)比特幣是不是轉(zhuǎn)成功了注意是新用戶的。 showImg(https://github.com/wenewzhang/mixin_labs-go-bot/raw/master/Bitcoin_go.jpg);我們已經(jīng)創(chuàng)建過一個(gè)回復(fù)消息的機(jī)器人和一個(gè)能自動(dòng)支付比...
摘要:比特幣的到帳時(shí)間是個(gè)區(qū)塊的高度,約分鐘。請(qǐng)注意,比特幣與的地址是一樣的。 showImg(https://segmentfault.com/img/remote/1460000018378805?w=1200&h=659); 方案一: 通過ExinCore API進(jìn)行幣幣交易 Exincore 提供了基于Mixin Network的幣幣交易API. 你可以支付USDT給ExinCore...
摘要:本文是在一塊聽聽上的語(yǔ)音直播的文字精簡(jiǎn)版。主網(wǎng)上線的細(xì)節(jié)主網(wǎng)在北京時(shí)間年月日早上點(diǎn)正式完成了上線。目前主網(wǎng)上線工作已經(jīng)完成,正在把測(cè)試網(wǎng)上的資產(chǎn)遷移到主網(wǎng)上。主網(wǎng)上線意味著什么真的是一個(gè)去中心化的區(qū)塊鏈項(xiàng)目了。主網(wǎng)上線對(duì)來(lái)說(shuō)只是一個(gè)起點(diǎn)。 本文是在一塊聽聽上的語(yǔ)音直播的文字精簡(jiǎn)版。 Mixin Network的成績(jī),主網(wǎng)和展望 大家好,我是Mixin Network 的李林。非常高興能...
摘要:比特幣白皮書都發(fā)布了年,這一種資產(chǎn)保護(hù)模式一直延續(xù)到現(xiàn)在。如果考慮到一個(gè)人除了比特幣以外如果還擁有其他數(shù)字資產(chǎn),一個(gè)資產(chǎn)一個(gè)私鑰,那么私鑰的管理難度就更大了。以用戶在網(wǎng)絡(luò)存儲(chǔ)比特幣為例。用戶存入的比特幣只有經(jīng)過節(jié)點(diǎn)批準(zhǔn)才能提走。 **Mixin開發(fā)者大賽正在進(jìn)行中,javascript, python, ruby, go程序員都可以來(lái)贏30萬(wàn)大獎(jiǎng)。 大賽地址活動(dòng)地址 mixin.one...
閱讀 3297·2021-11-16 11:45
閱讀 2653·2021-09-22 15:23
閱讀 563·2021-07-30 14:58
閱讀 459·2019-08-30 15:54
閱讀 2234·2019-08-29 16:19
閱讀 3015·2019-08-29 12:45
閱讀 934·2019-08-23 17:57
閱讀 1788·2019-08-23 17:54