TopサービスPaypal > 2011年9月
2011年9月 6日

PayPalでダウンロード販売する方法

September 6,2011 1:55 AM
Tag:[]
Permalink

PayPalのPayPalの「今すぐ購入」や「ショッピングカート」の決済後にダウンロードページなど、任意のページにリダイレクトする方法を紹介します。この方法を使えば、PayPalでダウンロード販売が行えます。

ここではPayPalの公式テストサイト「Sandbox」と「今すぐ購入」ボタンを使って紹介します。本番環境でも一部のURLを書き換えることで利用可能です。

1.ウェブサイトの設定

決済後に任意のページにリダイレクトさせるには、管理画面の「ウェブサイトの設定」を変更します。

「今すぐ購入」ボタンや「ショッピングカート」を提供するユーザーのPayPal管理画面で「個人設定」をクリック。マウスをポイントするとサブメニューが表示されますが無視してください。

PayPal管理画面

「販売ツール」→「ウェブサイトの設定」の右側にある「更新」をクリック。

ウェブサイトの設定

移動先の画面で次の項目を設定します。

  • 自動復帰:オン
  • 復帰URL:リダイレクトするページのURLを設定します。この復帰URLはデフォルトのURLとなり、「今すぐ購入」ボタンや「ショッピングカート」作成時にSTEP3の「顧客がチェックアウト完了すると、このURLにリダイレクトされます」のテキストフィールドにURLを指定すれば、そちらが優先され、「復帰URL」は適用されません。つまり、作成したボタンごとにリダイレクトのページを指定可能です。逆に、「復帰URL」を複数のボタンに対応させるには、「復帰URL」のページで支払いデータを読み込んで、処理を振り分けることで可能になると思います。
  • 支払いデータ転送:オン

個人設定

保存すると「IDトークン」が表示されます。

個人設定(保存後)

この「IDトークン」は一度保存すると「支払いデータ転送」の項目に常に表示されるようです。

個人設定(保存後)

2.文字コードの変更

決済後にリダイレクト先のページに転送する情報の文字コードを、リダイレクト先のページを提供するブログなどの文字コードに合わせます。

「個人設定」をクリック。

PayPal管理画面

ページ下にある「PayPalボタンの言語コード化」をクリック。

PayPalボタンの言語コード化

「詳細オプション」をクリック。

言語のエンコード

今回ウェブサイトで使用している文字エンコーディングは「UTF-8」なので「エンコード方式」から「UTF-8」を選択します。また、「PayPalから送信されたデータと同じエンコード方式を使用しますか」は「いいえ」を選択して、さきほどと同様「UTF-8」を選択し、「保存」をクリック。

詳細オプション

3.リダイレクトページの作成

PayPalでは次のようなサンプルが公開されています(若干修正しています)。他にもPerl/ASP/VBScript/ColdFusion版があります。

PayPal - 即時支払い通知のコードサンプル(要ログイン)
<?php
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-synch';
 
$tx_token = $_GET['tx'];
$auth_token = "IDトークン";
$req .= "&tx=$tx_token&at=$auth_token";
 
// post back to PayPal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);
// If possible, securely post back to paypal using HTTPS
// Your PHP server will need to be SSL enabled
// $fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
 
if (!$fp) {
// HTTP ERROR
} else {
    fputs ($fp, $header . $req);
    // read the body data
    $res = '';
    $headerdone = false;
    while (!feof($fp)) {
        $line = fgets ($fp, 1024);
        if (strcmp($line, "\r\n") == 0) {
            // read the header
            $headerdone = true;
        } else if ($headerdone) {
            // header has been read. now read the contents
            $res .= $line;
        }
    }
 
    // parse the data
    $lines = explode("\n", $res);
    $keyarray = array();
    if (strcmp ($lines[0], "SUCCESS") == 0) {
        for ($i=1; $i<count($lines);$i++){
            list($key,$val) = explode("=", $lines[$i]);
            $keyarray[urldecode($key)] = urldecode($val);
        }
        // check the payment_status is Completed
        // check that txn_id has not been previously processed
        // check that receiver_email is your Primary PayPal email
        // check that payment_amount/payment_currency are correct
        // process payment
        $firstname = $keyarray['first_name'];
        $lastname = $keyarray['last_name'];
        $itemname = $keyarray['item_name'];
        $amount = $keyarray['payment_gross'];
 
        echo ("<p><h3>Thank you for your purchase!</h3></p>");
 
        echo ("<b>Payment Details</b><br>\n");
        echo ("<li>Name: $firstname $lastname</li>\n");
        echo ("<li>Item: $itemname</li>\n");
        echo ("<li>Amount: $amount</li>\n");
        echo ("");
    } else if (strcmp ($lines[0], "FAIL") == 0) {
        // log for manual investigation
    }
}
 
