Google APIでNEM送信用のQRコードを生成するPHP。

2019年06月15日 18時00分 正午の月齢:12.1  月名:十三夜  潮汐:中潮 月齢:12.1[十三夜] 潮汐:中潮
(最終更新日:2019年09月16日)
5年前に投稿 | 暗号資産(仮想通貨) | 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円でございます。

15.96832XEM to NAMEKOKIDITOSYABXYBJ5P2J6HIN7CFAMKFN2R7B

古い記事・新しい記事

古い記事 [2019年06月07日]
新しい記事 [2019年06月17日]

1件のコメント

  1. 日本円をNEM換算して送信するQRコードを生成する。 | 煤式自動連結器からのピンバック | 2019年06月17日 #

    […] 先日、Google APIでNEM送信用のQRコードを生成するしくみを作ってみたのですが、実際の場面では「日本円で設定されている商品をNEMで支払いたい」ということのほうが多い気がします。 […]

ごめんなさい、コメントフォームは閉鎖しています。

Translate »