什么是PayPal
PayPal又称为贝宝,是一种外贸支付方式,目前在国际的贸易支付中有着极高的地位,它就好像中国的支付宝,都是第三方支付平台。
PayPal的优势是,其业务网络遍布全球。目前PayPal的庞大网络覆盖了全球200多个国家,可提供20多种语言服务,并接受100多种货币付款和56种货币提现。
- 需要注意的一点是,也是我个人感觉非常好的一个地方,PayPal的支付逻辑,是一个事务性的操作,一旦开始,除非获取到支付成功的返回凭证,否则一致就认为没有成功,支付宝就不是这样,它是支付时生成订单,无论是否付款,订单都已经生成了,这样的话,在付款的一瞬间,啪,网断了,支付宝有可能会出现错误,可能是支付状态未修改啊,或者三方卖家没有收到支付成功请求啊一类的。
- 但是,支付宝也有避免错误的方法,就是对所有唤起收银台交易的状态码
10003
发起轮询,轮询间隔未3秒,在让用户再次支付前,必须通过查询确认当前订单的 状态
注册PayPal和开发者平台
注册成功后,会默认创建两个账号,一个是个人的,一个商户的,如果不想用默认的,可以自己创建

进入应用管理,可以看到,它也给创建了默认的应用

然后获取Client ID和Secret

然后回来修改一下个人账户的余额和密码


开始操作
pip install paypalrestsdk
先安装paypal的sdk
然后新建app,注册好路由和应用,然后view中的代码
import paypalrestsdk
from django.http import HttpResponse
from django.shortcuts import redirect
Client_id = '你的Client_id'
Secret = '你的Secret'
def payment(request):
paypalrestsdk.configure({
"mode": "sandbox", # sandbox代表沙盒
"client_id": Client_id,
"client_secret": Secret,
})
payment = paypalrestsdk.Payment({
"intent": "sale",
"payer": {
"payment_method": "paypal"},
"redirect_urls": {
"return_url": "http://192.168.1.157:8000/palpay/pay/", # 支付成功跳转页面
"cancel_url": "http://192.168.1.157: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("支付失败")
启动项目,网页访问该视图,即可看到这样

点击继续,可以看到,回调的地址传来了三个参数
http://192.168.1.157:8000/palpay/pay/?paymentId=PAYID-L7BRGHA28162157FN083293V&token=EC-1S659222KF8901217&PayerID=QFV2E28KASNQS
支付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)
print(payment)
if payment.execute({"payer_id": payerid}):
print("Payment execute successfully")
return HttpResponse("支付成功")
else:
print(payment.error) # Error Hash
return HttpResponse("支付失败")
然后点击支付即可看到,少了五块钱

然后有些时候需要对交易进行一些核对,也可以通过接口查看交易明细,也就是上面的payment
- Post link: https://www.godhearing.cn/paypal-kua-jing-zhi-fu/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.