fclose ($fp);
 
?>
 
取引が完了しましたので、購入商品の受領書をメールでお送りしました。<br> <a href='https://www.paypal.com'>www.paypal.com</a> からアカウントにログインし、取引の詳細を見ることができます。<br>

2項で表示されたIDトークンを、赤色で示している$auth_tokenの右辺に設定します(下に表示しているのはデタラメに入力した文字列ですが、設定イメージはこんな感じです)。

$auth_token = "fasf9ajafBsp9jasFa9w873thLgqa09gauSWghjwtqoj3r0ugaOjQ309ufa";

fsockopenは、Sandboxで接続する場合の設定にしています。

$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);

本番環境で利用する場合は、青色の内容に修正してください。

$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);

SSLで接続する場合は、前述のfsockopenの行をコメントアウトして、コメントアウトされている次の行を利用します(行頭の//を削除)。

// $fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

この部分も、本番環境で使用する場合は「www.sandbox.paypal.com」を「www.paypal.com」に直してください。

キモになる「支払いデータ」は次の部分で処理しています。

    if (strcmp ($lines[0], "SUCCESS") == 0) {
        for ($i=1; $i&lt;count($lines);$i++){
            list($key,$val) = explode("=", $lines[$i]);
            $keyarray[urldecode($key)] = urldecode($val);
        }
        // check the payment_status is Completed
        // check that txn_id has not been previously processed
        // check that receiver_email is your Primary PayPal email
        // check that payment_amount/payment_currency are correct
        // process payment
        $firstname = $keyarray['first_name'];
        $lastname = $keyarray['last_name'];
        $itemname = $keyarray['item_name'];
        $amount = $keyarray['payment_gross'];

このサンプルコードを、2項で指定した文字エンコーディングで保存し、「復帰URL」で指定したファイル名で保存・アップロードします。アップロード先と「復帰URL」が一致するようにしてください。

4.購入のテスト

この設定状態で、購入者のテストアカウントを使って「今すぐ購入」をクリック。

「今すぐ購入」ボタン

購入確認画面で「今すぐ支払う」をクリック。

購入確認画面

自動復帰を「オン」に設定していれば次の画面に遷移します。

購入完了画面

サンプルコードの画面に自動的にリダイレクトします。あとはサンプルページにダウンロードのリンクを追加すれば完了です。

リダイレクトページ

PayPalから転送される文字エンコーディングとページのエンコーディングが一致していないと、商品名「ほげほげ」の部分が文字化けします(確認済み)。

ウェブペイメントの「支払いデータ転送」をオフにして購入すると、サンプルでは「取引が完了しました~」の部分しか表示されませんでした。つまり、「支払いデータ」はName/Item/Amountの部分が対応しているということです。

5.その他

これまでの設定で、ダウンロードページまでのリダイレクトは完了です。サンプルページの(X)HTMLマークアップやスタイルをきちんと直せば、ある程度使い物になると思います。

これ以外に、リダイレクトページに遷移する前に購入ユーザーがブラウザを終了させた場合に対応する「即時支払い通知(IPN)」の設定が必要ですが、それは別途エントリーしたいと思います。

2013.12.21
PayPalのレイアウト変更により本文の説明を修正しました。

Comments [0] | Trackbacks [0]
2011年9月 2日

PayPalの公式テスト環境「Sandbox」について(その2:「今すぐ購入」のテスト)

September 2,2011 12:03 AM
Tag:[]
Permalink

PayPalの公式テスト環境「Sandbox」について(その1:アカウント作成)」の続きで、今回はテストアカウントを使って「今すぐ購入」のテストを行ってみました。

1.テストアカウントでのログイン

テストアカウントでのログインは、次の手順になります。

テストアカウントを作成した元のアカウントで「Sandboxのページ」にログイン

Sandboxのページ

「Test Accounts」をクリック。

Sandboxのページ

ログインしたいユーザーを選択して、「Enter Sandbox Test Site」をクリック。

Test Accounts

ログイン用のウィンドウが開くので、同じテストアカウントでログイン。

ログイン用のウィンドウ

ログインできました。

テストアカウント画面

管理画面が日本語になっていない場合は、右側のドロップダウンより「日本語(Japanese)」を選択。日本語にするには、テストアカウント作成時(preconfigured accountで作成)に、「Country」から「Japan」を選択している必要があります。

ドロップダウン

テストアカウント画面は、「PayPal Sandbox」というSandboxの画面の中に本来の「PayPal」という管理画面が表示されています。

テストアカウント画面

2.テストアカウントの切り替え

PayPalのテストアカウント画面右上には、右上にある元のアカウントのログアウトボタンと、その左下にテストアカウント用のログアウトボタンが表示されています。

テストアカウント画面

右上の「ログアウト」をクリックすると、元アカウントのログアウトを行ってしまい、テストアカウントを切り替えるにはSandboxのログインからやり直す必要があります。テストアカウントの切り替えるには、その左下にある(テストアカウントの)「ログアウト」をクリックすると良いでしょう。

3.販売者テストアカウントで「今すぐ購入」ボタンの作成

販売者テストアカウントでログインし、管理画面で「今すぐ購入」ボタンを作ります。セッションが短いので、操作中にログアウトしてしまったら再度ログインしてください。

「決済サービス」をクリック。

管理画面

「PayPal ウェブ ペイメント スタンダード」の「[今すぐ購入]ボタン」をクリック。

決済サービス

ステップ1で次の項目を設定します。

  • ボタンタイプ:今すぐ購入
  • 商品名:任意の商品名
  • 商品ID:任意の商品ID
  • 価格:任意の価格(税抜き)
  • 通貨:JPY
  • 税金:5%

[今すぐ購入]ボタン

ステップ2はとりあえず「PayPalにボタンを保存する」だけチェックします。保存したボタンは、ステップ1の「ボタンタイプの選択」のすぐ下にある「[保存したボタン] に移動」のリンクから選択できます。

[今すぐ購入]ボタン

ステップ3ではキャンセル時の遷移ページのURL、チェックアウト時の移動ページのURLを設定します。ステップ3は設定しなくても大丈夫ですが、動作確認のために設定しています。

[今すぐ購入]ボタン

コードが生成されました。ブログまたは手作業でテストページなどを作り、生成されたコードを貼り付けます。

生成コード

4.購入者テストアカウントで「今すぐ購入」ボタンを使った購入

3項とは別のブラウザで購入ページを表示し、購入ボタンをクリック(同じブラウザでも大丈夫だと思いますが念のため)。

購入ページ

購入ページが表示されました。購入者テストアカウントでログインします。

購入ページ

購入内容を確認して「今すぐ支払う」をクリックします。STEP3でうっかり設定していたメッセージボックス「売り手への特別な指示を追加:」は赤枠部分に表示されています。

購入内容の確認

購入が完了しました。「勇次郎 荒木's Test Storeに戻る」に、STEP3で入力したチェックアウト時のリンクが設定されていました。

購入の完了

5.取引の確認

取引が正常に行われたことを確認します。まず、販売者の「マイアカウント」をクリックすると取引が行われたことが分かります。

販売者の「マイアカウント」

次に、購入者の「マイアカウント」をクリックすると取引が行われたことが分かります。

購入者の「マイアカウント」

メール送信内容を確認するには、Sandboxの「Test Email」をクリック。

Sandbox

販売者へのメールと購入者へのメールが送信されています。リンクをクリックすればメールの内容も確認できます。

Test Email

6.チェックアウト時の移動ページ

チェックアウト時の移動ページ(「勇次郎 荒木's Test Storeに戻る」をクリック)は次のようになります。

Test Email

このページはPayPalで提供されている以下のURLにあるPHPのサンプルを利用しています。このページはPayPalにログインしていないと表示されません。あしからず。

即時支払い通知のコードサンプル

なお今回の動作確認では、このサンプルは正常に動作していません。

管理画面の設定変更とこのサンプルを組み合わせることで、ダウンロードページにリダイレクトできるようです。それについては別途エントリーしたいと思います。

Comments [0] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3