支付宝第三方支付保证数据的安全性
目录:
- 支付宝介绍
- 支付宝是如何保证数据安全的(数据传输如何保证安全)
一. 支付宝介绍
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
2.使用python对接支付宝
官方推荐使用Python SDK(即 python-alipay-sdk):https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
1、登录开发者中心,熟悉"电脑网站支付"整体流程
# 访问"支付宝开发平台"登录,可以访问开发者中心
https://open.alipay.com/platform/home.htm
# 可以参考"电脑网站支付" 熟悉电脑支付整体流程
https://docs.open.alipay.com/270/105899/
代码解读
2、第一步:创建应用(这里使用沙箱环境测试)
1)沙箱环境说明
- 线上开发环境需创建应用。因为我们的公司不具备企业资质和相关认证文件的要求, 所以无法直接申请生产环境, 必须使用沙箱环境。
- 简而言之, 沙箱环境主要是供开发者进行测试使用的私有空间。
- 沙箱环境地址: https://openhome.alipay.com/platform/appDaily.htm?tab=info
2、按照官方要求生成秘钥
3、把生成的app公钥粘贴到沙箱环境的app中
-
沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info
-
1)将app公钥导入至沙箱环境内
-
2)程序运行时需确保支付宝公钥的可用性
- 4.使用 python-alipay-sdk 支付&查询支付结果
1、说明
- 阿里官方并未提供Python对接支付宝生态系统的SDK接口, 但Python库中确实存在一些非官方支持可用
- python-alipay-adk : https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
- 使用起来极为简便, 只需输入几个必要的参数即可完成操作
- 由于支付交易对安全性要求极高, 因此理解其核心的安全流程包括公钥加密和私钥解密这两个关键环节
2、代码如何实现
首先,请您完成支付链接的生成。
在电脑本地分别生成应用级公钥和私密key。
APP应用的公钥匙需上传至沙箱环境后,请获取支付宝提供的应用级公开密 key。
请提供以下详细信息:申请企业号ID以及支付宝提供的应用级公开密 key和私 key。
请提供以下详细信息并明确用途:订单ID以及收银台金额等基础信息,并提供两个回调地址分别用于处理支付成功与失败的情况。
- 第二:发起支付结果查询请求
- 创建并配置支付宝 payment的对象(AppID、支付宝公钥、app私钥)
- 通过订单ID快速获取支付状态信息
3、代码
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(
appid="2016101800716047", # 沙箱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(让访问沙箱环境支付宝地址)
)
# 调用支付接口
# 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no="201611124", # 订单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="2016101800716047", # 沙箱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()
'''
trade_query 查询用户付款信息
返回信息详情请看官方:https://docs.open.alipay.com/api_1/alipay.trade.query
{
"code": "10000", # code=10000代表支付成功
"msg": "Success",
"buyer_logon_id": "foq***@sandbox.com",
"buyer_pay_amount": "0.00",
"buyer_user_id": "2088102180228981",
"buyer_user_type": "PRIVATE",
"invoice_amount": "0.00",
"out_trade_no": "20161112",
"point_amount": "0.00",
"receipt_amount": "0.00",
"send_pay_date": "2020-02-20 21:20:48",
"total_amount": "0.01",
"trade_no": "2020022022001428981000087565",
"trade_status": "TRADE_SUCCESS"
}
'''
代码解读
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIgHnOn7LLILlKETd6BFRJ0GqgS2Y3mn1wMQmyh9zEyWlz5p1zrahRahbXAfCfSqshSNfqOmAQzSHRVjCqjsAw1jyqrXaPdKBmr90DIpIxmIyKXv4GGAkPyJ/6FTFY99uhpiq0qadD/uSzQsefWo0aTvP/65zi3eof7TcZ32oWpwIDAQAB
-----END PUBLIC KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCqHFHARYve67Nt/xADRjFsRVTuwOaUiE6GBoQD6JnDOeD07TF1L7cqL4c4zxqEWlcb5p7ZO5Czyw7mpQ7W1jtI9smBxEPEC0ZvlsOuh8zAiVng4gj54eDHarLhfkMk+/pzq44AT/B1CQgtUJRGZrppTO/4SEQZYMO5RcesnPO32QIDAQABAoGAZXlbMuzJkQLdGAKM1McseD+reHjNk1D0NnLwkTxRbOm7zZ8oX5VFF/8eFL9GPCl/yP77Ru6HVRkOHHvdrD5DQjkJ4VipmDQ8xfZlpMmdc2HLtezqR9GG3xso/cAdpCCRjR+vHfr/BTltEiZD3OJapGojyURo/QG5qe7r5lPGBJkCQQD0iZy2+xTfgS58vlD8wtYOXVYkQ4aGtejKx0wgvyws3ahLmv5t9lBB6YfKCVuOHv1ZvwAngWpTsoh4vxeLT8sbAkEAshWaaRyER9SJaeMIBuRf24Bmlyk6piDLTpOOE4lduvjR6j+IgJjY5/N4QTwy9G1vMVwWVzOX/wyinrY48wSkGwJBALcncudiO4oDuYvZB9OpIqZzphdXNCUljoyCpTRJu46HHowyNKqruAUGIpxiUd6qu1tCwZzVQ4wYxjqZ9cp0I00CQEJJ7ldQCSFfyOLEYrmGCvR/ADEmZLFwJZ2TKWC2UlCFzEWg7qPHwX3d0BagXOtFTQ2XlK1TBDIpNuNTOzGiuZ8CQAY/vcaxPm3VyjfevHpFmmwqHuNmRTyKdc3bd8NXTj/MJk7en/gK86PUHdixvudojGTbQOdSSWM/QQoVu8d+DFk=
-----END RSA PRIVATE KEY-----
二. 支付宝是如何保证数据安全的(数据传输如何保证安全)
1.非对称加密算法:
不是对等加密体系: 不是对等加密算法由两组秘密钥匙构成——一组是公共秘密钥匙(publickey),另一组是私人秘密钥匙(privatekey)
两者之间是一一对应的关系。当使用公共秘密钥匙进行数据编码时,仅能被对应的私人秘密钥匙解码;反之,则需使用相应的公共秘密钥匙来进行解码操作。由于采用不同的秘密钥匙来进行编码与解码操作...
2.非对称加密算法实现机密信息交换的基本过程是:
甲方便生成一对私钥和公钥,并将公钥公开以便他人使用。
其他方获取该公钥后可利用其对敏感信息进行加密并发送回甲方便。
甲方便持有一份私有密钥仅用于解密由己方公钥加密的数据。
在安全性方面表现良好 但在处理速度上存在不足。
常见非对称加密算法包括:
RSA ECC(适用于移动设备) Diffie-Hellman El Gamal以及DSA(主要用于数字签名)。
3.非对称加密保证数据安全的原理:
Django 应用端:支付宝公钥、App 公共密钥及 App 私有密钥
支付宝服务器端:支付宝公钥与支付宝私钥
Django 端向阿里云发送数据: Django 端采用支付宝公钥匙对包含 App 公开钥匙的数据进行加密后发送至 支付宝服务器端(其中 App 公开钥匙用于身份验证),随后 支付宝服务器则利用其私有钥匙对数据进行解密。
支付宝发送信息给 Django 端: 支付宝采用 App 公开钥匙对消息进行加密后发送至 Django 端 (其中消息内容通常包含 App 的公开钥匙以实现身份认证),而 Django 端则利用自身的私有钥匙完成解密过程。
值得注意的是,在这种体系中:
Django 方面经过阿里云处理的数据即便经过双重加密也依然无法自行解码 必须依赖于阿里云提供的私有钥匙才能完成解码工作;与此相对应的是
支付宝方面发送给 Django 的消息经过两次加密处理后仍需借助阿里云提供的私有钥匙方能实现完整的信息还原。
总结下来就是八个字:
公 key 加密 私 key 解密

