1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 创建订单并生成支付宝支付链接接口

创建订单并生成支付宝支付链接接口

时间:2023-10-12 19:38:26

相关推荐

创建订单并生成支付宝支付链接接口

1.1 goods/urls.py中注册路由

rom django.urls import pathfrom . import viewsurlpatterns = [path('getpayurl/', views.PayUrlView.as_view()),]

1.2 goods/views.py 中写视图函数

from decimal import Decimalfrom rest_framework.permissions import AllowAny, IsAuthenticatedfrom django.shortcuts import renderfrom rest_framework.views import APIViewfrom rest_framework.response import Responsefrom apps.goods.models import *from goods.utils import get_order_id,get_pay_url,alipayfrom apps.course.models import *# Create your views here.class PayUrlView(APIView):permission_classes = (IsAuthenticated,)def post(self,request):#1.获取课程ID,获取购买途径(普通购买,促销购买)获取用户goods_id=request.data.get('goods_id')goods=Goods.objects.get(id=goods_id)user=request.user#2.下订单order_id =get_order_id()if user.vip.vip_type=='1':goods_price=goods.price * Decimal('0.80').quantize(Decimal('0.00'))elif user.vip.vip_type=='2':goods_price=goods.price * Decimal('0.60').quantize(Decimal('0.00'))else:goods_price=goods.pricegoods_price=Decimal(goods_price).quantize(Decimal('0.00'))order=Orders(user=user,goods=goods,order_id=order_id,pay_method=1,status=1,total_amount=goods_price)order.save()print(order.total_amount,type(order.total_amount))#3.根据订单 生成支付链接subject='实验楼订单:%s,价格:%s'%(order.order_id,order.total_amount)pay_url=get_pay_url(order.order_id,order.total_amount,subject)print(pay_url)return Response({"code":1000,"msg":"下单成功","data":pay_url})#订单回调class PayMentView(APIView):permission_classes = (AllowAny,)def post(self,request):# 1. 获取了支付宝返回的数据data=request.dataprint(data)sign=data.pop('sign')order=Orders.objects.get(order_id=data['out_trade_no'])order.trade_no=data['trade_no']order.pay_time=data['timestamp']order.status=2order.save()user=order.usercourse=order.goods.courseUserCourse.objects.create(user=user,course=course)return Response({'code':0,'msg':'购买成功'})

1.3 goods/utils.py中生成随机订单函数和生成支付URL函数

# -*- coding: utf-8 -*-import datetimeimport osimport randomfrom alipay import AliPayfrom syl import settings# 获取文件路径app_private_key_path = os.path.join(settings.BASE_DIR,"apps/goods/keys/app_private_key.txt")alipay_public_key_path = os.path.join(settings.BASE_DIR,"apps/goods/keys/alipay_public_key.txt")with open(app_private_key_path) as f:app_private_key_string = f.read()with open(alipay_public_key_path) as f:alipay_public_key_string = f.read()# 创建支付宝支付对象alipay = AliPay(appid=settings.ALIPAY_APPID,app_notify_url=None, # 默认回调urlapp_private_key_string=app_private_key_string,alipay_public_key_string=alipay_public_key_string,# app_private_key_path=app_private_key_path,# alipay_public_key_path=alipay_public_key_path,sign_type="RSA2",debug=settings.ALIPAY_DEBUG)def get_pay_url(out_trade_no, total_amount, subject):# 生成登录支付宝连接order_string = alipay.api_alipay_trade_page_pay(out_trade_no=out_trade_no,total_amount=str(total_amount),subject=subject,return_url=settings.ALIPAY_RETURN_URL,)# 响应登录支付宝连接# 真实环境电脑网站支付网关:/gateway.do? + order_string# 沙箱环境电脑网站支付网关:/gateway.do? + order_stringalipay_url = settings.ALIPAY_URL + "?" + order_stringprint(alipay_url)return alipay_urldef get_order_id():"""SYL20241212121200005/24生成订单号: 格式: SYL + 年月日时分秒 + 5位随机数 :return:"""d = datetime.datetime.now()base = 'SYL'time_str = '%04d%02d%02d%02d%02d%02d' % (d.year, d.month, d.day, d.hour, d.minute, d.second)rand_num = str(random.randint(10000, 99999))return base + time_str + rand_num

1.4 syl/setings.py中配置支付相关参数

# 支付宝配置ALIPAY_APPID = '102900775365' #沙箱环境中alipay应用IDALIPAY_DEBUG = TrueALIPAY_URL = '/gateway.do' # alipay沙箱环 境支付宝网管ALIPAY_RETURN_URL = 'http://127.0.0.1:8888/payment/callback/' # 支付完成后支 付宝回调我们应用的地址

2.测试

请求地址

http://192.168.56.100:8888/goods/getpayurl/

携带参数

{

“goods_id”:1

}

返回数据

{

“code”:0,

“msg”:“下单成功”,

“data”:{ “pay_url”:“/gateway.do? app_id=101800716047&biz_content=%7B%22subject%22%3A%22%5Cu5b9e%5Cu9a8c%5Cu697 c%5Cu8ba2%5Cu5355%3ASYL16322149584%2C+%5Cu4ef7%5Cu683c%3A99.00%22%2C%22ou t_trade_no%22%3A%22SYL16322149584%22%2C%22total_amount%22%3A%2299.00%22%2 C%22product_code%22%3A%22FAST_INSTANT_TRADE_PAY%22%7D&charset=utf- 8&method=alipay.trade.page.pay&return_url=http%3A%2F%2F127.0.0.1%3A8888%2Fpayment %2Fcallback%2F&sign_type=RSA2×tamp=-10- 12+16%3A32%3A21&version=1.0&sign=qIM7yrjYgvqOn2DCYK4rBgtwqDnZ%2BTwf89axXQPMzk67FO OHH18YtnoROi4ml5i5w%2Fd%2FtD2RsYyxU5Jeatxw9Skz%2B9HQCAYfmQriYDo5fz2hOrC6Ydx92z5%2 BB5o%2BUIh29EAE8JS5MhUOOO8T3r9NtzmQTOs0kSWpnaXjX4S7l9Z83li76MG83H18jBodpWofgzcTTD dPsBnaHmeeJjGg9LKgSDS37ZKP9GE79asVn8S9w49qVmTPzZGdKIZxyLf2K44EllnGxhlDLFRlGLYJOlE %2Bxo1hr3IKH40WoYh3fkmv2%2FEDnl0OtNXHt5HRUH4uZ2k38BNf1ebrODRqWRg1eQ%3D%3D” }

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。