下面是针对使用Django框架项目接入第三方支付宝支付的相关链接:

支付宝开发平台登录:
https://open.alipay.com/platform/home.htm

沙箱环境:
沙箱应用:https://docs.open.alipay.com/200/105311
沙箱账号:https://openhome.alipay.com/platform/appDaily.htm?tab=account

支付宝开发者文档
文档主页:https://openhome.alipay.com/developmentDocument.htm
产品介绍:https://docs.open.alipay.com/270
快速接入:https://docs.open.alipay.com/270/105899/
SDK:https://docs.open.alipay.com/270/106291/
python对接支付宝SDK:https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
python对接支付宝SDK安装:pip install python-alipay-sdk --upgrade
API列表:https://docs.open.alipay.com/270/105900/

第一项:

接入步骤:
1.创建应用
2.配置密钥
3.搭建和配置开发环境
4.接口调用

接下来是接入支付宝支付的详细讲解:
1.首先我们需要在自己的工程目录下创建一个pay的包,然后再创建一个keys的文件夹,keys文件里面用来存放应用的秘钥和公匙。

2. 生成应用的私钥和公钥
进入终端
切换目录

cd  pay/keys/

输入下面的命令:

openssl
openssl> genrsa -out app_private_key.pem 2048  # 私钥RSA2
openssl> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 导出公钥
openssl> exit

执行完之后会在你的文件下面出现下面两个(密匙和公钥):

3.修改公匙
首先你需要进入支付宝的开发平台选择

创建你的应用,然后进入沙箱开发环境:

什么是沙箱环境尼?
蚂蚁沙箱环境(Beta)是协助开发者进行接口功能开发及主要功能联调的辅助环境。沙箱环境模拟了开放平台部分产品的主要功能和主要逻辑(当前沙箱支持产品请参考“沙箱支持产品列表”)。
在开发者应用上线审核前,开发者可以根据自身需求,先在沙箱环境中了解、组合和调试各种开放接口,进行开发调通工作,从而帮助开发者在应用上线审核完成后,能更快速、更顺利的进行线上调试和验收工作。

选择查看项目应用公匙

cat app_public_key.pem

把上面项目生成的公匙复制到支付宝的的应用公匙里面:

再选择将支付宝的公钥内容复制到alipay_public_key.pem文件中


注意,还需要在公钥文件中补充开始与结束标志:

-----BEGIN PUBLIC KEY-----
此处是公钥内容
-----END PUBLIC KEY-----

然后到这里就配置好应用程序的密匙和公钥。

第二项:

发起支付
下面视图函数的编写参考(感谢github开发者提供的文档)
https://github.com/fzlee/alipay/blob/master/README.zh-hans.md

1.首先需要安装python对接支付宝SDK:

pip install python-alipay-sdk --upgrade

接下来是后端的接口说明:
请求方式:Get
请求的路径:orders/(?P<order_id>\d+)/payment/
参数说明:
order_id 订单编号 str
alipay_url 支付宝支付链接 str
2.开始编写视图函数
需要导入的类

from rest_framework.views import APIView  #REST framework 提供的一级视图
from rest_framework.response import Response
from orders.models import OrderInfo
from rest_framework import status
from alipay import AliPay  #阿里支付
from mall import settings

视图思路的分析:
当用户点击支付按钮的时候,我们需要让前端发送一个ajax请求,将 订单id发送给我们
必须是登录用户才可以访问此接口

1 我们接收参数, 校验参数
2. 根据订单id查询数据
3. 创建支付宝对象
4. 调用支付宝的方法生成order_string
5. 拼接url,并且返回

