開源,免費的EOS, ETH,XLM收款插件

  • 無需搭建比特幣/以太坊/EOS全節點(每一個都需要幾百G空間)
  • 無手續費,你的程序你做主
  • 所有收到的錢實時自動轉移到開發者個人賬戶,即使被拖庫也沒錢可盜。

GitHub 地址

開發者訪問本地 http 接口,向用戶展示付款方法,用戶付款後程序會訪問本地回調URL

步驟:

1. 創建一個Mixin Messenger賬戶.

訪問 https://mixin.one/messenger 下載對應手機端App。

中國大陸用戶可以訪問 https://a.app.qq.com/o/simple... 下載

2. 激活開發者賬號

登陸 https://developer.mixin.one ,用App掃碼登錄

這個 教程對於新開發者很有用。

Clone, build, run

git clone https://github.com/myrual/mixin-network-snapshot-golang
cd mixin-network-snapshot-golang
  1. 編輯一部分配置信息
const (
    userid      = "3c5fd587-5ac3-4fb6-b294-423ba3473f7d"
    sessionid   = "42848ded-0ffd-45eb-9b46-094d5542ee01"
    private_key = `-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDACTrT4uaB9el9qe0MUOsFrm8kpaDI9PowauMB1Ha25mpfL+5h
MFqISLS5z2P89nAsXBg+KyQ2gAVA6rBwW/ZqOc1PKiJhhLBS80nzo3ayfv7OlzNG
IxMyqD5izCCtPixnqpuTePoPWq4CNZlxop0VYklsWEfU0U0qqMBgmtqYfQIDAQAB
AoGAR8crZed5oTn5fC73m5LjRcxdXqVJ49MtcMuC7jwr41FckRepUkpwjGAgrRMH
nJXAd9Q0e4hEkNppHEqciGLXR1dQfZnaM1Gnv7mD3oSgHaH+4qAMnNOCpvwW4Eu3
yp9b1UGj9SvM3D2BrpA+MGf0E/yEJzpRcT956W6SPYYSegECQQDm4uTK+teoxr1Z
agJZuCta+IhMzpxIWMob+JN/Huf7OnRcIa9JpXngg4tHOUWmZCDQdqeJMpaQc8SQ
44hba015AkEA1OyJswNIhdmvVp5P1zgREVVRK6JloYwmAtj+Qo4pWJ117LqH4w+b
491r4AeLEGh8VrZ4k6Hp+Cm783S2jTAWJQJARbWdlHdV45xVkQiDuyjy1h2RsXb0
EpfUNcvAZLIlImIMvcBh1x+CA7pTs+Zj1BAJJEee37qJYQXDBGfeRJPKKQJAVG+c
x42Ew/eoTZwoIzvLoOkJcFlNHjwaksSER9ZiVQ7URdVOr99vvXQAJG45Wn9k12oy
9LCfvNan/wqIngK0tQJBAL1Wc02seEbMeWyt5jycJEhn6G8F18s9S1v0GXb4U/7/
6Y87P3TmDLcEuCXkrbZQaCX7jVLu0BkDw8To58TWjh0=    
-----END RSA PRIVATE KEY-----`
    ADMIN_MessengerID = ""//this is your mixin messenger id, you can find your id in contact page.
)
  1. 編譯
go build mixin_snap.go
  1. 運行
./mixin_snap
  1. 數據庫

同一目錄下會生成一個test.db 的sqlite3文件。

如何使用

獲取數字資產當前價格信息,因此可以計算客戶應該付多少數字資產

curl -X GET 'http://localhost:8080/assetsprice'

價格結果如下,其中Full Name是該幣種全名,Symbol是在交易所和錢包的縮寫符號,USDPrice是當前資產美元價格,BTCPrice同理。

