支付宝沙箱支付(Django端)超适合小白哦~

1 支付宝沙箱支付

1.1 准备工作(超级适合小白的整理哦)

1.1.1 登录网站
1) 支付宝开放平台网址
https://openhome.alipay.com/platform/home.htm
2)进入管理中心

3)点击研发服务

1.1.2 支付宝开放平台开发助手安装
1) 安装选项

2) 选择安装位置

1.1.3 查看支付宝网页&移动应用文档
1) 进入文档中心

2) 找到支付API

3) 建立接口实质
  • 其实就是路由拼接

1.1.4 生成秘钥

1.1.5 打开密钥文件

1.1.6 点击沙箱应用

1.1.7 点击沙箱应用中的RSA2(SHA256)密钥(推荐) 设置

1.1.8 设置完成

1.1.9 更改txt

(1)将应用私钥改成app_private_key.txt

(2)将应用公钥改成 alipay_public.txt

1.2 安装 alipay-sdk

pip install python-alipay-sdk --upgrade

1.3 具体代码

1.3.1 user/utils.py
def create_trade_no():
    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
print(create_trade_no())
1.3.2 settings.py
# 支付宝
ALIPAY_APP_ID = '2016102500758797'
APP_PRIVATE_KEY_STRING = open('{}/utils/alipay_key/app_private_key.txt'.format(BASE_DIR)).read()
ALIPAY_PUBLIC_KEY_STRING = open('{}/utils/alipay_key/alipay_public.txt'.format(BASE_DIR)).read()
ALIPAY_SIGN_TYPE = 'RSA2'
ALIPAY_SUBJECT = '实验楼'
1.3.3 views.py
from alipay import AliPayConfig, AliPay
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework_jwt.utils import jwt_decode_handler

from goods.models import Orders
from syl import settings
from django.shortcuts import render

# Create your views here.
from user.utils import create_trade_no

# http://192.168.56.100:8888/goods/getpayurl/
class AliPayView(APIView):

    def post(self, request):
        alipay = AliPay(
            appid=settings.ALIPAY_APP_ID,
            app_notify_url=None,
            app_private_key_string=settings.APP_PRIVATE_KEY_STRING,
            alipay_public_key_string=settings.ALIPAY_PUBLIC_KEY_STRING,
            sign_type=settings.ALIPAY_SIGN_TYPE,
            debug=True,
            config=AliPayConfig(timeout=15)
        )

        total = request.data.get('total')
        token = request.data.get('token')
        goods_id = request.data.get('goods_id')

        user_info = jwt_decode_handler(token)
        print(user_info)
        user_id = user_info.get('user_id')
        out_trade_no = create_trade_no()
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=out_trade_no,
            total_amount=total,
            subject=settings.ALIPAY_SUBJECT,
            return_url='http://192.168.56.100:8888/goods/peyment/',
            # notify_url='http://192.168.56.100:8888/'
        )
        pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
        dic = {
            'order_id': out_trade_no,
            'pay_method': 1,
            'status': 1,
            'total_amount': total,
            'goods_id': goods_id,
            'user_id': user_id
        }
        Orders.objects.create(**dic)
        return Response(pay_url)
    
    
    # http://192.168.56.100:8888/goods/peyment/

class PeymentView(APIView):
    def get(self, request):
        data = request.GET
        print(data)
        order_obj = Orders.objects.filter(order_id=data['out_trade_no']).first()
        order_obj.trade_no = data['trade_no']
        order_obj.pay_time = data['timestamp']
        order_obj.status = 2
        order_obj.save()        
        return Response(
            {'msg':'ok', 'code':200}
        )
1.3.4 urls.py
# -*- coding: utf-8 -*-
from django.urls import path
from . import views
urlpatterns = [
    path('getpayurl/', views.AliPayView.as_view()),
    path('peyment/', views.PeymentView.as_view())
]

1.4 测试订单

1.4.1 网址
http://192.168.56.100:8888/goods/alipay/
1.4.2 测试效果

1.5 测试网址

https://openapi.alipaydev.com/gateway.do?app_id=2016102500758797&biz_content=%7B%22subject%22%3A%22%5Cu5b9e%5Cu9a8c%5Cu697c%22%2C%22out_trade_no%22%3A%22SYL2020110916391588362%22%2C%22total_amount%22%3A%22500%22%2C%22product_code%22%3A%22FAST_INSTANT_TRADE_PAY%22%7D&charset=utf-8&method=alipay.trade.page.pay&notify_url=http%3A%2F%2F192.168.56.100%3A8888%2F&return_url=http%3A%2F%2F127.0.0.1%3A8808%2F&sign_type=RSA2&timestamp=2020-11-09+16%3A39%3A15&version=1.0&sign=gFpOrQibFzpSs95ozR6pTUN3%2Fgh%2FbbTAYo%2FXtQr3fxn91zkdL3c%2BIgCl8xEf0qdDABkCh%2B8sosAlhQmYABleUJH%2FlOC%2BCEAVbkpn2ecHIl%2FIKwlA7IS18rWJ7M7%2FI1i48XjFZe86H5lH6TstKCXZWiRF3i8BebBLyC75h90aef7bh2u15SCfVg1lyCJBKU8HENlSZZRLEmqA27oFmwpax3ZA5Dma56Em8Oc3F2SAqoIFUy4e2OyjxFXsu%2BO3d7qDGIsMnB841Fy3p7OYWlBVt5fECwi%2FVhsuxfDZGUp2hnwh%2FR8u64qAoln7n8SkLz1tRGBzKZe6W3HRkkYNFYpDuw%3D%3D

1.6 效果图

1.6.1 支付页面

1.6.2 支付成功页面

1.6.3 支付沙箱数据

2 后端整体页面展示

2.1 获取token

2.2 获取支付url

2.3 后端生成未支付订单

2.4 扫码支付

2.5 跳转回调页面

2.6 生成已支付订单

2.7 踩坑常在

  • 不加签,会出现访问错误情况哦!(应用公钥就是public key)

posted @ 2020-11-09 19:19  狐狸大大爱吃糖  阅读(732)  评论(0编辑  收藏  举报