Mixin NetworkベースのPHPビットコイン開発チュートリアルの1つ:ロボットの作成
15217 ワード
英語の原文
Mixin Networkは無料の極速のエンドツーエンド暗号化デジタル通貨取引システムである.この章では、チュートリアルに従ってMixin Messengerにbotを作成してユーザーメッセージを受信し、ロボットにビットコインを転送する方法や、ロボットにビットコインを転送する方法を学ぶことができます.
Mixin networkリソースの概要
カリキュラムの概要メッセージを受け取るロボット を作成する.ロボットはビットコインを受け取り、直ちにユーザー に返却する. Mixin Network APIから新しいアカウントを作成する方法 メッセージを受信するロボットを作成
このチュートリアルでは、PHPでロボットアプリを作成し、メッセージを受け入れる方法を学びます.
PHP環境設置:
このチュートリアルのプログラムはPHP 7に基づいて開発されているので、まずPHP 7をインストールする必要があります.2/PHP7.3とcomposer、そのうち、composerはPHPのパッケージ管理システムです!
on macOS
php 7.1以降のphpバージョンをインストールした場合はbrew unlinkを実行します[email protected]これらのリンクを削除してからbrew linkを実行します[email protected] 7.3をphpにリンクする.
その後、あなたのシステムの実際の状況に基づいてphp-vが成功するかどうかを見て、もしだめならば、デフォルトのPATH設定を保存します.bash_profile.
on Ubuntu
最新のComposerはここでComposerはPHPとcomposerが$PATHに含まれているディレクトリにインストールされていることを確認してください.php-vまたはcomposer-Vを直接実行すればチェックできます.プロンプトが次のようにあれば、インストールが正しいことを示します.
command not foundのプロンプトが表示され、bashが$PATHでphpを見つけられなかったことを示す場合は、以上のインストール手順を繰り返してください.
あなたのプロジェクトを作成
作業ドキュメントにディレクトリを作成し、mixin_などの名前を付けます.labs-php-bot
新しく作成したプロジェクトディレクトリの下に移動し、composer initを実行し、プロンプトに従ってcomposerを完了します.jsonの作成、
このチュートリアルでは、mixin-sdk-phpとRatchet pawl、mixin-sdk-phpはMixin Network PHP SDK、Ratchet pawlはWebSocketクライアントを参照します.開くjson、requireに2行の参照を追加します.
保存するjson後、composer installを実行してダウンロードします.
ダウンロードが完了すると、ディレクトリの下にvendorのサブディレクトリが表示されます.
gitクローンのソースコードであれば、composer installを直接実行して依存パッケージをダウンロードします.
最初のロボットAPPの作成
次のヒントを押してmixin.one APPtutorialを作成します.
対応するパラメータの生成
これらの生成パラメータはconfigに使用する.php中
プロジェクトディレクトリの下にconfigを作成する.php、生成したパラメータを、あなたのに置き換えます!
config.php
置換するパラメータには、mixin_が含まれます.id, client_id, client_secret, and the pin, pin token, session_id, private key.
クラシックなハローワールド
プロジェクトディレクトリの下にappを作成します.phpファイル、次のコードをコピーします.
保存し、端末でappを実行する.php
すべてが正常であれば、次のようにヒントを与えます.
携帯電話にMixin Messengerをインストールし、マシンを友達に追加します(例えば、このロボットは700101639です)、メッセージを送信します.効果は以下の通りです.
ソースコードの解釈
WebSocketはTCPベースのフルデュプレクス通信方式であり,通信速度を維持するためにloopサイクルを確立する必要がある.
ロボットAPPはMixin Messengerサーバーを通じてユーザーからのメッセージを受信し、サーバーに接続し、Tokenがユーザーの身分を検証する必要がある.詳細は以下のリンクを参照することができる:Token認証、サーバーメッセージの受信
mixin-sdk-phpはトークンTokenの生成(getToken)を実現し、呼び出しコードは以下の通りである.
サーバに接続し、プロトコルのタイプとTokenに注意します.
サーバに「LIST_PENDING_MESSAGES」を送信ことにより、サーバは受信メッセージをロボットAPPに送信する.
リスニングonMessageを追加してメッセージを受信し、分析します.
Mixin Messengerがサポートするメッセージのタイプは多く、具体的には次のリンクで参照できます:WebSocketメッセージのタイプ.
メッセージが受信されるたびに、メッセージ番号(message_id)でサーバーに「既読」のメッセージを返信する必要があります.ロボットが再ログインした後、サーバーが処理したメッセージを再送信しないようにします.
完了
今、ロボットアプリが稼働していますが、ロボットをどのように改造するつもりですか?
完全なコードはこちらです
次のレッスンではロボットが暗号化された通貨を受信して処理します
Mixin Networkは無料の極速のエンドツーエンド暗号化デジタル通貨取引システムである.この章では、チュートリアルに従ってMixin Messengerにbotを作成してユーザーメッセージを受信し、ロボットにビットコインを転送する方法や、ロボットにビットコインを転送する方法を学ぶことができます.
Mixin networkリソースの概要
カリキュラムの概要
このチュートリアルでは、PHPでロボットアプリを作成し、メッセージを受け入れる方法を学びます.
PHP環境設置:
このチュートリアルのプログラムはPHP 7に基づいて開発されているので、まずPHP 7をインストールする必要があります.2/PHP7.3とcomposer、そのうち、composerはPHPのパッケージ管理システムです!
on macOS
brew update
brew install [email protected]
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
// PHP /usr/local/opt/[email protected]/bin , :composer
php composer-setup.php --install-dir=/usr/local/opt/[email protected]/bin --filename=composer
php -r "unlink('composer-setup.php');"
php 7.1以降のphpバージョンをインストールした場合はbrew unlinkを実行します[email protected]これらのリンクを削除してからbrew linkを実行します[email protected] 7.3をphpにリンクする.
wenewzha:mixin_labs-php-bot wenewzhang$ brew unlink [email protected]
Unlinking /usr/local/Cellar/php/7.1.23... 24 symlinks removed
wenewzha:mixin_labs-php-bot wenewzhang$ brew link [email protected]
Warning: [email protected] is keg-only and must be linked with --force
If you need to have this software first in your PATH instead consider running:
echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/[email protected]/sbin:$PATH"' >> ~/.bash_profile
その後、あなたのシステムの実際の状況に基づいてphp-vが成功するかどうかを見て、もしだめならば、デフォルトのPATH設定を保存します.bash_profile.
echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/[email protected]/sbin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
on Ubuntu
apt update
apt upgrade
//install php 7.2
apt-get install software-properties-common python-software-properties
add-apt-repository -y ppa:ondrej/php
apt-get update
apt-get install php7.2 php7.2-cli php7.2-common
//install composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
// PHP /usr/local/opt/[email protected]/bin , :composer
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"
最新のComposerはここでComposerはPHPとcomposerが$PATHに含まれているディレクトリにインストールされていることを確認してください.php-vまたはcomposer-Vを直接実行すればチェックできます.プロンプトが次のようにあれば、インストールが正しいことを示します.
wenewzha:minecraft wenewzhang$ php -v
PHP 7.2.13 (cli) (built: Dec 7 2018 10:41:23) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.13, Copyright (c) 1999-2018, by Zend Technologies
wenewzha:minecraft wenewzhang$ composer -V
Composer version 1.8.0 2018-12-03 10:31:16
command not foundのプロンプトが表示され、bashが$PATHでphpを見つけられなかったことを示す場合は、以上のインストール手順を繰り返してください.
wenewzha:mixin_network-nodejs-bot2 wenewzhang$ php -v
-bash: php: command not found
あなたのプロジェクトを作成
作業ドキュメントにディレクトリを作成し、mixin_などの名前を付けます.labs-php-bot
mkdir mixin_labs-php-bot
cd mixin_labs-php-bot
新しく作成したプロジェクトディレクトリの下に移動し、composer initを実行し、プロンプトに従ってcomposerを完了します.jsonの作成、
root@iZj6cbmqen2lqp7l48nfgkZ:~/mixin_labs-php-bot# composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (/) [user/mixin_labs-php-bot]:
Description []: PHP 7 bot for Mixin Messenger
Author [, n to skip]: JimmyZhang
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []:
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
{
"name": "user/mixin_labs-php-bot",
"description": "PHP 7 bot for Mixin Messenger",
"authors": [
{
"name": "JimmyZhang",
"email": "[email protected]"
}
],
"require": {}
}
Do you confirm generation [yes]? yes
このチュートリアルでは、mixin-sdk-phpとRatchet pawl、mixin-sdk-phpはMixin Network PHP SDK、Ratchet pawlはWebSocketクライアントを参照します.開くjson、requireに2行の参照を追加します.
"require": {
"exinone/mixin-sdk-php": "^1.1",
"ratchet/pawl": "^0.3.3",
},
保存するjson後、composer installを実行してダウンロードします.
composer install
ダウンロードが完了すると、ディレクトリの下にvendorのサブディレクトリが表示されます.
root@iZj6cbmqen2lqp7l48nfgkZ:~/mixin_labs-php-bot# ls
composer.json composer.lock vendor
gitクローンのソースコードであれば、composer installを直接実行して依存パッケージをダウンロードします.
最初のロボットAPPの作成
次のヒントを押してmixin.one APPtutorialを作成します.
対応するパラメータの生成
これらの生成パラメータはconfigに使用する.php中
プロジェクトディレクトリの下にconfigを作成する.php、生成したパラメータを、あなたのに置き換えます!
config.php
return [
'mixin_id' => '7000101716',
'client_id' => 'a1ce2967-a534-417d-bf12-c86571e4eefa',
'client_secret' => '7339866727d24eeec1c4ebb6c634fd25a7b9057ee6d5939cca9b6b9fc15f4d1f',
'pin' => '512772',
'pin_token' => 'abRdNq6soRALRG434IgR7WS/qP7LOcpfviqSfWfABdIKyZGLnWXFMrVCHpChIkBRGRAcsUguni0OoNsShddPVL3qoD5fxbF5dRUiRv14urH1Pmdl6zIZdCH159QMr5wLmmSHSGu2AihNkUHUo3bAJsrvOW0nke5y6R5YE/pNNfo=',
'session_id' => '51faabbf-48ff-4df2-898d-e9b318afae35',
'private_key' => <<
置換するパラメータには、mixin_が含まれます.id, client_id, client_secret, and the pin, pin token, session_id, private key.
クラシックなハローワールド
プロジェクトディレクトリの下にappを作成します.phpファイル、次のコードをコピーします.
15
]);
$connector = new \Ratchet\Client\Connector($loop,$reactConnector);
class callTraitClass {
use MixinSDKTrait;
public $config;
public function __construct()
{
$config = require(__DIR__.'/config.php');
$this->config = $config;
}
}
$callTrait = new callTraitClass();
$Token = $callTrait->getToken('GET', '/', '');
// $connector('ws://127.0.0.1:9000', ['protocol' => 'Mixin-Blaze-1'], ['Origin' => 'http://localhost',
$connector('wss://blaze.mixin.one', ['protocol' => 'Mixin-Blaze-1'],[
'Authorization' => 'Bearer '.$Token
])
->then(function(Ratchet\Client\WebSocket $conn) {
$conn->on('message', function(\Ratchet\RFC6455\Messaging\MessageInterface $msg) use ($conn) {
$jsMsg = json_decode(gzdecode($msg));
print_r($jsMsg);
if ($jsMsg->action === 'CREATE_MESSAGE' and property_exists($jsMsg,'data')) {
echo "
Need reply server a receipt!
";
$RspMsg = generateReceipt($jsMsg->data->message_id);
$msg = new Frame(gzencode(json_encode($RspMsg)),true,Frame::OP_BINARY);
$conn->send($msg);
if ($jsMsg->data->category === 'PLAIN_TEXT') {
$msgData = sendPlainText($jsMsg->data->conversation_id,
base64_decode($jsMsg->data->data));
$msg = new Frame(gzencode(json_encode($msgData)),true,Frame::OP_BINARY);
$conn->send($msg);
} //end of PLAIN_TEXT
} //end of CREATE_MESSAGE
});
$conn->on('close', function($code = null, $reason = null) {
echo "Connection closed ({$code} - {$reason})
";
});
/* start listen for the incoming message */
$message = [
'id' => Uuid::uuid4()->toString(),
'action' => 'LIST_PENDING_MESSAGES',
];
print_r(json_encode($message));
$msg = new Frame(gzencode(json_encode($message)),true,Frame::OP_BINARY);
$conn->send($msg);
// $conn->send(gzencode($msg,1,FORCE_DEFLATE));
}, function(\Exception $e) use ($loop) {
echo "Could not connect: {$e->getMessage()}
";
$loop->stop();
});
$loop->run();
function sendPlainText($conversation_id,$msgContent):Array {
$msgParams = [
'conversation_id' => $conversation_id,
'category' => 'PLAIN_TEXT',
'status' => 'SENT',
'message_id' => Uuid::uuid4()->toString(),
'data' => base64_encode($msgContent),//base64_encode("hello!"),
];
$msgPayButton = [
'id' => Uuid::uuid4()->toString(),
'action' => 'CREATE_MESSAGE',
'params' => $msgParams,
];
return $msgPayButton;
}
function generateReceipt($msgID):Array {
$IncomingMsg = ["message_id" => $msgID, "status" => "READ"];
$RspMsg = ["id" => Uuid::uuid4()->toString(), "action" => "ACKNOWLEDGE_MESSAGE_RECEIPT",
"params" => $IncomingMsg];
return $RspMsg;
}
保存し、端末でappを実行する.php
php app.php
すべてが正常であれば、次のようにヒントを与えます.
wenewzha:mixin_labs-php-bot wenewzhang$ php app.php
a1ce2967-a534-417d-bf12-c86571e4eefa{"id":"4454b6c5-4a89-440c-bd22-7a79cf4954ca","action":"LIST_PENDING_MESSAGES"}stdClass Object
(
[id] => 4454b6c5-4a89-440c-bd22-7a79cf4954ca
[action] => LIST_PENDING_MESSAGES
)
携帯電話にMixin Messengerをインストールし、マシンを友達に追加します(例えば、このロボットは700101639です)、メッセージを送信します.効果は以下の通りです.
ソースコードの解釈
WebSocketはTCPベースのフルデュプレクス通信方式であり,通信速度を維持するためにloopサイクルを確立する必要がある.
$loop = \React\EventLoop\Factory::create();
$reactConnector = new \React\Socket\Connector($loop, [
'timeout' => 15
]);
$connector = new \Ratchet\Client\Connector($loop,$reactConnector);
ロボットAPPはMixin Messengerサーバーを通じてユーザーからのメッセージを受信し、サーバーに接続し、Tokenがユーザーの身分を検証する必要がある.詳細は以下のリンクを参照することができる:Token認証、サーバーメッセージの受信
mixin-sdk-phpはトークンTokenの生成(getToken)を実現し、呼び出しコードは以下の通りである.
class callTraitClass {
use MixinSDKTrait;
public $config;
public function __construct()
{
$config = require(__DIR__.'/config.php');
$this->config = $config;
}
}
$callTrait = new callTraitClass();
$Token = $callTrait->getToken('GET', '/', '');
サーバに接続し、プロトコルのタイプとTokenに注意します.
$connector('wss://blaze.mixin.one', ['protocol' => 'Mixin-Blaze-1'],[
'Authorization' => 'Bearer '.$Token
])
サーバに「LIST_PENDING_MESSAGES」を送信ことにより、サーバは受信メッセージをロボットAPPに送信する.
/* start listen for the incoming message */
$message = [
'id' => Uuid::uuid4()->toString(),
'action' => 'LIST_PENDING_MESSAGES',
];
print_r(json_encode($message));
$msg = new Frame(gzencode(json_encode($message)),true,Frame::OP_BINARY);
$conn->send($msg);
リスニングonMessageを追加してメッセージを受信し、分析します.
->then(function(Ratchet\Client\WebSocket $conn) {
$conn->on('message', function(\Ratchet\RFC6455\Messaging\MessageInterface $msg) use ($conn) {
$jsMsg = json_decode(gzdecode($msg));
print_r($jsMsg);
if ($jsMsg->action === 'CREATE_MESSAGE' and property_exists($jsMsg,'data')) {
echo "
Need reply server a receipt!
";
$RspMsg = generateReceipt($jsMsg->data->message_id);
$msg = new Frame(gzencode(json_encode($RspMsg)),true,Frame::OP_BINARY);
$conn->send($msg);
if ($jsMsg->data->category === 'PLAIN_TEXT') {
$msgData = sendPlainText($jsMsg->data->conversation_id,
base64_decode($jsMsg->data->data));
$msg = new Frame(gzencode(json_encode($msgData)),true,Frame::OP_BINARY);
$conn->send($msg);
} //end of PLAIN_TEXT
} //end of CREATE_MESSAGE
});
$conn->on('close', function($code = null, $reason = null) {
echo "Connection closed ({$code} - {$reason})
";
});
Mixin Messengerがサポートするメッセージのタイプは多く、具体的には次のリンクで参照できます:WebSocketメッセージのタイプ.
メッセージが受信されるたびに、メッセージ番号(message_id)でサーバーに「既読」のメッセージを返信する必要があります.ロボットが再ログインした後、サーバーが処理したメッセージを再送信しないようにします.
echo "
Need reply server a receipt!
";
$RspMsg = generateReceipt($jsMsg->data->message_id);
$msg = new Frame(gzencode(json_encode($RspMsg)),true,Frame::OP_BINARY);
$conn->send($msg);
function generateReceipt($msgID):Array {
$IncomingMsg = ["message_id" => $msgID, "status" => "READ"];
$RspMsg = ["id" => Uuid::uuid4()->toString(), "action" => "ACKNOWLEDGE_MESSAGE_RECEIPT",
"params" => $IncomingMsg];
return $RspMsg;
}
完了
今、ロボットアプリが稼働していますが、ロボットをどのように改造するつもりですか?
完全なコードはこちらです
次のレッスンではロボットが暗号化された通貨を受信して処理します