ZaifPaymentの導入(モナコイン決済)

Zaif提供の決済方法で
パソコンショップアークさんが
店頭でのモナコイン決済に使用しているといわれるやつ。

zaifpayment_test

画面を出すためにAPIを呼ぶ必要があるのでプログラム知識が必要ということで
かなりとっつきにくい感じを出していますけど
興味がある人が多そうなので書いてみます。

1. ZaifPaymentに登録する
ログイン⇒アカウント⇒Zaif Paymentでメールアドレスを入れて返信を待つ。
返信が来たら使えるようになります。簡単!
登録が行われると取引所の使用が一時的に封印されるので
取引所を継続して利用したい場合は
「EC事業者設定」でチェックを入れる必要あり。

2. APIキーの作成
ログイン⇒アカウント⇒各種サービス⇒開発者向けAPI
APIキーが使用できる機能を制限するための権限設定があるのですが
決済APIのマニュアルを読んでも何の権限を付与していいか書いてない。
決済APIの使用だけなら何の権限もいりませんでした
生成されたKeyとsecretは知られてはいけないので大事に隠しておきます。

3. 画面表示プログラムの作成
「アクセスしたら決済ページが開く」というシンプルな構造を考えます。
呼び出すべきはAPIたった1つ。インボイス作成APIだけ。
インボイス作成APIが成功した際に返ってくるURLに転送すればOK。

サンプルのPHPコードはこんな感じ
※エラー処理などは一切考慮していません

/************************************************************
* 設定部分
************************************************************/

// ZaifPaymentのAPIキー
$apiKey = "(取得したkey)";

// ZaifPaymentのシークレットキー
$secretKey = "(取得したsecret)";

// 販売者名
$merchantName = "(販売者の名称)";

// 使用する通貨の種類 (btc=ビットコイン mona=モナコイン)
$currency = "mona";

// 商品名
$itemName = "テスト";

// 価格(円価格)
$amount = 100;

/************************************************************
* 処理部分
************************************************************/

// インボイスの作成
$nonce = time();
$hashSecret = sha1($secretKey);

$postData = array(
    "key" => $apiKey,
    "sha1secret" => $hashSecret,
    "method" => "createInvoice",
    "nonce" => $nonce++,
    "currency" => $currency,
    "amount" => $amount,
    "merchantName" => $merchantName,
    "itemName" => $itemName
);

$postDataQuery = http_build_query($postData);

$ch = curl_init();
$options = array(
    CURLOPT_URL => (APIのURLは公式ドキュメントを参照のこと),
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $postDataQuery,
);

curl_setopt_array($ch, $options);
$retJson = curl_exec($ch);
curl_close($ch);
$retData = json_decode($retJson);

// APIが返してきたURLへ転送する
$redirectUrl = $retData->return->invoiceUri;
header('Location: ' . $redirectUrl, true , 303);

商品名や価格を外部から引き渡すように改造すれば良さそうです。
サーバに設置して販売者がPCやタブレットなどでアクセスして
購入者に決済画面を提示すれば対応は完了。

円に変換せず仮想通貨でそのまま受け取る方法などもありますので
興味を持たれたらAPIの公式ドキュメントを読むことをお勧めします。