Python3+Django2集成PayPal(贝宝)跨境支付三方接口以及订单查询和退款业务

简介: 如果您所在的公司涉及外贸或者跨境支付业务,那一定听说过大名鼎鼎的PayPal,总的来说,PayPal在跨国贸易里的优势还是比较大的,作为一种外贸支付方式,目前在国际贸易支付服务中倍受亿万用户追捧,是全球商户和消费者最受欢迎的电子支付方式之一,在跨境交易中有着超过90%的卖家和超过85%的买家认可并正在使用PayPal电子支付业务。当然,PayPal国际业务体量如此惊人,肯定不是毫无原因的。

如果您所在的公司涉及外贸或者跨境支付业务,那一定听说过大名鼎鼎的PayPal,总的来说,PayPal在跨国贸易里的优势还是比较大的,作为一种外贸支付方式,目前在国际贸易支付服务中倍受亿万用户追捧,是全球商户和消费者最受欢迎的电子支付方式之一,在跨境交易中有着超过90%的卖家和超过85%的买家认可并正在使用PayPal电子支付业务。当然,PayPal国际业务体量如此惊人,肯定不是毫无原因的。

PayPal支付的优势就是其业务网络遍布全球。目前PayPal的庞大网络覆盖了全球200多个国家,可提供20多种语言服务,并接受100多种货币付款和56种货币提现。同时,还允许在账户中持有25种货币余额。换句话说,只要付款人拥有一个PayPal账户,他就拥有了在200多个国家进行电子支付购物,并在需要服务的时候享受到母语支持的各种便捷服务。

之前的几篇文章分别介绍了国内的支付宝支付:Python3.7.2+Django2.0.4 美多商城集成最新版支付宝支付接口(2019.04)和微信支付:mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能

本次我们首次尝试用Django2来集成跨境三方支付接口PayPal

首先注册官网 https://www.paypal.com 以及开发者平台:https://developer.paypal.com/developer/accounts/

注册成功后,在沙盒的账号控制页面:https://developer.paypal.com/developer/accounts/

会默认创建两个账号,一个是商户的,另外一个是个人的

我们演示的流程就是以个人账号登录三方网站对商户账号进行支付业务,当然了,如果你不想使用默认账号,也可以点击右边的Create account的蓝色按钮单独创建。

随后进入应用管理页面:https://developer.paypal.com/developer/applications/

这里已经默认创建好了一个支付应用,记录下它的client\_id和client\_secret,一会要用到

随后,我们可以回到账号管理页面修改一下个人账号的支付余额

额度设置最高

如果愿意,也可以修改一下登录密码,因为一会我们会用这个账号进行登录操作,注意这些登录和支付操作全都会在沙盒环境中完成,完全不会影响生产环境的使用

ok,做完了这些,前置任务就搞定了,现在运行命令安装paypal在python端的sdk

pip3 install paypalrestsdk

现在可以在django中新建一个支付视图views.py

import paypalrestsdk  
  
  
  
def payment(request):  
  
    paypalrestsdk.configure({  
  "mode": "sandbox", # sandbox代表沙盒  
  "client_id": "你的client_id,  
  "client_secret": "你的client_secret" })  
  
    payment = paypalrestsdk.Payment({  
        "intent": "sale",  
        "payer": {  
            "payment_method": "paypal"},  
        "redirect_urls": {  
            "return_url": "http://localhost:8000/palpay/pay/",#支付成功跳转页面  
            "cancel_url": "http://localhost:3000/paypal/cancel/"},#取消支付页面  
        "transactions": [{  
            "amount": {  
                "total": "5.00",  
                "currency": "USD"},  
            "description": "这是一个订单测试"}]})  
  
    if payment.create():  
        print("Payment created successfully")  
        for link in payment.links:  
            if link.rel == "approval_url":  
                approval_url = str(link.href)  
                print("Redirect for approval: %s" % (approval_url))  
                return redirect(approval_url)  
    else:  
        print(payment.error)  
        return HttpResponse("支付失败")

这里解释一下重点参数,return\_url是支付成功后回调的页面,paypal会将一个支付者id回传,然后服务端需要验证支付才能真的完成支付,total是付款金额,精确到分,currency是币种,支持多钟类型的货币。

当Django的服务端创建好支付订单后,重定向到paypal的沙盒环境,这时候一定要使用沙盒的个人账号进行登录和支付。

