zoukankan      html  css  js  c++  java
  • 支付宝沙箱支付(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)

  • 相关阅读:
    牛客练习赛64 D-宝石装箱(容斥定律,背包)
    CF-GYM-[2019 USP Try-outs] 部分题解
    [Codeforces Round #642 (Div. 3)] ABCDEF题解
    [NCD 2019] G. Ali and the Breakfast (解析几何)
    [AtCoder Beginner Contest 165] E
    [Educational Codeforces Round 86 (Rated for Div. 2)] E. Placing Rooks (组合数学,容斥定律)
    [AtCoder Beginner Contest 164] -E
    牛客算法周周练3 C -小雨坐地铁(分层最短路)
    HDU 5726 GCD (RMQ + 二分)
    Codeforces Round #362 (Div. 2) C. Lorenzo Von Matterhorn (类似LCA)
  • 原文地址:https://www.cnblogs.com/mapel1594184/p/13950242.html
Copyright © 2011-2022 走看看