支付宝支付和微信支付是当今互联网常用的功能
一: 支付宝研发服务介绍
1. 百度搜索蚂蚁金服开放平台, 使用支付宝进行登录
进入研发服务界面
下载对应版本的压缩包后运行
在对应的文件下会生成两个对应的文件, 在keys文件夹下建立两个文件, 不要设置后缀, 一个用来保存公钥, 一个用来保存私钥(名称最好要见名知意). 把生成的公钥和私钥分别粘贴在这两个文件夹下
粘贴的时候在文件的开头与结尾加入以下代码
二: Python操作
1. 因为Python没有集成支付宝的sdk, 所以需要安装第三方的包
pip install python-alipay-sdk
2. 在视图函数里面引入所需要的类
from alipy import AliPay
3. 创建一个实例对象
ali_pay = AliPay(
# 你的appid
appid = settings.ALIPAY_APPID,
# 使用默认的回调地址
app_notify_url = None,
# 公钥的路径
app_private_key_path = os.path.join(settings.BASE_DIR, 'keys/pri'),
# 私钥的路径
alipay_public_key_path = os.path.join(settings.BASE_DIR, 'keys/pub),
# 默认是False 测试环境配合沙箱环境使用, 如果是生成环境改为False
debug = False
)
4. 网页上的支付宝支付需要跳转到支付宝界面, 进行支付
order_string =
# 支付宝页面支付
ali_py.api_alipay_trade_page_pay(
# 订单编号
out_trade_no = order.o_id,
# 订单总额
total_amount = total_price,
# 订单描述信息
subject = 'xxxxxx购物订单-{}'.format(order.o_id),
# 回调地址, 订单支付成功后回调的地址
return__url = '支付完成后跳转的地址'
)
5. 拼接支付地址
url = settings.ALIPAY_URL + '?' + order_string
6. 返回url地址
7. 监听订单状态是否支付, 我们可以写一个视图函数
# 监测订单是否支付
def check_pay(request):
if request.method == 'GET':
o_id = request.GET.get('o_id')
alipay = AliPay(
appid=settings.ALIPAY_APPID,
app_notify_url=None,
app_private_key_path=os.path.join(settings.BASE_DIR,'keys/pri'),
alipay_public_key_path=os.path.join(settings.BASE_DIR,'keys/pub'),
sign_type='RSA2',
# 沙箱环境下没有查询订单服务
debug=True
)
while True:
response = alipay.api_alipay_trade_query(o_id)
# code 40004 支付订单未创建
# code 10000 trade_status WAIT_BUYER_PAY 等待支付
# oode 10000 trade_status TRADE_SUCCESS 支付成功
# response 是字典
code = response.get('code')
trade_status =response.get('trade_status')
if code == '10000' and trade_status == 'TRADE_SUCCESS':
# 支付成功
# 返回支付结果
return JsonResponse({
'status':1,
'msg':'支付成功'
})
elif (code == '10000' and trade_status =='WAIT_BUYER_PAY') or code == '40004':
# 表示支付暂时没有完成
continue
else:
return JsonResponse({
'status':0,
'msg':'支付失败'
})
这里主要是获取code的值来判断用户是否支付
这样就完成了Django对接支付宝支付的操作~~~~~~