码迷,mamicode.com
首页 > 其他好文 > 详细

django-支付宝支付

时间:2019-10-17 14:10:02      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:配置路由   trade   pos   cat   base   个人   name   调用   notify   

安装python-alipay-sdk

pip install python-alipay-sdk --upgrade

配置

技术图片

 

 视图函数orders/views.py

# 订单支付
# /order/pay
from alipay import AliPay, ISVAliPay
import os
from django.conf import settings
class OrderPayView(View):
    def post(self, request):
        ‘‘‘支付页面‘‘‘
        # 判断用户是否登录
        user = request.user
        if not user.is_authenticated():
            return JsonResponse({res:0, errmsg:用户尚未登录})
        # 接收订单id
        order_id = request.POST.get(order_id)
        # 校验订单id
        if not order_id:
            return JsonResponse({res:1, errmsg:无效的订单id})
        # 查询订单信息
        try:
            order = OrderInfo.objects.get(order_id=order_id, user=user, pay_method=3, order_status=1)
        except OrderInfo.DoesNotExist:
            return JsonResponse({res:2, errmsg:订单错误})

        # 业务处理 使用python sdk调用支付宝的支付接口
        # 支付宝信息   不能放在settings里 会报错
        alipay = AliPay(
            appid="2016101200665304",
            app_notify_url=None,  # 默认回调url  如果为空的话不能用‘‘ 要用None
            # 个人私钥
            app_private_key_string=os.path.join(settings.BASE_DIR, apps/orders/app_private_key.pem),
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            alipay_public_key_string=os.path.join(settings.BASE_DIR, apps/orders/alipay_public_key.pem),
            # 加密方式
            sign_type="RSA2",  # RSA 或者 RSA2
            # 沙箱是True 正式环境是False
            debug=True  # 默认False
        )
        # 调用支付接口
        # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string 实际地址
        # 沙箱地址 https://openapi.alipaydev.com/gateway.do? + order_string  沙箱地址在alipay后面加上dev
        total_price = order.total_price + order.transit_price  # Decimal
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id,  # 订单id
            total_amount=str(total_price),  # 支付总金额 因为Decimal格式不能序列化 所以先转成字符串
            subject=天天生鲜%s%order_id,
            return_url=None,
            notify_url=None  # 可选, 不填则使用默认notify url
        )
        # 返回应答
        pay_url = https://openapi.alipaydev.com/gateway.do? + order_string
        return JsonResponse({res:3, pay_url:pay_url})

配置路由urls.py

from django.conf.urls import url
from orders.views import OrderPlaceView, OrderCommitView, OrderPayView


urlpatterns = [
    url(r^place$, OrderPlaceView.as_view(), name=place),  # 提交订单页面
    url(r^commit$, OrderCommitView.as_view(), name=commit),  # 提交订单处理
    url(r^pay$, OrderPayView.as_view(), name=pay),  # 订单支付

]

 

django-支付宝支付

标签:配置路由   trade   pos   cat   base   个人   name   调用   notify   

原文地址:https://www.cnblogs.com/yifengs/p/11691423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!