CGIにおける、課金システムpay.jpの実装方法「Perl」をまとめてみた

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

ブログ主が運営しているゲームです。

 MobileFight

 ジマさんの囲碁入門