Python3Django2集成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的都是看中覆盖外币业务的地区,费率则是投资人该考虑的问题了。
李蒨蓉贾永婕,台北贵妇的两种打开方式可能很多人不知道,小S在她的S帮之外,还有一群玩的相当好的朋友,他们有一个带娃小组织,称为金鸡旺旺会。顾名思义就是有鸡年和狗年出身的孩子的明星父母组成的一个小团体。小S是姐妹淘里帮
赫本裙中跟鞋才是夏天的正确打开方式,优雅显高有女人味优雅的女人,总是能够在人群中一眼被发现,而她们身上散发的温柔和浪漫,往往需要服装去衬托出来,其中就离不开赫本裙中跟鞋的组合。女性的衣柜里,所以占据着重要的地位,各种直筒裙半臀裙A字
早上6点!巴黎最新决定引爆争议,球迷吐槽这种炒作方式真让人反感北京时间6月23日早上6点,针对大巴黎的换帅情况,权威媒体ESPN进行了跟踪报道,他们表示巴黎圣日耳曼接近官宣加尔蒂为一线队新任主帅,在球队拥有多名世界级球星的情况下,大巴黎选择让
笔记本应该插着电使用还是用完再充电笔记本连接着电源,一直充电使用是没有危害的,使用的时候连接电源对性能也有好处。但我们需要注意其他因素,例如温度,以防止电池损坏。笔记本电脑电池大多数笔记本电脑使用锂离子电池。与镍基
选秀大会结束后,多名落选秀分别与多支球队达成双向合同在本届选秀大会结束后,多位落选球员与几支NBA球队分别达成了双向合同,除了之前已经报道的之外,其他与球队达成双向合同的球员还有来自旧金山大学的后卫贾马雷布耶(JamareeBouy
近期,12256对于3000元价位的智能手机来说,我们选择的余地还真不少,长续航强性能已成了智能手机的标杆。从刚刚过去的618手机销售战报来看,有这几款手机性能和销量真的不错,它们是以下几款。Re
宏观面情绪施压下,苹果期价或跟随偏弱波动点击上方关注每天分享有意义的财经量化分析点赞留言,分析师在线解答行情复盘期货价格主力10合约本周呈现震荡偏弱波动,收于8714元吨,周度跌幅为0。94。现货价格本周栖霞地区80以上
夜读保持童心,遇见美好保持一颗童心,方能遇见更多美好。李贽童心说中提到夫童心者,绝假纯真,最初一念之本心也。保持童心,让我们保持真诚和坦率。小时候,我们想说什么就说什么,想要什么就表达什么,一行一动,待
洋帅取代李霄鹏!排名下降足协坐不住,新国足将成立,与日本队PK众所周知今年足协对国足并没有比赛以及集训的计划,即便是今年有东亚杯的赛事,足协也不打算让国足去。为了让U23代表队获得充分锻炼,好在亚运会上有好的发挥,此前已经初步决定让U23代表
国际足联批准2022年卡塔尔世界杯可增至26人大名单国际足联日前已经批准了卡塔尔世界杯更大的26人阵容,并在周四决定延长足球运动在疫情大流行期间帮助教练员和球员的宽松规则。国际足联主席团(由国际足联和六个足球联盟的主席组成)在最近的
星光熠熠!首届WTT冠军赛名单公布马龙陈梦领衔,樊振东缺席北京时间6月24日,世界乒联在官方宣布了首届WTT冠军赛参赛名单,作为一项全新的赛事,首届WTT冠军赛可谓众星云集,国乒派出了马龙陈梦等绝对主力领衔出战,不过略感遗憾的是樊振东将会