本文最后更新于:2024年7月6日 早上
前期准备 首先我们需要获得支付宝提供的权限与接口,在蚂蚁开放平台进行相关申请:https://openhome.alipay.com/platform/appDaily.htm?tab=info
申请支付宝账户权限
创建应用
沙箱测试环境
appID:我的身份
支付宝网关:测试环境
获得相关的测试账号
商户账号、客户账号后面可以通过这两个账号来进行测试
沙箱钱包(也可以不下载,直接在网页上登陆测试账号进行支付测试)
在安卓手机上进行安装
获得SDK(pay.py) 就是加密算法
SDK(加密算法,阿里没有提供python版本,从github山获得)
官方
GIHUB(请注意浏览源码)——pay.py(依赖:pip install pycryptodome)
公钥私钥
在这里下载
运行
生成公钥私钥
完成上传
应用公钥上传后自动生成支付宝公钥
在django文件中进行替换成自己的key
django程序
演示
1.运行
2.访问去支付
3.支付页面
4.登陆测试用户,完成支付
最终跳转到
说明功能正常
Django实现 代码结构
views.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 from django.shortcuts import render,redirect,HttpResponsefrom django.views.decorators.csrf import csrf_exemptfrom utils.pay import AliPayimport timefrom django.conf import settingsdef aliPay (): obj = AliPay( appid=settings.APPID, app_notify_url=settings.NOTIFY_URL, return_url=settings.RETURN_URL, alipay_public_key_path=settings.PUB_KEY_PATH, app_private_key_path=settings.PRI_KEY_PATH, debug=True , ) return objdef index (request ): if request.method == 'GET' : return render(request,'index.html' ) alipay = aliPay() money = float (request.POST.get('price' )) out_trade_no = "x2" + str (time.time()) query_params = alipay.direct_pay( subject="充气式韩红" , out_trade_no= out_trade_no, total_amount=money, ) pay_url = "https://openapi.alipaydev.com/gateway.do?{}" .format (query_params) return redirect(pay_url)def pay_result (request ): """ 支付完成后,跳转回的地址 :param request: :return: """ params = request.GET.dict () sign = params.pop('sign' , None ) alipay = aliPay() status = alipay.verify(params, sign) if status: return HttpResponse('支付成功' ) return HttpResponse('支付失败' )@csrf_exempt def update_order (request ): """ 支付成功后,支付宝向该地址发送的POST请求(用于修改订单状态) :param request: :return: """ if request.method == 'POST' : from urllib.parse import parse_qs body_str = request.body.decode('utf-8' ) post_data = parse_qs(body_str) post_dict = {} for k, v in post_data.items(): post_dict[k] = v[0 ] alipay = aliPay() sign = post_dict.pop('sign' , None ) status = alipay.verify(post_dict, sign) if status: out_trade_no = post_dict.get('out_trade_no' ) print (out_trade_no) return HttpResponse('支付成功' ) else : return HttpResponse('支付失败' ) return HttpResponse('' )
settings.py
1 2 3 4 5 6 APPID = "2016082500309412" NOTIFY_URL = "http://47.106.237.76:80/update_order/" RETURN_URL = "http://47.106.237.76:80/pay_result/" PRI_KEY_PATH = "keys/app_private_2048.txt" PUB_KEY_PATH = "keys/alipay_public_2048.txt"