今回は苦戦したpay.jpの実装方法について書こうと思う。
pay.jpはクレジットカード制の課金システムである。
今回はその一番初歩から簡潔に結論だけを提示する。
ぶっちゃけて言えばformタグからpay.jpに値を受け渡すだけで課金は成功する。
では実際のコードを見ていこう。
↓は何しているかというとサーバーに対してユーザーのクレカ情報の概要を送っている
※管理者が直接クレカ情報を管理するのではなくpay.jpが完全に管理する。
use Net::Payjp; print '<form action="'.★サーバー処理するCGIスクリプト★.'" method="post">'; print '<input type="radio" name="kinngaku" value="10" checked>10円をチャージ<BR>'; print '<BR>'; print '<input type="radio" name="kinngaku" value="20">20円をチャージ<BR>'; print '<BR>'; print '<input type="radio" name="kinngaku" value="30">30円をチャージ<BR>'; print '<BR>'; print '<script type="text/javascript" src="https://checkout.pay.jp/" class="payjp-button" data-key="★API公開鍵★" data-token-name="payjp-token" data-submit-text="カード情報を確定する" data-partial="true"></script>'; print '<BR>'; print '<input type="submit" class="button1" value=" 決定 ">'; print '</form>';
次がこちら↓送られてきたクレカ情報を処理する
my $API_KEY = '★API秘密鍵★'; my $payjp = Net::Payjp->new(api_key => $API_KEY); my $res = $payjp->charge->create( card => "$FORM{'payjp-token'}", amount => $FORM{'kinngaku'}, currency => 'jpy', description => 'test charge', ); if(my $e = $res->error){ ★エラー処理★ } # Retrieve a charge $payjp->id($res->id); # Set id of charge $res = $payjp->charge->retrieve; # or $payjp->charge->retrieve($res->id);
注意点として送られてきた値は$FORMという連想配列に情報を格納しているが(名称任意)
card => “$FORM{‘payjp-token’}”,←はフォーム値を参照しなければならない。
中身は見ていないがセッションIDのようなpay.jp独自のコードが入っていると思われる。
また予めNet::PayjpをCPANなりdefなりyumなりから入れておくこと。
pay.jp関連のコアファイルが入っているのでこれを入れないと動かない。
この単純な結論にたどり着くまでに8時間を要した。
全くもってAPI関連は不親切なサイトが多い┐(´д`)┌ヤレヤレ