异步贝宝客户端

aiopaypal的Python项目详细描述


Logo

Software LicenseDownloadsMonthly DownloadsCode style: black

空气瓶

贝宝rest api的异步包装器

设置

$ pip install aiopaypal

依赖关系

  • aiohttp
  • 所有文件
  • pyopenssl

用法

初始值

fromaiopaypalimportPaypalaiopaypal=Paypal(mode='live',client_id='client_id',client_secret='client_secret',)

创建用户订阅

1。创建支付体验(可选)(仅限一次)

payment_experience=awaitaiopaypal.post(url='/v1/payment-experience/web-profiles'json={'name':'Payment profile name','presentation':{'logo_image':'https://brand-logo.png,'brand_name':'Brand Name'},'flow_config':{'landing_page_type':'Billing','user_action':'commit','return_uri_http_method':'GET'},'input_fields':{'no_shipping':1,# No shipping address (digital goods)},'temporary':False})

2。创建帐单计划(在其中指定计划的详细信息)(仅执行一次)

billing_plan=awaitaiopaypal.post(url='/v1/payments/billing-plans',json={"name":'Name of the plan',"description":'Description of the plan',"type":"INFINITE","payment_definitions":[{"name":'Name of the payment,"cycles":"0","frequency":"MONTH","frequency_interval":"1","type":"REGULAR","amount":{"value":str(123),"currency":'usd'},}],"merchant_preferences":{"setup_fee":{"value":str(123),"currency":currency},"auto_bill_amount":"yes",# Default "NO",'return_url':'https://example.com/payment/success-callback','cancel_url':'https://example.com/payment/cancel-callback,"initial_fail_amount_action":"cancel",# Default CONTINUE"max_fail_attempts":"3","auto_bill_amount":"YES",}})

3。创建Webhook以侦听订阅事件(仅执行一次)

hook_profile=awaitaiopaypal.post(url='/v1/notifications/webhooks',json={url='https://example.com/webhook/',event_types=[{'name':'BILLING.SUBSCRIPTION.CANCELLED'},{'name':'BILLING.SUBSCRIPTION.SUSPENDED'},{'name':'BILLING.SUBSCRIPTION.RE-ACTIVATED'},]})

^{str 1}4美元。创建计费协议(将用户绑定到在“2.”创建的计费计划)并执行它:

asyncdefcreate_agreement():returnawaitaiopaypal.post(url='',json={'name':'Agreement name','description':'Agreement Description','start_date':(datetime.datetime.utcnow()+ \
                datetime.timedelta(days=1)).isoformat()[:-7]+'Z'# The start date must be no less than 24 hours after the current date as the agreement can take up to 24 hours to activate.'plan':{'id':billing_plan['id']},'payer':{'payment_method':'paypal','payer_info':{'email':'email@email.email'}}})defget_execute_from_response(response):forlinkinresponse['links']:iflink['rel']=='execute':returnlink['href']

4.1创建协议

@app.route('/create-agreement)asyncdefcreate_agreement():billing_agreement=awaitcreate_agreement()returnmake_user_open(get_execute_from_response(billing_agreement))

4.2成功后激活

# Second step (user callback)@app.route('/success-callback',methods=['GET'])asyncdeffinalize_agreement(request):token=request.args.get('token')user_id=request['session']['user_id']active_agreement=awaitaiopaypal.post('/v1/payments/billing-agreements/{}/agreement-execute'.format(token),extra_headers={'Content-Type':'application/json'})ifactive_agreement['state'].lower()!='active'and \
        active_agreement['state'].lower()!='pending':else:awaitstore_user_agreement_id(user_id,active_agreement['id'])activate_premium_product(user_id)return_to_user('Payment {}'.format(active_agreement['state']))

^{str 1}5美元。听取协议更改:

@app.route('/webhook',methods=['POST','GET'])asyncdefhook(request):try:awaitaiopaypal.verify_from_headers(webhook_id=webhook['id'],# webhook response from "3."event_body=request.body.decode(),headers=headers)exceptPaypalErrorase:logger.exception(e)returnelse:event=request.jsonevent_type=event.get('event_type')agreement_id=event['resource']['id']ifevent_type=='BILLING.SUBSCRIPTION.SUSPENDED':logger.info('Billing agreement {} suspended'.format(agreement_id))awaitsuspend_agreement_by_agreement_id(agreement_id)elifevent_type=='BILLING.SUBSCRIPTION.CANCELLED':logger.info('Billing agreement {} cancelled'.format(agreement_id))awaitcancel_agreement_by_id(agreement_id)elifevent_type=='BILLING.SUBSCRIPTION.RE-ACTIVATED':logger.info('Agreement with ID: {} REACTIVATED'.format(agreement_id))awaitreactivate_agreement_by_id(agreement_id)elifevent_type=='PAYMENT.SALE.PENDING'or \
            event_type=='PAYMENT.ORDER.CREATED'or \
            event_type=='BILLING.SUBSCRIPTION.CREATED':logger.info('Payment/Subscription Created')else:logger.critical('Got unexpected event type {}'.format(event['resource']['id']))finally:# must return 200, else Paypal won't stop sendingreturnresponse.text('OK')

创建用户付款

... Figured it out? Help others and make a pull request :)

联系方式

我目前是一名自由软件开发人员。喜欢我的工作给我找工作?

想全职雇用我吗?给我发邮件@omarryhan@gmail.com

给我买杯咖啡

比特币:3nmywnkr1lzo8gynxfunzvboziacpea31z

以太坊:0x1e1400c311cd813685fe0f6d29e0f91c1da4675ae

比特币现金:qqzn7rsav6hr3zqcp4829s48hvsvjat4zq7j42wkxd

litecoin:mb5m3ce3je4e8nwgcwofjlvgqjdqpyyejp

paypal:https://paypal.me/omarryhan

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
(数组)列出Java中的实现   java检测JDBC连接中尚未提交的开放事务   java H2语句池   java正在使用cardlayout,有一个我无法解决的问题   java Android MTP客户端打开的是整个设备,而不是单个接口   java Querydsl mongodb gradle springboot问题   java XML使用外部xsd验证anytype类型的XML的一部分   java如何使用Hibernate在实体中创建属性表?   intellij理念“BufferedReader”与“java.io.BufferedReader”之比较。这有关系吗?   java解释多线程的输出   Eclipse中的java Android应用程序:编辑未显示在图形布局上的文本   java如何在struts 1中使用显示标记?