问题
我试图通过服务器端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工作流程?
非常感谢,
答案 0 :(得分:1)
Express Checkout API是经典API的一部分。你在这里展示的SDK使用的是REST API,这有点不同,所以这就是为什么它们对你没什么帮助。
REST API documentation is here,在右上角,您可以选择Python作为您将看到的示例代码。该文档应该更符合SDK为您做的事情。
答案 1 :(得分:0)
REST API支持PayPal Express Checkout。对SetExpressCheckout
,GetExpressCheckoutDetails
和DoExpressCheckoutPayment
(NVP API)的相应操作为create
,find
和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