Django 接入 支付(支付宝为例)
支付宝开放平台入口
登录 账号
控制台
创建应用
开发服务-测试
沙箱环境
沙箱环境
支付宝提供给开发者的模拟支付的环境。跟真实环境是分开的。
支付宝开发文档
-
电脑网站支付产品介绍: https://docs.open.alipay.com/270
-
电脑网站支付快速接入: https://docs.open.alipay.com/270/105899/
-
Python支付宝SDK: 这里使用第三方编写,调用简洁
https://github.com/fzlee/alipay/blob/master/README.zh-hans.md- SDK安装:
pip install python-alipay-sdk --upgrade
- SDK安装:
配置RSA2公私钥
生成项目公钥
$ openssl
$ OpenSSL> genrsa -out app_private_key.pem 2048 # 制作私钥RSA2
$ OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 导出公钥
$ OpenSSL> exit
会生成 app_private_key.pem
, app_public_key.pem
两个文件
支付宝设置(setting中)
# 支付宝 设置
ALIPAY_APPID = '2021000117671833'
ALIPAY_DEBUG = True
ALIPAY_URL = 'https://openapi.alipaydev.com/gateway.do'
ALIPAY_RETURN_URL = 'http://www.demo.site:8080/pay_success.html'
APP_PRIVATE_KEY_PATH = os.path.join(BASE_DIR, 'apps/payment/keys/app_private_key.pem')
ALIPAY_PUBLIC_KEY_PATH = os.path.join(BASE_DIR, 'apps/payment/keys/alipay_public_key.pem')
调用时注意
notify_url=" ",
此参数一定要写,Str类型
# 生成登录支付宝连接
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no=order_id,
total_amount=str(order.total_amount),
subject="美多商城%s" % order_id,
return_url=settings.ALIPAY_RETURN_URL,
notify_url=" ",
完整代码
app_private_key_string = open(settings.APP_PRIVATE_KEY_PATH).read()
alipay_public_key_string = open(settings.ALIPAY_PUBLIC_KEY_PATH).read()
# 创建支付宝对象
alipay = AliPay(
appid=settings.ALIPAY_APPID,
app_notify_url=None, # 默认回调url
app_private_key_string=app_private_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
alipay_public_key_string=alipay_public_key_string,
sign_type='RSA2',
debug=True
)
print("打印参数》》》》》")
print(type(settings.ALIPAY_RETURN_URL))
print("执行》》》》》》》")
# 生成登录支付宝连接
# 老版本接口
# order_string = alipay.api_alipay_trade_page_pay(
# out_trade_no=order_id,
# total_amount=str(order.total_amount),
# subject="美多商城%s" % order_id,
# return_url=settings.ALIPAY_RETURN_URL,
# notify_url=" ",
# )
# 生成登录支付宝连接
# 3.0 接口方法
order_string = alipay.client_api(
"alipay.trade.page.pay",
biz_content={
"subject": "美多商城%s" % order_id,
"out_trade_no": order_id,
"total_amount": str(order.total_amount),
"product_code": "FAST_INSTANT_TRADE_PAY",
},
return_url=settings.ALIPAY_RETURN_URL,
)
# 响应登录支付宝连接
# 真实环境电脑网站支付网关:https://openapi.alipay.com/gateway.do? + order_string
# 沙箱环境电脑网站支付网关:https://openapi.alipaydev.com/gateway.do? + order_string
alipay_url = settings.ALIPAY_URL + "?" + order_string
# print("alipay_url")
# print(alipay_url)
return JsonResponse({'code': 0, 'errmsg': 'OK', 'alipay_url': alipay_url})