2

問題

サーバー側の Python を介してエクスプレス チェックアウト トランザクションを開始しようとしています (Flask を使用しています)。標準のペイパル python SDKを使用しています。

  • ドキュメントのエクスプレス チェックアウト ワークフローに従っています。Express Checkout に関するPayPal のドキュメントは、python の例が含まれていないため、あまり役に立ちません。

  • ドキュメントによると、エクスプレス チェックアウト トランザクションのサーバー側の最初のステップはSetExpressCheckout、PayPal API への呼び出しを発行することです。

残念ながら、python SDK を使用して実際にこれを行う方法がわかりません。

Paypal SDK ソース コードのには、関連するものは何もないようです。


質問

SetExpressCheckoutPaypal エクスプレス チェックアウト ワークフローを開始するために Python で呼び出しを開始するにはどうすればよいですか?

どうもありがとう、

4

2 に答える 2

1

Express Checkout API は、従来の API の一部です。ここで示している SDK は REST API を使用していますが、これは少し異なります。そのため、あまり役に立ちません。

REST API のドキュメントはこちら です。上部の右側で、表示されるサンプル コードの Python を選択できます。そのドキュメントは、その SDK が行っていることにより適合するはずです。

于 2015-03-13T07:15:00.843 に答える
0

REST API は PayPal エクスプレス チェックアウトをサポートしています。SetExpressCheckoutGetExpressCheckoutDetailsおよびDoExpressCheckoutPayment(NVP API)に対応するアクションはcreatefindおよびexecute(REST API) です。

from uuid import uuid4
from paypalrestsdk import Payment, WebProfile
from paypalrestsdk import Api as PaypalAPI

def SetExpressCheckout(client_id, client_secret, data, profile=None, sandbox=False):
    api = PaypalAPI({
            'mode': sandbox and 'sandbox' or 'live',
            'client_id': client_id,
            'client_secret': client_secret})
    if profile:
        profile['name'] = uuid4().hex
        profile['temporary'] = True
        webprofile = WebProfile(profile, api=api)
        if not webprofile.create():
            raise Exception(webprofile.error)
        data['experience_profile_id'] = webprofile.id

    payment = Payment(data, api=api)
    if not payment.create():
        raise Exception(payment.error)
    return payment

payment = SetExpressCheckout(
            client_id='...',
            client_secret='...',
            sandbox=True,
            profile={
                'presentation': {
                    'brand_name': 'My Shop',
                    'logo_image': 'https://www.shop.com/logo.png',
                    'locale_code': 'DE',
                    },
                'input_fields': {
                    'allow_note': False,
                    'no_shipping': 0,
                    'address_override': 0,
                    },
                'flow_config': {
                    'landing_page_type': 'Login',
                    },
                 },
             data={
                 'intent': 'sale',
                 'payer': {
                     'payment_method': 'paypal',
                     'payer_info': {
                         'email': 'buyer@email.com',
                         },
                      },
                  'note_to_payer': 'A note',
                  'redirect_urls': {
                      'return_url': 'https://www.shop.com/success.py',
                      'cancel_url': 'https://www.shop.com/canceled.py',
                      },
                  'transactions': [{
                      'notify_url': 'https://www.shop.com/paypal_notify.py',
                      'item_list': {
                          'items': [{
                              'name': 'Item name',
                              'description': 'Description',
                              'sku': 'SKU',
                              'price': '10.00',
                              'currency': 'EUR',
                              'quantity': 1,
                              }],
                          },
                      'amount': {
                          'total': '10.00',
                          'currency': 'EUR',
                          },
                      'description': 'Description',
                      'payment_options': {
                          'allowed_payment_method': 'INSTANT_FUNDING_SOURCE',
                          },
                      }],
                  },
             )           

for link in payment.links:
    if link.method == 'REDIRECT':
        redirect_url = link.href
        redirect_url += '&useraction=continue' #'&useraction=commit'
        break
于 2016-12-27T20:45:40.370 に答える