[
    {"Fullname":"Stellar","Symbol":"XLM","USDPrice":0.10357796,"BTCPrice":0.00000889,"Assetid":"56e63c06-b506-4ec5-885a-4a5ac17b83c1"},
    {"Fullname":"EOS","Symbol":"EOS","USDPrice":5.96024263,"BTCPrice":0.00051165,"Assetid":"6cfe566e-4aad-470b-8c9a-2fd35b49c68d"},
    {"Fullname":"Ether","Symbol":"ETH","USDPrice":294.61322131,"BTCPrice":0.02529107,"Assetid":"43d61dcd-e413-450d-80b8-101d5e903357"}
]

如果訂單價值1美金,那麼根據資產價格可以知道客戶需要 10 XLM, 或者 0.17 EOS。

創建支付請求

用POST方法訪問 localhost:8080/charges,參數如下

POST /charges

Attributes type description
currency String Currency code associated with the amount. Only EOS/XLM/ETH is supported currently
amount Float64 Positive float
customerid String This field is optional and can be used to attach an identifier of your choice to the charge. Must not exceed 64 characters
webhookurl String program will visit localhost+webhook when user pay enough currency before charge is expired
expiredafter uint the webhook will be expired after xx minutes. User can pay to an expired charge , program keep income record and will transfer asset to admin account

舉例: 需要讓客戶 "client1245" 支付 0.001 ETH, 60分鐘內支付完成之後訪問用 POST 訪問 localhost:9090/123。

curl -d '{"currency":"ETH", "amount":0.001, "customerid":"client1245", "webhookurl":":9090/123", "expiredafter":60}' -H "Content-Type: application/json" 127.0.0.1:8080/charges

這條指令返回結果

{
    "Id":3,
    "Currency":"ETH",
    "Amount":0.001,
    "Customerid":"client1245",
    "Webhookurl":":9090/123",
    "Expired_after":60,
    "Paymentmethod":{
        "Name":"ETH",
        "PaymentAddress":"0x130D3e6655f073e33235e567E7A1e1E1f59ddD79",
        "PaymentAccount":"",
        "PaymentMemo":"",
        "Priceinusd":"310.40105841",
        "Priceinbtc":"0.02374051"
        },
    "Receivedamount":0,
    "Paidstatus":0}

客戶需要向以太坊地址 0x130D3e6655f073e33235e567E7A1e1E1f59ddD79 支付0.001 ETH來完成支付。

如果想收EOS

 $ curl -d '{"currency":"EOS", "amount":0.001, "customerid":"client1245", "webhookurl":":9090/123", "expiredafter":5}' -H "Content-Type: application/json" 127.0.0.1:8080/charges
{
    "Id":2,
    "Currency":"EOS",
    "Amount":0.001,
    "Customerid":"client1245",
    "Webhookurl":":9090/123",
    "Expired_after":5,
    "Paymentmethod":{
        "Name":"EOS",
        "PaymentAddress":"",
        "PaymentAccount":"eoswithmixin",
        "PaymentMemo":"a01a148f234ea8be0229a4422d21e7f3",
        "Priceinusd":"4.63264861",
        "Priceinbtc":"0.00040277"
    },
    "Receivedamount":0,
    "Paidstatus":0
}

客戶需要向EOS賬戶 eoswithmixin 支付 0.001 EOS, 並且必須填寫支付備註 a01a148f234ea8be0229a4422d21e7f3。

如果想收XLM

curl -d '{"currency":"XLM", "amount":0.001, "customerid":"client1245", "webhookurl":":9090/123", "expiredafter":5}' -H "Content-Type: application/json" 127.0.0.1:8080/charges
{
    "Id":3,
    "Currency":"XLM",
    "Amount":0.001,
    "Customerid":"client1245",
    "Webhookurl":":9090/123",
    "Expired_after":5,
    "Paymentmethod":{
        "Name":"XLM",
        "PaymentAddress":"",
        "PaymentAccount":"GD77JOIFC622O5HXU446VIKGR5A5HMSTAUKO2FSN5CIVWPHXDBGIAG7Y",
        "PaymentMemo":"45da67ad857c907a",
        "Priceinusd":"0.08866487",
        "Priceinbtc":"0.00000769"
    },
    "Receivedamount":0,
    "Paidstatus":0
}

