一、Django支付
微信
请求地址
https://pay.weixin.qq.com/static/applyment_guide/applyment_index.shtml
申请条件
支付宝
支付宝支付流程:
-
卖家发出购买请求,服务生成订单
-
提交订单,卖家将支付请求发到支付宝
-
支付宝返回支付页面
-
买家在支付页面完成支付
-
支付处理付款请求
-
支付宝返回处理结果(支付完成,支付失败,支付进行中)
支付url
https://open.alipay.com/platform/home.htm
开发测试 使用沙箱环境
下载安卓端
账号信息
支付宝接口文档地址 https://docs.open.alipay.com/
配置公钥 私钥
以卖家的身份进行收款,
支付宝已经写好的sdk,可以使用模块的方式使用,
使用需要安装
pip install pycryptodome ## 阿里sdk的依赖包
pip install python-alipay-sdk --upgrade
使用python完成支付
创建文件,测试demo
from alipay import AliPay
# 公钥
alipay_public_key_string = '''-----BEGIN PUBLIC KEY-----
公钥
-----END PUBLIC KEY-----'''
# 私钥
alipay_private_key_string='''-----BEGIN PRIVATE KEY-----
私钥
-----END PRIVATE KEY-----'''
# 实例化支付对象
alipay = AliPay(
appid='2016101300673951',
app_notify_url=None,
app_private_key_string=alipay_private_key_string,
alipay_public_key_string=alipay_public_key_string,
sign_type="RSA2",
)
# 实例化订单
order_string = alipay.api_alipay_trade_page_pay(
subject = '牛羊生鲜', # 交易主题
out_trade_no = '10000000009', # 订单号
total_amount='400000', # 交易总金额
return_url=None, # 请求支付之后及时回调的一个接口
notify_url=None # 通知地址
)
# 发送支付请求
# 请求地址:支付网关+实例化订单
result = 'https://openapi.alipaydev.com/gateway.do?'+order_string
print(result)
完成
- 提交订单,卖家将支付请求发到支付宝
- 支付宝返回支付页面
- 买家在支付页面完成支付
settings.py
视图
from alipay import AliPay
from Qshop.settings import alipay_private_key_string,alipay_public_key_string
def AlipayView(request):
order_id=request.GET.get('order_id') # 订单ID
payorder=PayOrder.objects.get(id=order_id)
# 实例化支付对象
alipay = AliPay(
appid='2016101300673951',
app_notify_url=None,
app_private_key_string=alipay_private_key_string,
alipay_public_key_string=alipay_public_key_string,
sign_type="RSA2",
)
# 实例化订单
order_string = alipay.api_alipay_trade_page_pay(
subject='天天生鲜', # 交易主题
out_trade_no=payorder.order_number, # 订单号
total_amount=str(payorder.order_total), # 交易总金额
return_url=None, # 请求支付之后及时回调的一个接口
notify_url=None # 通知地址
)
# 发送支付请求
# 请求地址:支付网关+实例化订单
result = 'https://openapi.alipaydev.com/gateway.do?' + order_string
return HttpResponseRedirect(result)
路由
模板
支付提交后,跳转到结果页面
返回处理结果
视图
def payresult(request):
order_number = request.GET.get('out_trade_no')
payorder = PayOrder.objects.get(order_number=order_number)
payorder.order_status=1
payorder.save()
return render(request,'buyer/payresult.html',locals())
路由
模板
{% extends 'buyer/base.html' %}
{% block title %}
支付结果
{% endblock %}
{% block content %}
<div class="list_model">
<h1>支付结果</h1>
<table>
{% for key,value in request.GET.items %}
<tr>
<th>{{ key }}:</th>
<td>{{ value }}</td>
</tr>
{% endfor %}
</table>
</div>
{% endblock %}
其他支付方式
富有,连连,渤海银行,攀枝花银行,民生银行
请求方式
- api接口
- form表单(网关接口)
form表单支付流程
api支付流程