栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

支付功能的实现_支付宝支付主要功能?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

支付功能的实现_支付宝支付主要功能?

文章目录

支付宝支付实现

简单使用支付宝字符的二次封装支付支付接口源码

支付宝支付实现

采用沙箱环境实现

https://openhome.alipay.com/platform/appDaily.html

下载软件生成支付宝公钥,(也可以用系统默认密钥)

https://opendocs.alipay.com/open/291/106097/


沙箱账号,用来实验 https://open.alipay.com/platform/appDaily.htm?tab=account

沙箱工具中下载相应软件即可

简单使用

pip install python-alipay-sdk

from alipay import AliPay

# 个人私钥
app_private_key_string = """-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAgfA3BQ1y8xihyPKKPdXXQ/eOC1gcGvDpFdabp5xXeFk63h/h4V3D6WdfSg+Q59ea2bAfnlg/FRp8jCxMyTzQCBNFbk0FS3u840VHEsaRfziF90wgktZuWvlZ7xSic5vq0tyANtCWl8gawyf9C7gJijj497Xw9Q6PIxusHLYXcdBlHdiRBA3yJekiRGUVBz98qVwFvCp8brPLYBXuAjUhaOWm1kfY3nrLqAUzCtcVhiV7Kf61fhMzXgwzJ7GWcrRe2Bx3Lg7QG5L3RdDmwmpWbd7vqVev4mHqI0HlAJGbaK9/V/xnZO/OUX3cnQ8w5jtiYQTHPlhRihyIbBGv/EYCHwIDAQABAoIBAGJcwJmvi6PgsqAWknWqyjEmVj3aLjRqyFeCxQQFwuVUzs5VXj2nKGYonabHz87hlNRTkivg66gDC+NkqZ/wzB5A0F9mKKryeZOl3t6kuIGQ/UCuPT5K2vE9L0pf2XYgwotq5hgYoNc3YKL5Q4I6h+Y9qKKD9Wrc4ZgXG5wEcAz0OqKLjD/p49ia5z8JeaB5XfbrV1ATeQTWuIISITLb/tM7XdX1n+h3vVHr6LcA8VeUabQQilTjwnhhePqapDy4/HO6VMiuY9S8LEqX1i5wD7IzQIQ0/bLas7jDo6BkeHtGvdEE4ftq+IeuesAigaJZEtgm4w0LUReDBe7c1ZY+UrkCgYEAxHLt3aBBfCJmHt93AtMSR1zcL+onU/00OThC1vGHBbo7abLjb8qOwPgzP0ykjhq35HVl2tcFSkbSOzv1w6fOogD5BaeNeIiTYmr82cYLLl2XrTrlWvoXD1hFebQXA3qw8M6REBpk9AazW9Bj2zz0FWaMTQMeCihznBA9VjaNSlUCgYEAqVPZRVT1FosV6Gwn1eRtM7qJs0K98xnv6SGCqvce86tZ58MPbG0glq7tHfQSMZfo6NjsWoIoqKpjkVOQHNVoUHKlTmPRXj7h/4rB9zAdzCJdbH1KK7WnYNXrIsMtXgyzhHh4QxEoGm8/VkA8DVZfON4++hb9v+cZw1dfUPVa9qMCgYBpnWhouJm8RTol6vou2I+BMllmoTqXmw+Sm77DlIKE/8SlZPmFxp7M/COBKpFlnNO0zbD+4I8FieHI2smccQFUc7Vt5tDWNocWaHKcGi80tDixd3KLYN048LoZXkrpIfMy47t1rtsLnvaarASjf7eyMbnIRZ7G00ykYM65JQb9KQKBgDxrb/a+VunhXULe/OPkq1au9B2j7hWFpsagL3kDzuaRuPXq82D0G5HI/1EV2zwZAYG8jbHKCeoNSpP7pkuzlpJGJlgvY/DmLUw63fVvFOLXTFC+8C1il0QFcO6piFGr5I6bUgZUY+Py2D3Vk9gKftXS79PbSlYkh1vdnGRN+FRTAoGBAKtcF0uJGbg6Is2KkzMlWcSkORpZealm3mTQ1PxNCNyFQlDQFbL7GWXF3zQgfcSIjXjHHdRh+bmP4nKbL8oyqtVgQtpj3l671UVJiCxjDBs3T3TJtVNCBAd6OLAr6D01jwMaEKnZFTZhTXoyQ7HzAxTjK84wMx0m7nYYw2jHT3j7
-----END RSA PRIVATE KEY-----
"""
# 支付宝公钥
alipay_public_key_string = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuGE2+tkMKpLb4m+aJDxaZHkFTVTkbOAgXfZD594Bl6rPbYQVdHpanNYTA0CG2GgJ7C0qI4YO3T+QiogncZhKmgW6nYPwCEsdug2fkgKDs+9AX/WZJj8BTUiJsEV+ntN8Xu7HpaY6JMIgMb4mJ8rfx++aXQr4xOA8OPtZMLbmLVDmjEr/rjr5UXhy8BYQF3temb4J9qMHC90moiCT0HLKPOelUartasTinyZqGVuefd+rCBA7cX7Y7DMP52YHwXotWWZhjeHl5+fk6XL5X/BYJwbfT/rnGESaLLFSNdxHhvUwltnDSJS6Y+GI94xIRevztdr5UpNE+5z84+Np+eaBjQIDAQAB
-----END PUBLIC KEY-----
"""

alipay = AliPay(
    appid="2021000119649792",  # appid
    app_notify_url='http://127.0.0.1:8000/home/',  # the default notify path
    app_private_key_string=app_private_key_string,
    # alipay public key, do not use your own public key!
    alipay_public_key_string=alipay_public_key_string,
    sign_type="RSA2",  # RSA or RSA2
    debug=True  # False by default
)

alipay_url = 'https://openapi.alipaydev.com/gateway.do?'
order_string = alipay.api_alipay_trade_page_pay(
    out_trade_no="213213",  # 订单号不能重复
    total_amount=9999,  # 价格
    subject='充气娃娃',  # 商品名称
    return_url="https://www.luffycity.com/free-course",  # 回调链接.必须是公网域名
    notify_url="https://www.luffycity.com/free-course"
)
print(alipay_url + order_string)    
# 结果就是支付链接,需要单独开一个浏览器页面打开,不然会报钓鱼链接错误

支付宝字符的二次封装

文件结构

al_pay
    -pem
    -__init__.py
    -pay.py
    -setting.py

文件内容

# __init__.py
from .pay import alipay,gateway

# pay.py
from alipay import AliPay
from . import settings

# 个人私钥
app_private_key_string = settings.APP_PRIVATE_KEY_STRING
# 支付宝公钥
alipay_public_key_string = settings.ALIPAY_PUBLIC_KEY_STRING

alipay = AliPay(
    appid=settings.APPID,  # appid,换上自己的即课
    app_notify_url=None,  # the default notify path
    app_private_key_string=app_private_key_string,
    # alipay public key, do not use your own public key!
    alipay_public_key_string=alipay_public_key_string,
    sign_type=settings.SIGN_TYPE,  # RSA or RSA2
    debug=settings.DEBUG  # False by default
)
gateway=settings.GATEWAY

# setting.py
import os

APPID = 2021000119649792
APP_PRIVATE_KEY_STRING = open(os.path.join(os.path.dirname(__file__), 'pem', 'private_key.pem')).read()
ALIPAY_PUBLIC_KEY_STRING = open(os.path.join(os.path.dirname(__file__), 'pem', 'al_public_key.pem')).read()

SIGN_TYPE = 'RSA2'  # 加密方式

DEBUG = True

GATEWAY = 'https://openapi.alipaydev.com/gateway.do?' if DEBUG else 'https://openapi.alipay.com/gateway.do?'
支付支付接口源码
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import CreateModelMixin
from . import models
from . import serializer
from rest_framework.response import Response
from rest_framework_jwt.authentication import JSonWebTokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView


# Create your views here.

class PayView(GenericViewSet, CreateModelMixin):
    queryset = models.Order.objects.all()
    serializer_class = serializer.OrderModelSerializer
    # jwt内置的必须配置内置认证类使用
    authentication_classes = [JSONWebTokenAuthentication]
    permission_classes = [IsAuthenticated]

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data, context={'request': request})
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        return Response(serializer.context.get('pay_url'))


class SuccessView(APIView):
    def get(self, request, *args, **kwargs):
        out_trade_on = request.query_params.get('out_trade_on')
        order = models.Order.objects.filter(out_trade_on=out_trade_on)
        if order.order_status == 1:
            return Response(True)
        return Response(False)

    def post(self, request, *args, **kwargs):
        from luffy.libs.al_pay import alipay
        from luffy.utils.logger import log
        data = request.data
        out_trade_no = data.get('out_trade_on', None)
        gmt_payment = data.get('gmt_payment', None)
        signature = data.pop('sign')
        sucess = alipay.verify(data, signature)
        if sucess and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
            models.Order.objects.filter(out_trade_no=out_trade_no).update(order_status=1, pay_time=gmt_payment)
            log.info('%s订单支付成功' % out_trade_no)
            return Response('success')
        else:
            log.error("%s订单有问题" % out_trade_no)
            return Response('error')
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786652.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号