0
点赞
收藏
分享

微信扫一扫

29Django-接入支付宝4(借助第三方SDK完整付款功能)

使用第三方sdk生成支付url:

1把alipay的appid配置到setting里&&把支付成功后的跳转页面页配置到setting里

#注意正式环境应改成你的域名
#阿里支付appid
ALIPAY_APPID = '202100312345678'
#阿里支付后的跳转
ALIPAY_RETURN_URL = 'http://127.0.0.1:8000/payment/result'
#接收回调结果的url
ALIPAY_NOTIFY_URL = 'http://127.0.0.1:8000/payment/result'

2在视图中引入Alipay

from alipay import

3自定义一个支付类,然后让需要支付的类继承我们自定义的这个支付类:

class MyAliPay(View):
pass


class OrderView(MyAliPay):
def get(self,request):
return render(request,'alipay.html')

4初始化一个alipay的对象:

class MyAliPay(View):
def __init__(self,**kwargs):
super().__init__(**kwargs)
#初始化一个alipay的对象
self.alipay = AliPay(
# 正式环境的appid
appid=settings.ALIPAY_APPID,
#你的私钥
app_private_key_string=app_private_key_string,
#阿里的公钥
alipay_public_key_string=alipay_public_key_string,
#回调地址,最后再设置
app_notify_url=None,
#指明整个过程使用的签名算法
sign_type="RSA2",
#沙箱环境调试需要设为True,默认是False(请求转发)
debug=False
)

5定义一个获取支付地址的方法:

#定义一个获取地址的方法(订单id和订单价格需要我们告诉支付宝)
def get_trade_url(self,order_id,amount):
#生成查询字符串
order_string = self.alipay.api_alipay_trade_page_pay(
#标题
subject=order_id,
#自己网站里的订单号
out_trade_no=order_id,
#当前订单的总价
total_amount=amount,
#支付完毕后你希望让支付宝跳转到的页面
return_url=settings.ALIPAY_RETURN_URL,
notify_url=settings.ALIPAY_NOTIFY_URL
)
#支付地址需要用到网关+?再加上一组查询字符串就可以了
return "https://openapi.alipay.com/gateway.do?"

6在post视图中创建订单号和支付url,然后return给支付宝:

class OrderView(MyAliPay):
def get(self,request):
return render(request,'alipay.html')
def post(self,request):
#返回支付地址
#生成订单号
order_id = '%slinuxTang'%(int(time.time()))
#给支付url传值
pay_url = self.get_trade_url(order_id,0.1)
return JsonResponse({'pay_url':pay_url})

7浏览器支付测试:

http://127.0.0.1:8000/payment/url

8附完整视图源码:

from django.http import JsonResponse
from django.shortcuts import render
from django.views import View
from django.conf import settings
from alipay import AliPay
import time
#读取私钥
app_private_key_string = open(settings.ALIPAY_KEY_DIRS + 'app_private_key.pem').read()
#读取阿里公钥
alipay_public_key_string = open(settings.ALIPAY_KEY_DIRS + 'alipay_public_key.pem').read()

class MyAliPay(View):
def __init__(self,**kwargs):
super().__init__(**kwargs)
#初始化一个alipay的对象
self.alipay = AliPay(
# 正式环境的appid
appid=settings.ALIPAY_APPID,
#你的私钥
app_private_key_string=app_private_key_string,
#阿里的公钥
alipay_public_key_string=alipay_public_key_string,
#回调地址,最后再设置
app_notify_url=None,
#指明整个过程使用的签名算法
sign_type="RSA2",
#沙箱环境调试需要设为True,默认是False(请求转发)
debug=False
)
#定义一个获取地址的方法(订单id和订单价格需要我们告诉支付宝)
def get_trade_url(self,order_id,amount):
#生成查询字符串
order_string = self.alipay.api_alipay_trade_page_pay(
#标题
subject=order_id,
#自己网站里的订单号
out_trade_no=order_id,
#当前订单的总价
total_amount=amount,
#支付完毕后你希望让支付宝跳转到的页面
return_url=settings.ALIPAY_RETURN_URL,
notify_url=settings.ALIPAY_NOTIFY_URL
)
#支付地址需要用到网关+?再加上一组查询字符串就可以了
return "https://openapi.alipay.com/gateway.do?" + order_string


class OrderView(MyAliPay):
def get(self,request):
return render(request,'alipay.html')
def post(self,request):
#返回支付地址
#生成订单号
order_id = '%slinuxTang'%(int(time.time()))
#给支付url传值
pay_url = self.get_trade_url(order_id,0.1)
return JsonResponse({'pay_url':pay_url})

 



举报

相关推荐

0 条评论