Google APIでNEM送信用のQRコードを生成するPHP。
2019年06月15日 18時00分 月齢:12.1[十三夜] 潮汐:中潮
(最終更新日:2019年09月16日)
6年前に投稿 | 暗号資産(仮想通貨) | 1件のコメント
5分ぐらいで読めます。
この記事は情報が古い場合があります。
GoogleのAPIにパラメータをつけて送ると、QRコードを返してくれます。
http://chart.apis.google.com/chart?cht=qr&chs=300x300&chl=hogehoge
cht
…cht=qr(QRコード)chs
…サイズ(幅×高さ)chl
…データchoe
…エンコード(オプション)chld
…エラー訂正(オプション)
さて、NEM Walletの請求用QRコードをのぞいてみると、中身はこんな感じです。
{"v":2,"type":2,"data":{"addr":"NAERYULZN4QCBTFCRADNSNKACBRNS2E5CLSOXXAZ","amount":1000000,"msg":"NEMを送るネ。","name":"susu NEM"}}
"v"
:…バージョン(2で固定)"type"
…区分(2で固定)"addr"
…NEMアドレス"amount"
…入金額(1XEM=1000000)"msg"
…メッセージ"name"
…名前とか説明とか
冒頭のAPIのパラメータにNEM請求用の中身をくっつけると、
http://chart.apis.google.com/chart?cht=qr&chs=300x300&chl={"v":2,"type":2,"data":{"addr":"NAERYULZN4QCBTFCRADNSNKACBRNS2E5CLSOXXAZ","amount":1000000,"msg":"NEMを送るネ。","name":"susu NEM"}}
というふうになります。
このままコピーして、Firefoxのアドレスバーに貼り付けるとQRコードが生成されます。NEM Walletに読ませると、無事送信画面になりましたー。
これでも使えるのですが、PHPに組み込むためにはURLエンコードが必要です。で、ある程度かたちにしたらこんな感じ。フォームからNEMの量やメッセージを変数として送り、請求用データのかたちに入れて、img要素で出力します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>NEM請求用QRコード(NEM to NEM)</title>
</head>
<body>
<div>
<form action = "ntn.php" method = "post">
<table>
<tr><td>NEM : </td><td><input type = "number" name = "amount" step="any" autofocus> XEM</td></tr>
<tr><td>Message : </td><td><input type = "text" name = "message"></td></tr>
</table>
<p><input type = "submit" value ="送信"></p>
</form>
</div>
<?php
//
フォームデータ受け取り
if (empty($_POST['amount']) || ($_POST['amount']) == 0){ //
空っぽや000などのときは入力をうながす
echo '<div>';
echo '<p>NEMの量を入力してネ。</p>';
echo '</div>';
}
else{
if (($_POST['amount'] < 0)){
$amount = $_POST['amount'] * -1;//
マイナスの数値もプラスにしてしまう
}
else{
$amount = round($_POST['amount'],6);//
小数点のまるめ
}
$address = 'NAERYULZN4QCBTFCRADNSNKACBRNS2E5CLSOXXAZ';//
送信先NEMアドレス(自分のアドレスに書き換えてください)
$xamount = $amount * 1000000;//
μXEMに換算
$message = $_POST['message'];
$rawurl = '{"v":2,"type":2,"data":{"addr":"'.$address.'","amount":'.$xamount.',"msg":"'.$message.'","name":"NEMpay"}}';
echo '<div>';
echo '<p>「'.$address.'」あてに'.$amount.'XEMを送信するQRコードです。</p>';
echo '<p><img src="https://chart.apis.google.com/chart?chs=300x300&cht=qr&chld=H&chl=', rawurlencode($rawurl), '" alt="'.$amount.'XEM to '.$address.'" title="'.$amount.'XEM to '.$address.'"></p>';//
エラー訂正レベル・高に設定(chld=H)
echo '</div>';
}
?>
</body>
</html>
いかがでしょうか。エラー訂正レベルは高に設定しているので、約30%の欠損に耐えられるはず。厳しい環境の中でもNEMを送ってもらえます。
ソースだけではピンとこないと思うので、サンプルを用意しました。
これをサイトのサイドバーあたりに実装すれば、金額を自由に変えることができる「投げNEM」コードを表示させたりいろいろできそうです。
もしよければ、1XEMほど送信してみて下さい。100XEMでもいいですヨ(笑)。
NEM投げ銭
NEM WalletからQRコードを読んでね。1口100円でございます。
古い記事・新しい記事
- 古い記事 [2019年06月07日]
- ← ZaifのAPIからAjaxでNEMの価格を定期的に取得するPHP。
- 新しい記事 [2019年06月17日]
- → 日本円をNEM換算して送信するQRコードを生成するPHP。
日本円をNEM換算して送信するQRコードを生成する。 | 煤式自動連結器からのピンバック | 2019年06月17日 #
[…] 先日、Google APIでNEM送信用のQRコードを生成するしくみを作ってみたのですが、実際の場面では「日本円で設定されている商品をNEMで支払いたい」ということのほうが多い気がします。 […]