Python服务器运维笔记:第三章电商实战 – 3.1.6 支付宝支付

前言:本文是学习网易微专业的《python全栈工程师》 中的《服务器运维开发工程师》专题的课程笔记,欢迎学习交流。同时感谢老师们的精彩传授!

一、课程目标

  • 支付宝支付流程
  • 支付宝接口
  • 商城支付接口

二、详情解读

2.1.支付宝支付流程
2.1.1.支付宝支付通过url跳转完成

用户支付时是根据订单生成的支付url跳转到支付宝网站进行支付,比如下面的url
https://excashier.alipaydev.com/standard/auth.html?payOrderId=28e8809f35ef413e9dc795d9abf1c5fb.00
在这里插入图片描述

2.1.2.支付宝支付完成后需要通知商家服务器接口

支付完成后,支付宝通知商家,该订单已经完成支付
在这里插入图片描述

2.1.3.支付完成确认

在这里插入图片描述

2.1.4.支付宝支付流程

在这里插入图片描述

2.2.支付宝支付开发准备
2.2.1.支付宝接入准备

1.申请商家支付宝账号,并且申请商家支付功能
2.支付宝有不同应用场景,可能需要签订不同的协议

2.2.2.支付宝沙箱环境

1.进入支付宝开放平台:https://openhome.alipay.com
2.入驻成为开发者
3.创建相关应用
4.在开发服务部分进入沙箱环境
在这里插入图片描述

实操:
step1: 进入页面:https://openhome.alipay.com/platform/home.htm
用支付宝扫码登录,如果还不是开发者,则注册成为开发者。

在这里插入图片描述
step2: 进入开发者中心:
在这里插入图片描述
Step3: 创建网页&移动应用
在这里插入图片描述
Step4: 进入开发服务里的沙箱环境:
在这里插入图片描述
在沙箱环境的沙箱应用里,会创建一个应用,这个应用只能在沙箱环境里有效:
在这里插入图片描述
说明:
沙箱环境:表示模拟正式的支付流程和环境,只不过数据都是虚拟的。

Step5: 下载支付宝密钥生成器,生成密钥。生成器下载地址:https://opendocs.alipay.com/open/291/106097/
在这里插入图片描述
安装完成后,点击生成密钥,然后复制应用公钥,下一步要用到:
在这里插入图片描述
Step6: 生成支付宝公钥。如下图,点击沙箱环境里的RSA2密钥的设置:
在这里插入图片描述
在这里插入图片描述
点击上面的保存设置,即可得到下图结果,这里的支付宝公钥程序里要用到:
在这里插入图片描述
Step7: 支付宝支付里程序的配置。打开文件flask-mall-base/pay/alipay/pay_example.py,修改下图的配置:
在这里插入图片描述
app_id和支付宝网关在沙箱应用里:
在这里插入图片描述
应用私钥在支付宝生成器里的:
在这里插入图片描述
支付宝公钥在沙箱环境里:

Step8: 打开文件flask-mall-base/xp_mall/settings.py,填写ALIPAY_APP_ID
在这里插入图片描述
然后新建文件夹flask-mall-base/alipay_cert/,在支付宝生成器工具里打开密钥文件路径
在这里插入图片描述
将如下的两个文件,
在这里插入图片描述
分别重命名为:alipay_public_keyalipay_private_key
在这里插入图片描述
然后将这两个文件上传到flask-mall-base/alipay_cert/目录下。到此,支付宝程序里的配置准备工作完成。

2.3.支付接口文档
2.3.1.支付宝代码实现

统一下单支付接口:
https://opendocs.alipay.com/apis/api_1/alipay.trade.page.pay/

在这里插入图片描述
python的程序可以参考http里的示例:
在这里插入图片描述
支付时会传递参数到支付网关地址中,支付宝会根据订单的状态跳转到相应的接口中:
在这里插入图片描述
异步通知接口文档地址:https://opendocs.alipay.com/open/270/105902
1.异步通知在构造请求参数中用notify_url参数定义
2.该url为支付宝服务器与商家网站服务器之间通讯接口
3.支付宝支付成功之后,支付宝就会在后台对该接口进行调用

2.4.利用支付宝SDK开发支付功能
2.4.1.支付宝代码实现

Step1: 安装aliypay-python模块

1
pip install alipay-python

appid与公钥、私钥配置
在这里插入图片描述
统一下单支付接口:
AlipayTradePageModel为领土完整封装好的对象,只需要传递订单参数
在这里插入图片描述
打开文件flask-mall-base/pay/alipay/pay_example.py,修改下图中的配置:
在这里插入图片描述

2.5.flask-alipay

flask-alipay是基于flaskalipay插件,该插件对alipay-python进行了封装,可以更方便的在flask中使用支付宝支付。

安装方法:

1
pip install flask-alipay

插件使用方法:
1.配置参数。在settings中配置appid,return_url,notify_url,公钥,私钥证书文件路径。

2.在extendions扩展中创建Alipay支付对象实例
在这里插入图片描述
3.订单创建后,调用alipay.pay_order(order)方法,Alipay对象具有一个pay_order方法,该方法未完成参数的封装生成支付url
在这里插入图片描述
alipay.pay_order方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
def pay_order(self, order):
    self.model.out_trade_no = order.order_no
    self.model.total_amount = order.total_price
    self.model.subject = order.subject
    self.model.body = order.subject
   
    _request = AlipayTradePagePayRequest(biz_model=self.model)
    _request.notify_url = self.notify_url
    _request.return_url = self.return_url
   
    # 得到构造的请求,如果http_method是GET,则是一个带完成请求参数的url,如果http_method是POST,则是一段HTML表单片段
     _response = self.client.page_execute(_request, http_method="GET")
     return _response

打开文件flask-mall-base/xp_mall/settings.py,修改下面的配置:
在这里插入图片描述

2.6.回调域名问题

由于支付完成后,支付宝需要对商家网站进行回调,因此测试地址必须可以被公网访问
1.使用云服务器与注册域名
2.使用内网穿透工具,比如花生壳
3.直接使用路由器外网ip,作DMZ主机

三、课程小结

  • 01 支付宝支付流程。从订单的创建,到支付完成之后的通知网站支付成功,这个流程要掌握。不知道的要多看几遍,或者在图纸上画一画。
  • 02 支付宝接口。要知道支付宝接口文档在哪里,我们使用的是哪一个接口,参数的说明等等,要看一遍。
  • 03 flask-alipay。了解接口不是要求从0开始写接口,这对我们当前有点挑战性,而且在实际工作中都是已经封装好了相应的接口,只需要进行调用即可。关键的是要掌握原理,了解接口之间到底发生了哪些事情,传递了哪些参数,加密的方法,安全是如何保证的。

通过这节课,同学们要掌握如何通过配置让网站实现支付宝的支付功能。需要配置appid,公钥、私钥等配置。