支付宝官方文档

链接:https://opendocs.alipay.com/open/270/105898/

步骤简介

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1.进行实名认证

2.下载开发助手
链接:https://opendocs.alipay.com/open/291/introduce

3.利用开发助手生成RSA2应用密钥以及应用公钥

4.支付宝开放平台-->沙箱环境-->沙箱应用-->RSA2密钥设置-->获得支付宝公钥

5.下载沙箱版支付宝(测试用)
链接:https://openhome.alipay.com/platform/appDaily.htm?tab=tool

6.在沙箱环境中的沙箱账号中获得买家账号以及卖家账号
链接:https://openhome.alipay.com/platform/appDaily.htm?tab=account

7.由于支付宝没有提供python对应的sdk,因此我们使用第三方的支付宝开源框架alipay
git地址:https://github.com/fzlee/alipay
使用:pip install python-alipay-sdk --upgrade

8.在自己的应用中进行配置即可

详细使用教程

支付宝的调用流程图如下

支付宝调用流程

1
2
3
4
5
6
7
8
1.前台点击支付按钮
2.往后台发送post请求,后台获得商品等信息
3.使用alipay往支付宝的接口发送请求,携带前端的返回地址以及后端的回调接口地址。
4.获得支付宝的付款页面地址返回给前端
5.前端跳转到支付宝的支付页面接口
6.用户输入账号密码后跳转回原先的商户页面,前台往后台发送一个get请求,返回订单号,可以通过该订单号去查询订单情况
7.支付宝往我们后端接口地址发送一个异步的post请求
8.后端进行数据库修改等操作

目录结构

1
2
3
4
5
6
7
8
libs                                    # 第三方模块都放这个包下
├── iPay # aliapy二次封装包
│ ├── __init__.py # 包文件
│ ├── pem # 公钥私钥文件夹
│ │ ├── alipay_public_key.pem # 支付宝公钥文件
│ │ ├── app_private_key.pem # 应用私钥文件
│ ├── pay.py # 支付文件
└── └── settings.py

alipay_public_key.pem

1
2
3
-----BEGIN PUBLIC KEY-----
支付宝公钥
-----END PUBLIC KEY-----

app_private_key.pem

1
2
3
-----BEGIN RSA PRIVATE KEY-----
应用私钥
-----END RSA PRIVATE KEY-----

setting.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import os
# 应用私钥
APP_PRIVATE_KEY_STRING = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'pem', 'app_private_key.pem')).read()

# 支付宝公钥
ALIPAY_PUBLIC_KEY_STRING = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'pem', 'alipay_public_key.pem')).read()

# 应用ID
APP_ID = '2016093000631831'

# 加密方式
SIGN = 'RSA2'

# 是否是支付宝测试环境(沙箱环境),如果采用真是支付宝环境,配置False
DEBUG = True

# 支付网关
GATEWAY = 'https://openapi.alipaydev.com/gateway.do' if DEBUG else 'https://openapi.alipay.com/gateway.do'

pay.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from alipay import AliPay
from . import settings

# 支付对象
alipay = AliPay(
appid=settings.APP_ID,
app_notify_url=None,
app_private_key_string=settings.APP_PRIVATE_KEY_STRING,
alipay_public_key_string=settings.ALIPAY_PUBLIC_KEY_STRING,
sign_type=settings.SIGN,
debug=settings.DEBUG
)

# 支付网关
gateway = settings.GATEWAY