客戶需要向Stellar賬戶 GD77JOIFC622O5HXU446VIKGR5A5HMSTAUKO2FSN5CIVWPHXDBGIAG7Y 支付 0.001 XLM, 並且必須填寫支付備註 45da67ad857c907a

Payment_method裏面有兩種類型的支付:

  1. 比特幣/以太坊: PaymentAddress 不是空,PaymentAccount 和 PaymentMemo是空。這種情況下,你只需要給用戶展示資產名字 以太坊和PaymentAddress,客戶只需要向以太坊地址付款。在這個例子裏面,向用戶展示資產名稱 ETH,以及收款地址 0x365DA43BC7B22CD4334c3f35eD189C8357D4bEd6,以及你期望的以太坊數量。
  2. EOS/行星 : PaymentAddress 是空, PaymentAccount 和 PaymentMemo 都有內容。這種情況下,你需要給用戶展示資產名字,收款賬戶和收款備註,並且嚴肅的提醒用戶同時填寫收款賬戶和收款備註,客戶如果忘記填寫備註,會導致不能到賬,而且無法退款。

Payment_method的記錄內容裏面有該資產當前的美元價格和比特幣價格,開發者可以根據訂單的美元價格來計算客戶應該支付多少數字貨幣。

{"Priceinusd":"0.10472789","Priceinbtc":"0.00000925"}

支持的貨幣列表

Currency 說明 介紹
EOS EOS.io 主網token -
XLM Stellar 主網token -
BTC 比特幣 -
UDT Tether USD 基於比特幣的USDT,不是ERC20的代幣
XRP 銳波幣 -
LTC 萊特幣 -

檢查收款狀態

訪問 localhost:8080/charges, 帶有參數charge_id

例子

 curl -X GET 'http://localhost:8080/charges?charge_id=3'

如果客戶還沒有支付,結果如下

{
    "Id":3,
    "Currency":"ETH",
    "Amount":0.001,
    "Customerid":"client1245",
    "Webhookurl":":9090/123",
    "Expired_after":60,
    "Paymentmethod":{
        "Name":"ETH",
        "PaymentAddress":"0x130D3e6655f073e33235e567E7A1e1E1f59ddD79",
        "PaymentAccount":"",
        "PaymentMemo":"",
        "Priceinusd":"310.40105841",
        "Priceinbtc":"0.02374051"
        },
    "Receivedamount":0,
    "Paidstatus":0}
}

如果客戶已經支付了,那麼結果如下

{
    "Id":3,
    "Currency":"ETH",
    "Amount":0.001,
    "Customerid":"client1245",
    "Webhookurl":":9090/123",
    "Expired_after":60,
    "Paymentmethod":{
        "Name":"ETH",
        "PaymentAddress":"0x130D3e6655f073e33235e567E7A1e1E1f59ddD79",
        "PaymentAccount":"",
        "PaymentMemo":"",
        "Priceinusd":"309.75108846",
        "Priceinbtc":"0.02369282"
    },
    "Receivedamount":0.002,
    "Paidstatus":2
}

支付狀態 Paidstatus的解釋

解釋
0 還沒有支付
1 支付不足
2 支付完畢
3 支付超過需求

payment_records 有支付信息. 其中一個支付信息如下

回調URL

用戶支付完畢後,程序會訪問本地+webook url

"http://127.0.0.1"+webhookurl

http 方法爲POST,body 參數如下

{
    "Id":3,
    "Currency":"ETH",
    "Amount":0.001,
    "Customerid":"client1245",
    "Webhookurl":":9090/123",
    "Expired_after":60,
    "Paymentmethod":{
        "Name":"ETH",
        "PaymentAddress":"0x130D3e6655f073e33235e567E7A1e1E1f59ddD79",
        "PaymentAccount":"",
        "PaymentMemo":"",
        "Priceinusd":"309.75108846",
        "Priceinbtc":"0.02369282"
    },
    "Receivedamount":0.0021,
    "Paidstatus":2
}

所有資產都屬於開發者自己麼?

  1. 所有資產都會自動被轉移到你指定的賬戶, 免手續費,1秒到賬。
  2. 在該程序重啓,或者意外退出之後,你可以手動發指令要求程序把所有資產都轉移到你指定的賬戶。

例子:

curl -X POST -H "Content-Type: application/json" 127.0.0.1:8080/moneygohome

結果如下

total 20 account will send all balance to admin

支付的確認時間

  1. EOS: 3 分鐘
  2. Stellar: 2 分鐘
  3. Bitcoin/USDT: 60 分鐘
  4. Litecoin/Ethererum/DOGE: 120 分鐘

什麼是確認時間?爲什麼要關心確認時間?

數字貨幣從用戶發起轉賬請求,到收款方確認這筆付款不能回滾需要一點時間,比特幣需要的時間長,其他需要的時間短一點。

支持哪些資產

理論上Mixin Network支持的都可以接受。現在支持
BTC, USDT, BCH, 以太坊和 ERC20, ETC, EOS 以及EOS上發的token, DASH, Litecoin, Doge, Horizen, MGD, NEM, XRP, XLM, 波場和波場上發的TRC10, Zcash.

目前的代碼庫默認支持的資產

現在代碼裏面默認支持的資產是EOS和恆星,因爲他們都可以3分鐘完成支付確認。

想要支持更多的幣,把對應資產的變量放到 default_asset_id_group 裏面就可以.

const (
    BTC_ASSET_ID  = "c6d0c728-2624-429b-8e0d-d9d19b6592fa"
    EOS_ASSET_ID  = "6cfe566e-4aad-470b-8c9a-2fd35b49c68d"
    USDT_ASSET_ID = "815b0b1a-2764-3736-8faa-42d694fa620a"
    ETC_ASSET_ID  = "2204c1ee-0ea2-4add-bb9a-b3719cfff93a"
    XRP_ASSET_ID  = "23dfb5a5-5d7b-48b6-905f-3970e3176e27"
    XEM_ASSET_ID  = "27921032-f73e-434e-955f-43d55672ee31"
    ETH_ASSET_ID  = "43d61dcd-e413-450d-80b8-101d5e903357"
    DASH_ASSET_ID = "6472e7e3-75fd-48b6-b1dc-28d294ee1476"
    DOGE_ASSET_ID = "6770a1e5-6086-44d5-b60f-545f9d9e8ffd"
    LTC_ASSET_ID  = "76c802a2-7c88-447f-a93e-c29c9e5dd9c8"
    SIA_ASSET_ID  = "990c4c29-57e9-48f6-9819-7d986ea44985"
    ZEN_ASSET_ID  = "a2c5d22b-62a2-4c13-b3f0-013290dbac60"
    ZEC_ASSET_ID  = "c996abc9-d94e-4494-b1cf-2a3fd3ac5714"
    BCH_ASSET_ID  = "fd11b6e3-0b87-41f1-a41f-f0e9b49e5bf0"
    XIN_ASSET_ID  = "c94ac88f-4671-3976-b60a-09064f1811e8"
    CNB_ASSET_ID  = "965e5c6e-434c-3fa9-b780-c50f43cd955c"
    XLM_ASSET_ID  = "56e63c06-b506-4ec5-885a-4a5ac17b83c1"
    TRON_ASSET_ID = "25dabac5-056a-48ff-b9f9-f67395dc407c"
    ........
)
.......
.......

    // to support more asset, just add them in the following array
    default_asset_id_group := []string{XLM_ASSET_ID, EOS_ASSET_ID}

下一步的開發任務:

  1. 所有的資產可以自動提取到開發者自己的冷錢包,而不是隻能轉移到Mixin Messenger賬戶。
  2. 可以把收到的資產通過去中心化交易所自動轉換成USDT或者比特幣。
  3. 支持Mixin Messenger用戶付款。
  4. 可以提供資產對應的美元價格 在commit 8a634e23254e4841c2a9c3114b3eb847d46f55fc 中已經完成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章