今回は苦戦した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関連は不親切なサイトが多い┐(´д`)┌ヤレヤレ