引言
这里做的是想要在django项目中想要使用支付宝加入用户支付功能,但是在接入支付宝开放平台时,由于我们并没有企业资质等,所以需要使用沙箱环境进行测试,下面在查找文档时会做相关解释。
支付介绍
现在我们在网站中选择支付时,较多使用的都是支付宝支付 / 微信支付 / 银行卡支付 / 各种钱包支付等,最多使用还是支付宝和微信,但是如果在测试中,我们可能还是会选择支付宝较多,这是由于微信需要200/年的认证,毕竟我们只是测试使用,所以这里是使用支付宝开放平台进行测试。
平台准备步骤
第一步
进入支付宝开放平台:支付宝开放平台https://open.alipay.com/(在支付宝整合之后支付功能已经到了蚂蚁金服,所以准确来说应该是进入蚂蚁金服开放平台,但是从老平台也可以找到文档等)
蚂蚁金服网址:蚂蚁金服开放平台https://ds.alipay.com/fd-irng3zgw/index.html(其实最终跳转都是一样的)
第二步
在进入开放平台后,下拉然后点击网页/移动应用开发其实也就是网页开发配置:支付宝开放平台https://open.alipay.com/module/webApp
第三步
继续下来,找到开发支持——开放API,点击进去后便是文档中心:小程序文档 - 支付宝文档中心支付宝文档中心https://opendocs.alipay.com/open/00a0ut
第四步
在左侧导航栏找到支付产品——电脑网站支付——然后下边的便可以进行了解具体功能以及如何搭建。
但是在这里如果按照它的步骤先创建应用,然后配置密钥等,后面是需要验证企业执照的,由于我们还没有企业执照,所以这里找到沙箱环境接入进行测试。
先在左侧的导航栏中找到支付产品——电脑网站支付——接入指南——基础功能——电脑网站支付快速接入,然后在右侧的导航栏便可以看到沙箱环境接入,其实进入电脑网站支付快速接入文档后一直下翻也就可以找到。
点击沙箱环境接入后可以看到沙箱环境的简要介绍
点击沙箱环境链接便可以进入沙箱环境介绍与使用:小程序文档 - 支付宝文档中心支付宝文档中心https://opendocs.alipay.com/common/02kkv7 简言之沙箱环境其实就是给开发者测试功能使用的,支付宝给出的沙箱环境介绍:
沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境,开发者在沙箱环境中调用接口无需具备所需的商业资质,无需绑定和开通产品,同时不会对生产环境中的数据造成任何影响。合理使用沙箱环境,可以让研发流程与商业流程并行,降低联调资损风险,加速项目的交付。
下方图片也指出了使用为什么建议开发者沙箱环境
如果之前没有使用过支付宝开放平台,需要在下方的前提条件中进行配置等工作。
第五步
在配置完成之后我们便可以进入我们的沙箱环境中进行查看,点击左上角回到首页——右上角控制台。
下拉到最后,找到沙箱,点击进去,注意如果没有自动创建沙箱环境就应该是没有配置好,应该会有提示,一步一步来就好。
然后便会看到为我们自动创建的沙箱环境
接入python步骤
第一步:下载包
在这里需要注意,由于目前为止,SDK文档中还是只有Java的接入教程,所以我们需要python第三方接入包,也就是进入pypi:PyPI · The Python Package Index中搜索网上的支付宝接入包与教程。
在pypi中搜索:alipay-sdk-python 后回车找到我们需要的包
点击进去后复制包下载命令到我们的项目终端
下载完成
第二步:查看包文档homepage
在pypi包的页面中找到homepage也就是包的首页查看文档配置等
然后我们便进入了它的GitHub项目地址(如果无法进入自行查找科学上网),在下方可以看到文档说明,点入中文文档进行查看。
第三步:根据文档进行配置
点击准备之后便进入了配置教程
1,安装
刚才我们已经安装过了,所以这一步可以忽略
2,生成密钥文件
这里所谓的生成密钥文件其实也就是加密和解密,这里略讲一下加密方式。
加密方式种族要分为两种:对称加密(加密解密密码一致)和非对称加密(加密解密密码不一致)。
- 对称加密:在对称加密中,相同的密钥(也称为秘密密钥)用于加密和解密数据。这意味着发送方和接收方必须共享相同的密钥。常见的对称加密算法包括AES(高级加密标准)和DES(数据加密标准)。对称加密速度通常很快,但存在一个关键问题,即如何在安全地传输密钥的过程中保持安全性。
- 非对称加密:在非对称加密中,有一对密钥,一个是公钥,另一个是私钥。公钥用于加密数据,而私钥用于解密数据。与对称加密不同,这意味着发送方可以使用接收方的公钥加密消息,但只有接收方拥有与之关联的私钥才能解密它。这种方法解决了密钥传输的问题,因为公钥可以公开分享,而私钥必须保持安全。常见的非对称加密算法包括RSA和ECC。
而这里所谓的生成密钥文件也就是使用算法生成加密。而由于我们现在只是使用沙箱环境进行测试,所以不需要自行生成密钥文件,沙箱环境已经为我们的账号配置好了密钥文件。
进入沙箱环境,可以看到我们可以使用系统默认密钥或自定义密钥,这里建议使用系统默认密钥即可。
点击查看,即可查看相关公钥与私钥的信息。最下方还有支付宝的应用公钥,这是我们待会需要使用的。
3,配置密钥文件
再次回到使用教程,点击初始化
发现初始化中需要提供我们应用的私钥和alipay的公钥。
再次回到准备教程中,最下方有证书格式参考,点击进去。
然后我们便进入了tests——certs——ali——ali_public_key.pem中,我们需要下载 ali——ali_public_key.pem和app——app_private_key.pem两个文件。
下载完成后,在我们项目下方新建一个证书文件夹cert(自行起名和位置),然后将两个文件复制进去。
在沙箱环境中复制阿里的公钥和应用的私钥,将文件中原本的公钥和私钥替换一下(注意替换的时候只需要替换密钥内容)。
第四步:创建支付应用
1,新建应用
再创建一个测试支付的应用,使用命令:python manage.py startapp pay(应用名,自行修改)
然后在settings中注册一下pay应用
2,编写urls
在pay应用中新建urls.py文件,并用以下代码进行测试。
from django.urls import path
from .views import *
app_name = "pay"
urlpatterns = [
# 商品列表
path('goodlist/', goodlist, name="goodlist"),
path('alipay/<int:id>', alipay, name="alipay"),
path('alipayback/', alipayback, name="alipayback"),
]
将pay下的urls文件关联到总路由,在总路由下加入pay.urls
3,编写views视图函数
进入pay/views中编写三个对应的视图函数,函数内暂时先不写东西,待会儿再编写templates后进行连接。
from django.shortcuts import render
# Create your views here.
# 商品列表视图
def goodlist(request):
pass
# 支付视图
def alipay(request):
pass
# 支付完返回视图
def alipayback(request):
pass
4,编写templates模板
在pay下新建templates目录,里面新建goodlist.html文件并写入以下内容,注意这里也使用了模板的继承与包含的写法,在后续会进行讲解,可以直接在html中写入三个a标签即可。
第一种,直接写入
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/pay/alipay/10" >购买10个金币</a>
<a href="/pay/alipay/100" >购买100个金币</a>
<a href="/pay/alipay/1000" >购买1000个金币</a>
</body>
</html>
第二种,使用了模板的继承等
{% extends 'base.html' %}
{% block main %}
{% include 'nav.html' %}
<a href="/pay/alipay/10" >购买10个金币</a>
<a href="/pay/alipay/100" >购买100个金币</a>
<a href="/pay/alipay/1000" >购买1000个金币</a>
{% endblock %}
然后将goodlist视图函数关联到goodlist模板,将goodlist和alipay视图修改一下:
def goodlist(request):
return render(request,'goodlist.html')
def alipay(request, id):
return HttpResponse(id)
最后启动服务:python manage.py runserver,再在后面加上/pay/goodlist后,如下所示,点击后应分别返回10,100,1000
第五步:配置付款
再次进入初始化中,将一下代码复制到alipay视图中,注意只需要复制选中部分,下面不需要用(注意复制的导包位置等)。
修改为以下代码:
from django.shortcuts import render,HttpResponse
from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig
# Create your views here.
def goodlist(request):
return render(request,'goodlist.html')
def alipay(request, id):
# 支付宝网页下载的证书不能直接被使用,需要加上头尾
# 你可以在此处找到例子: tests/certs/ali/ali_private_key.pem
# 找到cert下的两个对应文件
app_private_key_string = open("cert/app_private_key.pem").read()
alipay_public_key_string = open("cert/ali_public_key.pem").read()
# 创建实例,里面大部分内容还是在沙箱环境中进行查找
alipay = AliPay(
# 换成自己沙箱环境中国的APPID
appid="9021000129608132",
# 现在测试get请求还用不到
app_notify_url=None, # 默认回调 url
app_private_key_string=app_private_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
alipay_public_key_string=alipay_public_key_string,
# 现在都是RSA2,所以要修改为RSA2
# sign_type="RSA", # RSA 或者 RSA2
sign_type="RSA2", # RSA 或者 RSA2
debug=False, # 默认 False
verbose=False, # 输出调试数据
config=AliPayConfig(timeout=15) # 可选,请求超时时间
)
return HttpResponse(id)
def alipayback(request):
pass
然后还需要使用GitHub上的项目接口,在使用教程中找到接口,点击进去选择电脑网站支付,将代码也复制到alipay视图函数中。
按照要求进行修改:
from django.shortcuts import render,HttpResponse,redirect
from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig
import time
# Create your views here.
def goodlist(request):
return render(request,'goodlist.html')
def alipay(request, id):
# 支付宝网页下载的证书不能直接被使用,需要加上头尾
# 你可以在此处找到例子: tests/certs/ali/ali_private_key.pem
# 找到cert下的两个对应文件
app_private_key_string = open("cert/app_private_key.pem").read()
alipay_public_key_string = open("cert/ali_public_key.pem").read()
# 创建实例,里面大部分内容还是在沙箱环境中进行查找
alipay = AliPay(
# 换成自己沙箱环境中国的APPID
appid="9021000129608132",
# 现在测试get请求还用不到
app_notify_url=None, # 默认回调 url
app_private_key_string=app_private_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
alipay_public_key_string=alipay_public_key_string,
# 现在都是RSA2,所以要修改为RSA2,不修改会报错
# sign_type="RSA", # RSA 或者 RSA2
sign_type="RSA2", # RSA 或者 RSA2
debug=False, # 默认 False
verbose=False, # 输出调试数据
config=AliPayConfig(timeout=15) # 可选,请求超时时间
)
# 如果你是 Python3 的用户,使用默认的字符串即可
subject = f"测试订单:{id}"
# 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
# 提供这个地址其实是上线之后的地址,修改为沙箱环境中的支付宝网关地址:https://openapi-sandbox.dl.alipaydev.com/gateway.do
# 后面也一样,所以我们的拼接地址应该是https://openapi-sandbox.dl.alipaydev.com/gateway.do? + order_string
# order_string返回的就是一个网址
order_string = alipay.api_alipay_trade_page_pay(
# 订单
# 订单号,使用time模块进行测试设置
out_trade_no=f"{id}:{int(time.time())}",
total_amount=0.01,
subject=subject,
# 支付的结果
return_url="http://127.0.0.1:8000/pay/alipayback/",
# notify_url="https://example.com/notify" # 可选,不填则使用默认 notify url
)
# 使用重定向
return redirect(f"https://openapi-sandbox.dl.alipaydev.com/gateway.do?{order_string}")
def alipayback(request):
pass
appid和网址信息都可以在沙箱环境中找到
再次点击a标签,出现下面就算配置成功
使用沙箱环境中的买家账号密码进行登陆后付款如图所示:
输入支付密码并确认交易
最终会显示错误是因为我们没有配置alipayback的视图函数
第六步:配置支付后的视图函数
支付完成后我们需要再配置alipayback视图函数来返回支付结果,这里也使用包文档提供的api接口进行配置,可以使用同步或者异步,这里使用同步。
在刚才的接口文档中找到通知验证并点击,在这里使用Django版本。
然后将以下代码复制到我们的alipayback路由函数中
from django.shortcuts import render, HttpResponse, redirect
from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig
import time
# Create your views here.
def goodlist(request):
return render(request, 'goodlist.html')
def alipay(request, id):
# 支付宝网页下载的证书不能直接被使用,需要加上头尾
# 你可以在此处找到例子: tests/certs/ali/ali_private_key.pem
# 找到cert下的两个对应文件
app_private_key_string = open("cert/app_private_key.pem").read()
alipay_public_key_string = open("cert/ali_public_key.pem").read()
# 创建实例,里面大部分内容还是在沙箱环境中进行查找
alipay = AliPay(
# 换成自己沙箱环境中国的APPID
appid="9021000129608132",
# 现在测试get请求还用不到
app_notify_url=None, # 默认回调 url
app_private_key_string=app_private_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
alipay_public_key_string=alipay_public_key_string,
# 现在都是RSA2,所以要修改为RSA2,不修改会报错
# sign_type="RSA", # RSA 或者 RSA2
sign_type="RSA2", # RSA 或者 RSA2
debug=False, # 默认 False
verbose=False, # 输出调试数据
config=AliPayConfig(timeout=15) # 可选,请求超时时间
)
# 如果你是 Python3 的用户,使用默认的字符串即可
subject = f"测试订单:{id}"
# 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
# 提供这个地址其实是上线之后的地址,修改为沙箱环境中的支付宝网关地址:https://openapi-sandbox.dl.alipaydev.com/gateway.do
# 后面也一样,所以我们的拼接地址应该是https://openapi-sandbox.dl.alipaydev.com/gateway.do? + order_string
# order_string返回的就是一个网址
order_string = alipay.api_alipay_trade_page_pay(
# 订单
# 订单号,使用time模块进行测试设置
out_trade_no=f"{id}:{int(time.time())}",
total_amount=0.01,
subject=subject,
# 支付的结果
return_url="http://127.0.0.1:8000/pay/alipayback/",
notify_url="https://example.com/notify" # 可选,不填则使用默认 notify url
)
# 使用重定向
return redirect(f"https://openapi-sandbox.dl.alipaydev.com/gateway.do?{order_string}")
def alipayback(request):
# for django users return url是同步的get请求
data = request.GET.dict()
signature = data.pop("sign")
app_private_key_string = open("cert/app_private_key.pem").read()
alipay_public_key_string = open("cert/ali_public_key.pem").read()
alipay = AliPay(
# 换成自己沙箱环境中国的APPID
appid="9021000129608132",
# 现在测试get请求还用不到
app_notify_url=None, # 默认回调 url
app_private_key_string=app_private_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
alipay_public_key_string=alipay_public_key_string,
# 现在都是RSA2,所以要修改为RSA2,不修改会报错
# sign_type="RSA", # RSA 或者 RSA2
sign_type="RSA2", # RSA 或者 RSA2
debug=False, # 默认 False
verbose=False, # 输出调试数据
config=AliPayConfig(timeout=15) # 可选,请求超时时间
)
# verification
# 又用到了alipay,从alipay函数中复制过来或包装成函数或类
success = alipay.verify(data, signature)
# if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
# print("trade succeed")
print(success, data)
if success:
s = data['out_trade_no']
good = s[:s.index(':')]
success_msg = f"购买{good}成功"
return HttpResponse(success_msg)
else:
return HttpResponse("未知错误!")
然后再次运行进行测试,基本就可以完成,支付成功后可以返回我们的alipayback视图函数。
用户增加充值功能
这一步没太大必要,只是了解一下流程。
第一步:添加字段
在测试完成后,便可以对用户系统增加重置了,先在用户模型中添加money字段,如下:
然后生成迁移文件并重新进行迁移:python manage.py makemigrations
python manage.py migrate
第二步:修改pay应用视图函数
在这里由于我们的逻辑是必须登录过的用户才能充值,所以可以用django自带的路由守卫装饰器。
from django.shortcuts import render, HttpResponse, redirect
from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig
import time
# 导入自带的路由守卫
from django.contrib.auth.decorators import login_required
# Create your views here.
def goodlist(request):
return render(request, 'goodlist.html')
# 给支付添加路由守卫
@login_required()
def alipay(request, id):
# 支付宝网页下载的证书不能直接被使用,需要加上头尾
# 你可以在此处找到例子: tests/certs/ali/ali_private_key.pem
# 找到cert下的两个对应文件
app_private_key_string = open("cert/app_private_key.pem").read()
alipay_public_key_string = open("cert/ali_public_key.pem").read()
# 创建实例,里面大部分内容还是在沙箱环境中进行查找
alipay = AliPay(
# 换成自己沙箱环境中国的APPID
appid="9021000129608132",
# 现在测试get请求还用不到
app_notify_url=None, # 默认回调 url
app_private_key_string=app_private_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
alipay_public_key_string=alipay_public_key_string,
# 现在都是RSA2,所以要修改为RSA2,不修改会报错
# sign_type="RSA", # RSA 或者 RSA2
sign_type="RSA2", # RSA 或者 RSA2
debug=False, # 默认 False
verbose=False, # 输出调试数据
config=AliPayConfig(timeout=15) # 可选,请求超时时间
)
# 如果你是 Python3 的用户,使用默认的字符串即可
subject = f"测试订单:{id}"
# 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
# 提供这个地址其实是上线之后的地址,修改为沙箱环境中的支付宝网关地址:https://openapi-sandbox.dl.alipaydev.com/gateway.do
# 后面也一样,所以我们的拼接地址应该是https://openapi-sandbox.dl.alipaydev.com/gateway.do? + order_string
# order_string返回的就是一个网址
order_string = alipay.api_alipay_trade_page_pay(
# 订单
# 订单号,使用time模块进行测试设置
out_trade_no=f"{id}:{int(time.time())}",
total_amount=0.01,
subject=subject,
# 支付的结果
return_url="http://127.0.0.1:8000/pay/alipayback/",
notify_url="https://example.com/notify" # 可选,不填则使用默认 notify url
)
# 使用重定向
return redirect(f"https://openapi-sandbox.dl.alipaydev.com/gateway.do?{order_string}")
def alipayback(request):
# for django users return url是同步的get请求
data = request.GET.dict()
signature = data.pop("sign")
app_private_key_string = open("cert/app_private_key.pem").read()
alipay_public_key_string = open("cert/ali_public_key.pem").read()
alipay = AliPay(
# 换成自己沙箱环境中国的APPID
appid="9021000129608132",
# 现在测试get请求还用不到
app_notify_url=None, # 默认回调 url
app_private_key_string=app_private_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
alipay_public_key_string=alipay_public_key_string,
# 现在都是RSA2,所以要修改为RSA2,不修改会报错
# sign_type="RSA", # RSA 或者 RSA2
sign_type="RSA2", # RSA 或者 RSA2
debug=False, # 默认 False
verbose=False, # 输出调试数据
config=AliPayConfig(timeout=15) # 可选,请求超时时间
)
# verification
# 又用到了alipay,从alipay函数中复制过来或包装成函数或类
success = alipay.verify(data, signature)
# if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
# print("trade succeed")
print(success, data)
if success:
s = data['out_trade_no']
good = s[:s.index(':')]
# 购买成功后用户money增加
request.user.money += int(good)
request.user.save()
# 重定向个人中心
return redirect("/user/center/")
第三步:更新用户个人中心
在添加了money字段后,在用户的个人中心添加money显示(这里大部分都是之前已经写过的,所以不用刻意关注,只需了解流程)。
{% extends 'base.html' %}
{% block title %}
新闻网-个人中心
{% endblock %}
{% block css %}
<style>
.head {
width: 120px;
height: 120px;
position: relative;
}
.head input {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
opacity: 0;
}
.head img {
width: 100%;
border-radius: 50%;
}
</style>
{% endblock %}
{% block main %}
{% include 'nav.html' %}
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">个人中心</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<ul class="list-group">
<li class="list-group-item">用户名: <input name="username" value="{{ request.user.username }}"> <button
id="change_username">修改</button></li>
<li class="list-group-item">注册时间: {{ request.user.date_joined }}</li>
<li class="list-group-item">拥有金币: {{ request.user.money }} <a href="/pay/goodlist" >去充值</a> </li>
<li class="list-group-item">上次登录时间: {{ request.user.last_login }}</li>
{% if request.user.telephone %}
<li class="list-group-item current_telephone">手机号:{{ request.user.telephone }}</li>
{% else %}
<li class="list-group-item current_telephone">手机号:尚未绑定</li>
{% endif %}
<li class="list-group-item"> <input value="15138001200" name="telephone" placeholder="请输入要绑定的手机号" type="text"> <button id="change_telephone">发送验证码</button> </li>
<li class="list-group-item"> <input name="code" placeholder="请输入验证吗" type="text"> <button id="modify_telephone">绑定</button> </li>
</ul>
</div>
<div class="col-md-6">
<div class="head">
<img src="/media/{{request.user.head}}" alt="">
<input type="file">
{% csrf_token %}
</div>
<span>点击头像可以更换</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block js %}
<script>
$(function(){
$("#modify_telephone").click(function(){
let content = $("[name='code']").val()
if(content==""){
alert("验证码不能为空")
}
else{
$.ajax({
url:"/user/modify_telephone/",
method: "post",
data: {
"csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val(),
"code": content,
"telephone": $("[name='telephone']").val()
},
success:function(data){
alert(data.msg)
if(data.code == 0){
$(".current_telephone").text(`手机号:${$("[name='telephone']").val()}`)
}
}
})
}
})
})
</script>
<script>
$(function(){
$("#change_telephone").click(function(){
$("#change_telephone").attr("disabled", true);
let content = $("[name='telephone']").val()
if(content==""){
alert("手机号不能为空")
}
else{
content = content.trim()
if(!(/^1[3456789]\d{9}$/.test(content))){
alert("手机号码有误,请重填");
}
else{
$.ajax({
url:"/user/change_telephone/",
method:"post",
data:{
"csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val(),
"telephone": content
},
success:function(data){
alert(data.msg)
$("#change_telephone").attr("disabled", false);
}
})
}
}
})
})
</script>
<script>
$(function () {
$(".head input").change(function () {
let fd = new FormData();
fd.append("csrfmiddlewaretoken", $("[name='csrfmiddlewaretoken']").val());
fd.append("file", $("[type='file']")[0].files[0]);
$.ajax({
url: "/user/change_head/",
method: "post",
data: fd,
processData: false,
contentType: false,
success: function (data) {
console.log(data);
if (data.code == 0) {
$(".head img").attr("src", data.data.head)
}
}
})
})
})
</script>
<script>
$(function(){
$("#change_username").click(function(){
let content = $("[name='username']").val();
if(content == ""){
alert("用户名不能为空");
}
else{
$.ajax({
url: "/user/change_username/",
method:"post",
data:{
"username": content,
"csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val()
},
success:function(data){
alert(data.msg);
$(".nav .dropdown>a").html(`${content}<span class="caret"></span>`);
}
})
}
})
})
</script>
{% endblock %}
进入网页后进入个人中心 可以看到用户显示金币数量并有了充值按钮。
点击去充值,跳转到/pay/goodlist
随便点击一个,进行充值,在充值完成后再次跳转到个人中心,可以看到充值完成。
补充
这里还有很多可以进行加工完善,比如并设置充值金币数量对应相应的金额,美化充值页面,设置自定义充值等等,这里不再做一一展示,这里只是为了简单了解配置流程。