支付完成后,会跳回刚刚传过去的回调页面:http://localhost:8000/palpay/pay/?paymentId=PAYID-L3SYORA3C031930S1733650J&token=EC-9TG269735K620131N&PayerID=ETYYRCDN8C3XJ

这里paypal会传过来三个参数,支付id,token和支付者id

此时,在回调方法里,我们需要通过支付者id进行确认验证支付

def payment_execute(request):  
  
    paymentid = request.Get.get("paymentId") #订单id  
    payerid = request.Get.get("PayerID")  #支付者id  
  
    payment = paypalrestsdk.Payment.find(paymentid)  
  
  
    if payment.execute({"payer_id": payerid}):  
        print("Payment execute successfully")  
        return HttpResponse("支付成功")  
    else:  
        print(payment.error) # Error Hash  
        return HttpResponse("支付失败")

最后,回到管理页面,发现已经少了5美元,说明支付流程已经走完。

这次交易就愉快的结束了,当然了,某些时候我们需要对交易流水进行一些核对,也可以通过接口查看交易明细

#明细  
  
payment = paypalrestsdk.Payment.find("订单号")  
print(payment)

可以看到,通过传入订单id,我们该笔交易的状态,流水id,以及创建日期。

如果用户想要退款的话,可以利用交易明细中的流水号进行退款业务。

#退款  
from paypalrestsdk import Sale  
  
sale = Sale.find("流水号")  
  
# Make Refund API call  
# Set amount only if the refund is partial  
refund = sale.refund({  
    "amount": {  
        "total": "5.00",  
        "currency": "USD"}})  
  
# Check refund status  
if refund.success():  
    print("Refund[%s] Success" % (refund.id))  
else:  
    print("Unable to Refund")  
    print(refund.error)

结语:

总体而言,没有什么特别的难度,整个支付流程相对支付宝来说,更加的紧凑,但是做支付安全是第一要务,就个人体验(仅是个人体验)层面来说,支付宝在安全方面做的还是要比Paypal略强一些,起码在信用卡欺诈和盗刷方面风控做的更好,在风险保障和赔付方面都有提供保险,当然由于金融环境的差异较大,并不是说Paypal的风控做的不好,只是机制不同,在国外,如果持卡人的信用卡被盗刷,一般发卡组织会让商家去承担责任,而国内只能在交易环节设置更多的验证,本质上说是要持卡人承担责任。这也是为什么支付宝的风控看起来更好的原因。

最后就是关于费率问题,Paypal官方给出的费率是每笔交易收取3.9%+$0.3(根据你的交易流水,比例可以优惠,具体下限看接入者的月营业额度),不过这可是美刀,不得不说这个费率是相当的高,但是国内做境外支付的电商,一般还是要接入Paypal作为支付方式。支付宝的费率基本上在1.2%左右,具体的费率也看交易流水,有实力的下限可以做到基本没有,单纯的看费率似乎支付宝更有优势,但是别忘记了,这样对比是不科学的,因为凡是接入Paypal的都是看中覆盖外币业务的地区,费率则是投资人该考虑的问题了。

相关文章
|
2月前
|
存储 缓存 NoSQL
深入理解Django与Redis的集成实践
深入理解Django与Redis的集成实践
81 0
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
175 45
|
1月前
|
安全 Java API
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
阿里云短信服务提供API/SDK和控制台调用方式,支持验证码、通知、推广等短信类型。需先注册阿里云账号并实名认证,然后在短信服务控制台申请资质、签名和模板,并创建AccessKey。最后通过Maven引入依赖,使用工具类发送短信验证码。
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
|
1月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
59 2
|
1月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
44 1
|
2月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
42 4
|
2月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第10天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django以功能全面、文档完善著称,适合快速开发;Flask轻量灵活,易于上手;Pyramid介于两者之间,兼顾灵活性和安全性。选择框架时需考虑项目需求和个人偏好。
39 1
|
2月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第6天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django功能全面,适合快速开发;Flask灵活轻量,易于上手;Pyramid介于两者之间,兼顾灵活性和可扩展性。文章分析了各框架的优缺点,帮助开发者根据项目需求和个人偏好做出合适的选择。
47 4
|
2月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
82 0
|
2月前
|
SQL 前端开发 Python
基于python-django的neo4j人民的名义关系图谱查询系统
基于python-django的neo4j人民的名义关系图谱查询系统
40 0

热门文章

最新文章