class PaymentView(APIView):permission_classes = [IsAuthenticated]  #请求头判断是否的请求的权限def get(self,request,order_id):# 1. 我们接收参数, 校验参数# 2. 根据订单id查询数据try:# 为了让我们查询的更准确,我们需要再添加几个查询条件# 查询未支付的订单# 查询这个用户的订单order = OrderInfo.objects.get(order_id=order_id,   #订单的iduser=request.user,status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'])except OrderInfo.DoesNotExist:return Response(status.HTTP_400_BAD_REQUEST)# 3. 创建支付宝对象app_private_key_string = open(settings.APP_PRIVATE_KEY_PATH).read()  #app的密匙alipay_public_key_string = open(settings.ALIPAY_PUBLIC_KEY_PATH).read() #app的公匙alipay = AliPay(appid=settings.ALIPAY_APPID,    #就是一大串数字类似2016081903467app_notify_url=None,  # 默认回调urlapp_private_key_string=app_private_key_string,# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,alipay_public_key_string=alipay_public_key_string,sign_type="RSA2",  # RSA 或者 RSA2debug = settings.ALIPAY_DEBUG  # 默认False 如果使用debug的调试模式设置为True)# 4. 调用支付宝的方法生成order_string# 如果你是 Python 3的用户,使用默认的字符串即可subject = "测试订单"# 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_stringorder_string = alipay.api_alipay_trade_page_pay(out_trade_no=order_id,total_amount=str(order.total_amount), # 这里类型我们要由 decimal转换为 strsubject=subject,return_url="http://ip地址:端口号/pay_success.html",notify_url=None  # 可选, 不填则使用默认notify url)# 5. 拼接url,并且返回url = settings.ALIPAY_URL + '?' + order_stringreturn Response({'alipay_url':url})

在配置文件中编辑支付宝的配置信息

ALIPAY_APPID = "2016091567523030"
ALIPAY_URL = "https://openapi.alipaydev.com/gateway.do"
ALIPAY_DEBUG = True
APP_PRIVATE_KEY_PATH = os.path.join(BASE_DIR, 'apps/pay/keys/app_private_key.pem')
ALIPAY_PUBLIC_KEY_PATH = os.path.join(BASE_DIR, 'apps/pay/keys/alipay_public_key.pem')

在pay/urls.py中设置url信息

from django.conf.urls import url
from . import viewsurlpatterns = [#/pay/orders/(?P<order_id>)\d+/url(r'^orders/(?P<order_id>\d+)/$',views.PaymentView.as_view(),name='pay'),
]

在项目名/urls.py中设置url信息

urlpatterns = [url(r'^pay/',include('pay.urls',namespace='pay')),
]

视图的执行首先是从项目的url寻找路径,然后再连接到应用pay的url里面,当接受到前端的请求时候,便会执行相对应的视图功能函数。

第三步

保存支付结果
用户支付成功后,支付宝会将用户重定向到 pay_success.html,并携带支付结果数据
后端接口设计:

请求方式: PUT
路径:/pay/status/?支付宝参数
请求参数: 在查询字符串中携带支付宝参数
返回数据:
trade_id 支付宝流水号 str

继续编写视图函数views.py

 class PayStatusAPIView(APIView):def put(self,request):# 1. 创建alipay对象app_private_key_string = open(settings.APP_PRIVATE_KEY_PATH).read()alipay_public_key_string = open(settings.ALIPAY_PUBLIC_KEY_PATH).read()alipay = AliPay(appid=settings.ALIPAY_APPID,app_notify_url=None,  # 默认回调urlapp_private_key_string=app_private_key_string,# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,alipay_public_key_string=alipay_public_key_string,sign_type="RSA2",  # RSA 或者 RSA2debug=settings.ALIPAY_DEBUG  # 默认False)# 2.验证数据data = request.query_params.dict()# sign 不能参与签名验证signature = data.pop("sign")# verify确认是否成功success = alipay.verify(data, signature)if success:# 3.验证成功之后,可以从 data中获取 支付宝的订单id和 我们的订单id# 支付宝的交易idtrade_id = data.get('trade_no')# 商家idout_trade_no = data.get('out_trade_no')#1. 把支付宝的订单id和 我们的订单id 保存起来Payment.objects.create(order_id=out_trade_no,trade_id=trade_id)# 2. 更新订单的状态OrderInfo.objects.filter(order_id=out_trade_no).update(status=OrderInfo.ORDER_STATUS_ENUM['UNSEND'])#3. 返回 支付宝的订单idreturn Response({'trade_id':trade_id})

