支付宝支付原理
1.支付宝支付流程
2. 新建支付宝应用
# 访问"支付宝开发平台"登录,可以访问开发者中心
https://open.alipay.com/platform/home.htm
# 可以参考"电脑网站支付" 熟悉电脑支付整体流程
https://docs.open.alipay.com/270/105899/
第一步:创建应用(使用沙箱环境测试)
- 沙箱环境说明
- 线上环境需要创建应用,因为我们不是企业,没有资质,所以只能申请沙箱环境
- 简单来讲沙箱环境就是给开发者使用的测试环境
- 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info
- 公钥加密、私钥解密
2.2 按照官方要求生成密钥
-
安装支付宝开放平台开发助手
-
一定要存储两个东西
- 支付宝公钥:我发送信息给支付宝,使用支付宝公钥进行加密 - 应用私钥:我自己生成的,支付宝给我发送的信息是用我上传的app公钥加密,只有我 自己的私钥可以解密
2.3 把生成的应用公钥粘贴到沙箱环境的app中
- 生成密钥参考官网:https://docs.open.alipay.com/291/105971
1.粘贴app公钥到沙箱环境中
2.点击查看支付宝公钥,下面会用
2.4 查看沙箱环境账号信息
# 商家信息
商家账号tuyprl9260@sandbox.com
登录密码111111
# 买家信息
买家账号rrkcsk8079@sandbox.com
登录密码111111
支付密码111111
3. 测试获取支付宝扫码链接
3.1 支付宝开发网址
支付宝开放平台: https://open.alipay.com/platform/home.htm
支付宝沙箱环境: https://openhome.alipay.com/platform/appDaily.htm?tab=info
支付宝开发者文档:https://openhome.alipay.com/developmentDocument.htm
电脑网站支付流程:https://docs.open.alipay.com/270
生成签名:https://docs.open.alipay.com/291/106103/
python-alipay-adk : https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
3.2 说明
- 阿里官方没有提供python对接支付的sdk,但是python库中有非官方的sdk包可以使用
- python-alipay-adk : https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
- 使用起来非常简单,只要传入几个必要的参数就可以完成
- 由于支付对安全要求很高,所以要理解对接支付宝安全的流程: 公钥加密、私钥解密 这八个字
3.3 app_private_key.pem app
私钥
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAuhA0MBh4prGIb+SzjT4/427IokJw5sKHWccth0gSN4eavJiYcXVcHCtATq/2s1/1bUZBVQV/0pb+GuuOB3B5iOWovhaE0jjA3Tms5CIX+vrM07+rcCVA7itpZ2WgQtRa5YKumypyrNk3NY+77h8xZuX7N6w5Z+6Uu7TVj0JxXEY8pXyhoki86aKkiw2Z4Ma5BZfFus3iazYjHn0uLLUt+5dsKngVeDZJDSjz6/AKbVA/10Vf4lSqGqgIDG4ElVpn+aiTfv5BgfU+BaomXfQW26rY4nRWXwPRR+wsqSmGIVVF6681bnAUDHph/DGuZUYMJwYOfh/ekYE9GVFTVB1K/wIDAQABAoIBAEejT4SpF2MO/bofMyaRriWSFPusWy3t/hEKCDSLAkCRHHm6ww8EIbfSy0rAo1rC+ordPvBOUr2xVxrkUOX6X0DfM84ke3U5VsCWoUOhANyoTc7FgGuIXGyXGFkwHrk8a9bsLvAdMtPsOj6MHc58AhhdOhFgZSXoDSoMYSFscpsU4gF7p//LJSbiAvf9iU0N+OLN1C1sS5ktu3xVOuuI1uMsktRDMyy+eKo4i/Bhgt6IM2PdERZYXKW7PSK2HZNuniDtqapoMgtLw6QyI+aKvkSWxfk4qQ4vvon+bSdq/We+1XcWHAyGt2voADkb5JOFZ/vMh4jiTBLVNUl/oqDmGkkCgYEA/R4xe5PZ2yiYeM+gma4qPjG8ysUwujKmhZqrmnACcKs+Mjg0EAdcWzXNfckbepjpiZEWUQLHFHHZdtxGmkLzz6qRMmYdriqzIMArvw4ksmNAm1klpZPjDD0DxOaCd9fnYT+nG91GEvqgIZOTWn8BkpBeNKEzGU9twfoxTHJowYUCgYEAvC6OBcTd9wIr/LKlFPMETxKROR42DxNifeQSRaPNwKbNp8rxEVJbkDt7Ax4t3AgcoXmwBwlrM6dJRxN9k+HYYW08TXw+Pm27fCRUnQ4uz/KlmxZp+AlNI3VyDAwQRA90rayicO7j2+5cB+Mk0aXnq2FYpv1SLLhUGzBxtOF5f7MCgYEA1VlFzCvrTVcCbZJUhDTRVmsF/sQHNmrLAYJFcn9HD0DHw/yrpXcO2bKX6pZAmy2Ya2Pns5DrzMfJzO4OdKhKaZgTmq+IBO3o3oocVYXOWK5gHpEdslrc3cvwCV9iSTGqzcWhTVNNZWHq52JEqdqzsJ4PSb02HPdeREpmk1E8CyECgYATYQP1KiHllw6qlkcT0jbmYbYc2LSedtOUvVD4ZPcCWOsi1W5f50hQoR944bm9SASSyHJNNzYX+qk8LZCoEwDyf4pPPHU4fpppHWCtT9GYTpepUfSVu3d7KFQXU4K1T5YncHjGAoPqmTBXC5g2Esy5xGuZvsqgmlbm+eUryHB3qwKBgQD6f5JcSsvz7zFO2h9oIzPZ4gKq69tFhyChNz60ruZ6NT6i31onsc4xBPqUeZ8Rag3ynBpk7ljLsK6n/za8+LbyusMJita9BwKsYdiUAnYiiL9+J+fAgfxtovK7y+b1fE/n/Tec1JKNU7tMouZ4s5vUFaMs6dx+jSNEuD9EiWlLug==
-----END RSA PRIVATE KEY-----
3.4 alipay_pubic_key.pem
支付宝公钥
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtK2yuyey2y2jPtdU7RyzXwj2CH2cO4xP+ZM03AegArJXbNPqe9XlsnseI8IM17EihmxwvcYsZ2bK6UhkALS2iFnnRGnyKTKPePGx29umH7NXJPjfq+FM/AYINz+074/Hajo00EflE9zJ5E9/wtmH8x6R100/ee5sQlvNIbWehbUB8C2LeyCN4/0nI3v1BJkLlCASaLnK3TmusyGDN0cCQxEIp0TxLMY529Oj03yisOC+X1Gf8YA1SeGyL8eVI2dpA2VS2c8NikmetqmWH84JL6tE0PtiyMgU4y0xfRIW9ml05Cwt1cph9UjSJJpOISr3Er8F43RreCNiwuo5/gfbiQIDAQAB
-----END PUBLIC KEY-----
3.5 alipay_test
测试沙箱环境
# -*- coding: utf-8 -*-
from alipay import AliPay
# 沙箱环境中 app 私钥
app_private_key_string = open('app_private_key.pem').read()
# 支付宝公钥
alipay_public_key_string = open( 'alipay_public_key.pem').read()
def get_alipay_url():
# 实例化一个alipay对象
alipay = AliPay(
appid="2016102600762786", # 沙箱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", # RSA 或者 RSA2
debug=True, # 默认False,我们是沙箱,所以改成True(让访问沙箱环境支付宝地址)
)
# 调用支付接口,生成支付链接
# 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no="201612226", # 订单id,应该从前端获取
total_amount=str(0.01), # 订单总金额
subject="测试阿里云付款", # 付款标题信息
return_url=None, # 付款成功回调地址(可以为空)
notify_url=None # 付款成功后异步通知地址(可以为空)
)
pay_url = "https://openapi.alipaydev.com/gateway.do?" + order_string
print(pay_url) # 将这个url复制到浏览器,就会打开支付宝支付页面
def query_pay():
alipay = AliPay(
appid="2016102600762786", # 沙箱appid
app_notify_url=None, # 默认回调url
app_private_key_string=app_private_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
alipay_public_key_string=alipay_public_key_string,
sign_type="RSA", # RSA 或者 RSA2
debug=True, # 默认False,我们是沙箱,所以改成True(让访问沙箱环境支付宝地址)
)
trade_query = alipay.api_alipay_trade_query(
out_trade_no=20161112, # 上面生成支付码页面时传入的商品订单号
trade_no=None
)
print(trade_query)
if __name__ == '__main__':
get_alipay_url()
# query_pay()