このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

ペイパル(PayPal)はどうだろう

少額決済の件ですが、トラックバックいただいたkilreyさんのエントリー内で、ペイパル(PayPal)が言及されています。ペイパルにより少額決済ができそうですが、次のような問題があります。

  1. アメリカではポピュラーらしいが、日本での普及はいまひとつ。
  2. 利用者は単にクレジットカードを持っているだけではダメで、ペイパルのアカウントが必要。
  3. したがって、利用者にペイパル・アカウント登録の作業を強いることになる。
  4. 送金なので、決済が即時に完了するわけではない。
  5. フィッシングサイトのネタにされているらしい。

それでも検討する価値はありそうです。

ペイパルの機能を利用するには、アカウントを取得して“ペイパルの世界”に入ることが必要です。ペイパルがやっていることは、この“ペイパルの世界”内での入出金(送金)と、“外の世界”との入出金の管理ということでしょう。僕が理解した範囲で、そのメカニズムを記します。

送金の基本

i, jなどはペイパルアカウントを表します。このi, jなどは内部的なIDだとします。アカウントID i に対してさまざまな値が付随します。iに対応する実在の人物 person(i) はwell-definedにできないので、メールアドレス mail_addr(i) を実在の代理にしているようです。

最も重要な値は、口座の残高 amout(i) です。ペイパル内で借金はできないようなので、amount(i) は非負のスカラー量です。これも内部的な値*1で、具体的な通貨(円やらドルやら)での値が欲しい場合は、value(amout(i), YEN), value(amout(i), US_DOLLAR) のように変換しなくてはなりません。もちろん、value関数は時間に伴って変動します。特定通貨c(列挙定数)による金額値v(たぶん整数)から、内部的な値への変換は internal(v, c) だとします。例えば、internal(-, YEN) は value(-, YEN) の逆関数です。

純化/理想化した話です*2が、ユーザーiがユーザーjに通貨cでvだけ送金すると、次の操作が(アトミックに)されます。


事前条件: amount(i) ≧ internal(v, c)

amount(i) := amount(i) - internal(v, c)
amount(j) := amount(j) + internal(v, c)

ペイパルでは送金手数料がかからないので、iとjの残高を足した総額は保存されます(不変条件ですね :-))。

クレジットカードによる送金

ペイパル内部世界では、どんなに送金がされても残高総量は不変です。そして、アカウント作成直後(初期状態)の残高は0なので、ペイパル内部世界で閉じていると何も起こりません。ペイパル内部世界との入出金の対象となるのは、銀行口座とクレジットカードです。

ユーザーiに対して、実在のクレジットカードのアカウント creditcard_account(i) が割り当てられていると、ペイパル・アカウントとクレジットカード・アカウントのあいだでの入出金が可能となります。

便宜上、ペイパルの残高値とクレジットカードの残高値が同じ基準(内部値)で計られるとして、クレジットカードによる送金は、おおむね次のようになります。


事前条件: amount(creditcard_account(i)) ≧ internal(v, c)

amount(creditcard_account(i)) :=
amount(creditcard_account(i)) - internal(v, c) - α
amount(j) := amount(j) + internal(v, c)

この場合、ユーザーjの残高は外部からの入金により増えているので、ペイパル世界の残高総量は増えています。しかし、クレジットカードを使ってもペイパルへの手数料(クレジットカード会社への手数料αではない)は発生しないようです。

ペイパル口座から外部への引き出し

と、ここで不思議になるのは、ペイパル自身はどうやって収益を上げているかです。親会社eBayに必要な機能提供だけ? と思ったら、ペイパル口座から外部にお金が出ていくときは手数料がかかります。

ユーザーiの銀行口座をbank_account(i)として、v円を引き出すと:


事前条件:amount(i) ≧ internal(v, YEN) + internal(500, YEN)

amount(bank_account(i)) := amount(bank_account(i)) + internal(v, c)
amount(i) := amount(i) - internal(v, c) - internal(500, YEN)

となります。手数料は500円です。

それにしても、「ペイパル口座→銀行口座」の手数料だけ? なんか見落としているのかな。

*1:実際には、利用者の現地通貨なのでしょうか。

*2:ペイパル内部で一律に使える内部金額値は無理な気がします。利用者ごとに実在の通貨で値が保持されているような、、、