异步贝宝客户端

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如何在安卓活动中添加地图?   Android上的java Sqlite:如何创建Sqlite dist db函数,以便在应用程序中使用lat、long进行距离计算   java Netbeans和Hibernate,导入pojo和hbm。xml   在spring引导应用程序中使用@bean的java声明bean   java Apache POI异常   java我可以为不同接口中的不同方法使用相同的名称吗?   java JavaFX如何从其他阶段控制器访问控制器?   java ActivityResultLauncher为空   java这两个通用函数之间有什么区别?   java在AEM 6.2中,自定义注释组件不适用于发布实例,但适用于作者实例   java HTTP 500作为使用Spring控制器对HTTP Post请求的响应   JavaGmailapi在Android上获取消息   如何使用绝对路径从Java运行Python文件?   java NPhard算法