Django框架实现支付宝第三方支付相关推荐

  1. 浅谈支付宝第三方支付

    技术点(九):支付宝第三方支付 1)下载demo地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.aWu6YY& ...

  2. java支付宝第三方支付详解

    1.引入支付宝sdk文件. <dependency><groupId>com.alipay.sdk</groupId><artifactId>alipa ...

  3. 支付宝第三方支付接口java调用详细文档

    进入蚂蚁金服开放者平台 登录 - 支付宝 下载demo 修改文件 App_id Merchant_private_key Alipay_public_key 修改网关 注意,这边是在沙箱模式下,如果真 ...

  4. 支付宝APP支付 统一下单 php服务端 tp5

    /*支付宝第三方支付 * *生成APP支付订单信息 * @param number uid 用户id * @param string token 用户token * @param number oid ...

  5. springboot+调用支付宝第三方接口(沙箱环境)

    springboot+调用支付宝第三方接口(沙箱环境) 大神勿喷!! 网址:https://developers.alipay.com/platform/developerIndex.htm 沙箱环境 ...

  6. 调用支付宝第三方接口(沙箱环境) Spring Boot+Maven

    调用支付宝第三方接口(沙箱环境) Spring Boot+Maven 一.蚂蚁金服开放平台的操作 网址:https://open.alipay.com/platform/home.htm 支付宝扫码登 ...

  7. 如何在spring boot+maven项目中调用支付宝第三方接口(沙箱环境)

    一 首先第一步需要去支付宝的开放平台做一些操作,输入下面的网址:网址 (需要登陆,扫码或者用户密码登陆)登陆网站以后 具体操作如下面视图: 开发者中心->研发服务(沙箱) -----这里需要开通 ...

  8. 支付宝---支付功能 支付宝即时到帐接口的python实现,示例采用django框架

    支付宝即时到帐接口的python实现,示例采用django框架 支付宝即时到帐接口的python实现,示例采用django框架 因工作需要研究了支付宝即时到帐接口,并成功应用到网站上,把过程拿出来分享 ...

  9. Django对接支付宝Alipay支付接口

    最新文章更新见我的个人主页: https://xzajyjs.cn 我们在使用Django构建网站时常需要对接第三方支付平台的支付接口,这里就以支付宝为例(其他平台大同小异),使用支付宝开放平台的沙箱 ...

最新文章

  1. Ubuntu 12.04自带包安装GLPI IT资产管理软件
  2. Oracle 内、外连接
  3. csdn,我真的来了。
  4. spring与cxf的整合
  5. SAP 电商云 Spartacus UI Quick Order 主页的实现
  6. dataoutputstream.write 有时无法发送_RTK实操——CORS官方网教您如何解决RTK无法固定的问题...
  7. idea菜单栏消失如何调整回来
  8. Bandicam_v4.6.5便携特别版 高清视频录制工具
  9. graphics | 基础绘图系统(八)——棘状图、符号图、多边形(路径)图、Cohen-Friendly关联图、条件密度图...
  10. Xshell上传文件【转】
  11. k3刷机 重置_什么是联想 K3刷机前的双清
  12. 【ROS2原理11】C++编程的要点
  13. (转)DEDECMS模板原理、模板标签学习 - .Little Hann
  14. Datawhale组队学习——Pytorch进阶训练技巧
  15. Google Apps申请注册
  16. 员工管理和激励的十个经典故事
  17. Android OpenCV (五十九):离散傅里叶变换
  18. 为什么你只需要CD音质:16bits, 44.1kHz的意义
  19. FPGA底层学习-可配置逻辑块(Configurable Logic Block,CLB)
  20. C/C++超全资料,编程发烧友不可不分享

热门文章

  1. 设计模式之_动态代理_01
  2. 原型共享数据 原型简单语法 原型中方法是可以相互访问 实例对象属性方法层层搜索
  3. postgresql主从备份_PostgreSQL主从流复制与手动主备切换架构
  4. 1984年王安微型计算机,王安简:今年中科大少年班最小的学生
  5. JavaFX 中的像素、分辨率与缩放比
  6. linux字符设备开发
  7. 现代浏览器的工作原理
  8. JDK的OutputStream为什么方法write(int b)的入参类型是int呢?
  9. 剑指offer 回溯法 面试题12 矩阵中的路径 面试题13 机器人的运动范围
  10. 关于mydumper的.metadata文件丢失