使用python-paypalrestsdk启动Express Checkout事务

时间:2015-03-13 02:12:03

标签: python paypal paypal-rest-sdk

问题

我试图通过服务器端python启动Express Checkout事务(我使用Flask)。我使用的是标准paypal python SDK

  • 我遵循文档中的Express Checkout工作流程。 PayPal documentation for Express Checkout并不是非常有用,因为它没有包含任何python示例。

  • 根据这些文件,Express Checkout交易的第一个服务器端步骤是对PayPal API发出SetExpressCheckout调用。

不幸的是我不知道如何使用python SDK实现这一点。

paypal SDK源代码中的examples似乎没有任何相关内容。


问题

如何在python中启动SetExpressCheckout调用以启动Paypal Express Checkout工作流程?

非常感谢,

2 个答案:

答案 0 :(得分:1)

Express Checkout API是经典API的一部分。你在这里展示的SDK使用的是REST API,这有点不同,所以这就是为什么它们对你没什么帮助。

REST API documentation is here,在右上角,您可以选择Python作为您将看到的示例代码。该文档应该更符合SDK为您做的事情。

答案 1 :(得分:0)

REST API支持PayPal Express Checkout。对SetExpressCheckoutGetExpressCheckoutDetailsDoExpressCheckoutPayment(NVP API)的相应操作为createfindexecute(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