python

超轻量级php框架startmvc

django实现支付宝支付实例讲解

更新时间:2020-08-03 13:36:01 作者:startmvc
安装python-alipay-sdkpipinstallpython-alipay-sdk--upgrade配置视图函数orders/views.py#订单支付#/order/payfrom

安装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 支付宝支付