django-支付宝支付

安装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'),  # 订单支付

]

猜你喜欢

转载自www.cnblogs.com/yifengs/p/11691423.html