Django--支付宝(沙箱)

django中支付宝(沙箱)简单使用

python=3.6.8

django=2.1.8

python-alipay-sdk=2.0.1

非官方支付宝 Python SDK: https://github.com/fzlee/alipay/blob/master/README.zh-hans.md#alipay.trade.page.pay

沙箱环境配置

1、在支付宝开放平台---->开发者中心—>开发服务---->沙箱

在这里插入图片描述

2、RSA2密钥生成并上传

参考官方地址:https://opendocs.alipay.com/open/291/105971

在这里插入图片描述

新版的生成密钥工具为.exe文件,下载完成以后,请自行安装,安装好以后,桌面自动生成图标

在这里插入图片描述

运行支付宝开放平台开发助手

在这里插入图片描述

获取支付宝公钥

在这里插入图片描述

在这里插入图片描述

django中使用alipay

alipay公钥和app私钥在django中存放行式

alipay公钥

在这里插入图片描述

app私钥

在这里插入图片描述

models.py
from django.db import models

# Create your models here.


class Goods(models.Model):
    goods_name = models.CharField(max_length=32)
    goods_price = models.FloatField()


class Order(models.Model):
    order_number = models.CharField(max_length=64)
    status_choices = ((0, '未支付'), (1, '已支付'))
    order_status = models.IntegerField(choices=status_choices, default=0)
    goods = models.ForeignKey(to='Goods', on_delete=models.CASCADE)

views.py
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.views import View
from django.conf import settings
from .models import *

import uuid

from alipay import AliPay
# Create your views here.


class GoodsView(View):
    def get(self, request):
        goods_list = Goods.objects.all()
        return render(request, 'day03/goods.html', {'goods_list': goods_list})


# 读取支付宝沙箱私钥
with open(settings.BASE_DIR + '\\day03\\keys\\private_key.txt') as f:
    app_private_key_string = f.read()

# 读取支付宝沙箱公钥
with open(settings.BASE_DIR + '\\day03\\keys\\alipy_public_key.txt') as ff:
    alipay_public_key_string = ff.read()

# 实例化对象
alipay_pay = AliPay(
    appid="2016101000652297",
    app_notify_url=None,  # 默认回调url
    app_private_key_string=app_private_key_string,
    # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    alipay_public_key_string=alipay_public_key_string,
    sign_type="RSA2",  # RSA 或者 RSA2
    debug=True,  # 默认False
)


class PaymentView(View):

    def get(self, request, goods_id):
        # 获取商品信息,因为向支付宝接口发送请求的时候需要携带该商品相关信息
        obj_goods = Goods.objects.get(pk=goods_id)  # pk就是商品的标识,等价于使用id
        # 生成订单
        order_number = str(uuid.uuid4())
        # 把生成的订单号关联商品,并写入数据库
        Order.objects.create(order_number=order_number, goods=obj_goods)
        # 定义请求地址传入的参数
        print(alipay_pay)
        query_params = alipay_pay.api_alipay_trade_page_pay(
            subject=obj_goods.goods_name,  # 商品的简单描述
            out_trade_no=order_number,  # 商品订单号
            total_amount=obj_goods.goods_price,  # 交易金额(单位是元,保留两位小数)
            return_url="http://127.0.01:8000/day03/check_order/",  # 支付成功后回调地址
        )
        # 需要跳转到支付宝的支付页面,所以需要生成跳转的url
        pay_url = 'https://openapi.alipaydev.com/gateway.do?{}'.format(query_params)
        return redirect(pay_url)


class CheckPayView(View):
    def get(self, request):
        print(request.GET.dict())
        data = request.GET.dict()
        signtrue = data.pop('sign')
        print(signtrue)
        success = alipay_pay.verify(data, signtrue)
        print(success)
        if success:
            print("支付成功")
        else:
            print("支付失败")
        return HttpResponse("OK")
urls.py
from django.urls import path
from . import views

app_name = 'day03'

urlpatterns = [
    path('goods/', views.GoodsView.as_view(), name='goods'),  # 展示商品
    path('purchase/<goods_id>', views.PaymentView.as_view(), name='purchase'),  # 展示商品
    path('check_order/', views.CheckPayView.as_view(), name='check_order'),  # 展示商品
]
index.html
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>商品信息</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
    <div class="row" style="margin-top: 10px">
        <h4 style="text-align: center;font-weight: bold">Django支付宝支付案例</h4>
    </div>
    <div class="row" style="margin-top: 10px">
        <div class="col-md-4 col-md-offset-4">
            <table class="table table-bordered">
                {% for row in goods_list %}
                    <tr style="text-align: center">
                        <td>{{ row.id }}</td>
                        <td>{{ row.goods_name }}</td>
                        <td>{{ row.goods_price }}</td>
                        <td><a href="{% url 'day03:purchase' row.id %}">购买</a></td>
                    </tr>
                {% endfor %}
            </table>
        </div>
    </div>
</div>

</body>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
        integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
        crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
        integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
        crossorigin="anonymous"></script>
</html>
以上内容为模版形式的,接口形式待续
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
老规矩,先看本节效果图我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。核心代码就下面这些一,创建一个云开发小程序关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看我之前的文章,或者看下我录制的视频:https://edu.csdn.net/course/play/9604/204528创建云开发小程序有几点注意的1,一定不要忘记在app.js里初始化云开发环境。2,创建完云函数后,一定要记得上传二, 创建支付的云函数1,创建云函数pay三,引入三方依赖tenpay我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,关于如何安装node,我这里不做讲解,百度一下,网上一大堆。1,首先右键pay,然后选择在终端中打开2,我们使用npm来安装这个依赖。在命令行里执行 npm i tenpay安装完成后,我们的pay云函数会多出一个package.json 文件到这里我们的tenpay依赖就安装好了。四,编写云函数pay完整代码如下//云开发实现支付 const cloud = require('wx-server-sdk')cloud.init() //1,引入支付的三方依赖 const tenpay = require('tenpay'); //2,配置支付信息 const config = ;exports.main = async(event, context) => 一定要注意把appid,mchid,partnerKey换成你自己的。到这里我们获取小程序支付所需参数的云函数代码就编写完成了。不要忘记上传这个云函数。出现下图就代表上传成功五,写一个简单的页面,用来提交订单,调用pay云函数。这个页面很简单,1,自己随便编写一个订单号(这个订单号要大于6位)2,自己随便填写一个订单价(单位是分)3,点击按钮,调用pay云函数。获取支付所需参数。下图是官方支付api所需要的一些必须参数。下图是我们调用pay云函数获取的参数,和上图所需要的是不是一样。六,调用wx.requestPayment实现支付下图是官方的示例代码这里不在做具体讲解了,完整的可以看视频。实现效果1,调起支付键盘2,支付完成3,log日志,可以看出不同支付状态的回调上图是支付成功的回调,我们可以在支付成功回调时,改变订单支付状态。下图是支付失败的回调,下图是支付完成的状态。到这里我们就轻松的实现了微信小程序的支付功能了。是不是很简单啊,完整的讲解可以看视频。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值