[Python]PayPal REST API の使い方

PayPalAPI使い方

PayPal REST APIをこれから使おうとしている方は最後まで読むことでPayPal API の使い方簡単にを把握できます。

PayPal API アクセスキーとシークレットキーの取得方法

アクセスキーシークレット ID を取得するにはまずこちら( https://developer.paypal.com/ )のページから PayPal アカウントでログインしてください。

ダッシュボードのアカウントからサンドボックス(テスト用アカウント)を作成します。

PayPalAPI使い方

アカウント作成時に気をつけることは Business (Merchant Account) を選択して、PayPal Balance を商品が買えるくらいの値段に設定することです。

※ 残高不足を再現したい場合は0と入力しても大丈夫です。

続いてダッシュボードのMy App & Credentials からAPI アプリケーションの作成(Create App)を行います。

PayPalAPIの使い方

登録時の(Sandbox developer account)は先ほど作成したアカウントを選択してください。登録が完了するとクライアントIDとシークレットキーが取得できるようになります。

PayPal API 認証トークン(auth-token)の取得方法

Python で PayPal-Python-SDK を実行するには下記のコードをターミナルで実行し、libssl-dev libffi-devをインストールします。

Linux
apt-get install libssl-dev libffi-dev

Mac
brew install libssl-dev libffi-dev

インストールが終わったら下記のコードにclient_idclient_secret を入力して実行します。これでエラーが返ってこなければトークンが取得できています。

下記のコードではsandboxを使用していますが live に変更することで本番環境(本決済)に切り替えられます。

Python

import paypalrestsdk

# Authentification & Get Token
paypalrestsdk.configure({
    "mode": "sandbox",  # sandbox or live
    'client_id': '***',
    'client_secret': '***'})

PayPal APIを実行して決済の実行とトランザクションの取得

それでは実際にPayPal API を実行してみましょう。実行する方法は簡単です。先ほどのコードの下に続けて実行したいコマンドを追加していくだけです。

下記の例では PayPal 決済を行い、その履歴(決済ID)を最大10件取得し、Find(決済ID)で決済の内容を確認するというプログラムになっています。

※ 初めは履歴の件数が0件なので実行するたびに取得する履歴の数が増えていきます。

Python

import paypalrestsdk

# Authentification & Get Token
paypalrestsdk.configure({
    "mode": "sandbox",  # sandbox or live
    'client_id': '***',
    'client_secret': '***'})


# Make Payment
payment = paypalrestsdk.Payment({
    "intent": "sale",
    "payer": {
        "payment_method": "paypal"},
    "redirect_urls": {
        "return_url": "http://localhost:3000/payment/execute",
        "cancel_url": "http://localhost:3000/"},
    "transactions": [{
        "item_list": {
            "items": [{
                "name": "item",
                "sku": "item",
                "price": "10",
                "currency": "JPY",
                "quantity": 1}]},
        "amount": {
            "total": "10",
            "currency": "JPY"},
        "description": "This is the payment transaction description."}]})

if payment.create():
    print("Payment created successfully")
else:
    print(payment.error)



# Get Payment history.
payment_history = paypalrestsdk.Payment.all({"count": 10})

print("List Payment:{}".format(len(payment_history.payments)))
for payment in payment_history.payments:
    print("  -> Payment[%s]" % (payment.id))

    try:
        # Retrieve the payment object by calling the
        # `find` method
        # on the Payment class by passing Payment ID
        payment = paypalrestsdk.Payment.find(payment.id)
        print("Got Payment Details for Payment[%s]" % (payment.id))
        print(payment)

    except ResourceNotFound as error:
        # It will through ResourceNotFound exception if the payment not found
        print("Payment Not Found")


他にも PayPal API を使って色々なことをしたいという方は PayPal-Python-SDK のsamples の中から目的にあったソースコードをコピーしてきて上記のように実行してみましょう。

最後に

私がPayPa API を使いたかったのは過去のトランザクションを取得したかったからです。しかし、トランザクションを取得できませんでした。

正確にはトランザクションを取得できたのですが、「PayPal APIを使って作成したトランザクションしか取得できない」という謎仕様のためこれまでPayPal APIを使っていなかった私のシステムでは利用できませんでした。
(サイト側をアップデートすれば良いのですがそういうわけにもいかないので今回は見送りました)

きちんとGitHubのドキュメントを読んでいけば今回紹介したように簡単にPayPal APIを試すことができるのですが、いろいろ探し回ってこの記事にまとめた内容に至るまで3日間苦しみました…

同じ苦しみを味わわないために、この記事がこれからPayPal APIを使う人の助けなることを願います。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください