Python支付宝单笔转账接口
开发信息
接口加签方式为证书模式
证书模式好处是可以使用支付宝的转账到支付宝账户,也就是提现功能,公钥模式不能实现转账到支付宝账户。
此DEMO利用单笔转账到支付宝账户接口【提现功能】用户可以通过此DEMO掌握思想后,运用到其他API接口上。
作者编写此demo是想将项目对接支付宝的套路思想展示出来,大家了解思想后可在python单文件、Flask项目、Django项目、Tornado项目等众多Python框架下使用。
本文章属于pythonliuwei所有!如需转载与原文作者联系。
步骤:
第一步
安装 python-alipay-sdk
# 安装 python-alipay-sdk
pip install python-alipay-sdk --upgrade
# 对于 python2,请安装 2.0 以下版本:pip install python-alipay-sdk==1.1
第二步
在项目中创建文件夹
Linux系统
# Linux系统
# cd 项目目录下 假设我的项目叫demo
cd demo
# 创建文件夹
mkdir sandbox
Windows系统
备注:windows用户创建文件夹可以不用下面的命令,用过windows系统的都知道怎么创建文件夹。
# Windows系统 黑窗口
# cd 项目目录下
cd demo
# 创建文件夹
md sandbox
第三步
下载公钥证书、支付宝公钥证书、支付宝根证书、应用私钥存放到sandbox文件夹下
提示:如果沙箱应用的接口加签方式为公钥模式请更改为证书模式
点击查看
1.先点击非JAVA语言,把应用公钥证书、支付宝公钥证书、支付宝根证书下载到项目的sandbox文件夹里。
2.在sandbox文件夹里创建一个app_private.txt 文件
3.使用pycharm打开app_private.txt文件
4,把非JAVA语言的应用私钥粘贴到app_private.txt文件里。
5.鼠标光标移动到应用私钥的第一个字符前面,按下回车,让应用私钥到第二行。
6.鼠标光标移动到第二行的应用私钥的最后一个字符后面,按下回车。
7.复制如下内容在第一行粘贴
-----BEGIN RSA PRIVATE KEY-----
8.复制如下内容在第三行粘贴
-----END RSA PRIVATE KEY-----
第二行只放应用私钥
9.新建一个python文件用于测试接口功能是否能使用。
作者使用的是linux系统命令 touch 是创建文件的命令 my_test.py 是要创建文件的名称 windows用户直接创建文件。
touch my_test.py
9.1 注释alipay下的__init__.py文件里内容用于调试接口
BaseAliPay类下的类方法_verify_and_return_sync_response
可在文件里搜索_verify_and_return_sync_response来定位到位置,
然后把图片中红框中内容注释掉。
10.使用pycharm 打开项目,并编辑my_test.py 文件
# my_test.py
from alipay import DCAliPay
file_str = None
def get_string(file_path):
with open(file_path, 'r') as f:
global file_str
file_str = f.read()
return file_str
dc_alipay = DCAliPay(
appid="你的APPID", # 先用沙箱的APPID测试,测试完成用真实应用的APPID
app_notify_url="https://www.baidu.com", #你的地址
app_private_key_string=get_string(r'D:\\XXX\XXX\app_private.txt'), # 字符r不去掉,引号里的内容换成你的app_private.txt文件的路径
app_public_key_cert_string=get_string(r'D:\\XXX\XXX\appCertPublicKey_123456.crt'), # 字符r不去掉,引号里的内容换成你的appCertPublicKey_123456.crt文件的路径
alipay_public_key_cert_string=get_string(r'D:\\XXX\XXX\alipayCertPublicKey_RSA2.crt'), # 字符r不去掉,引号里的内容换成你的alipayCertPublicKey_RSA2.crt文件的路径
alipay_root_cert_string=get_string(r'D:\\XXX\XXX\alipayRootCert.crt'), # 字符r不去掉,引号里的内容换成你的alipayRootCert.crt文件的路径
debug=True # debug=True是用于测试使用的,debug=False用于真实环境下使用,因为True和False会拼接不同的请求地址。真实环境使用把debug=True改成debug=False或者把debug=True删除即可。
)
print(dc_alipay)
result = dc_alipay.alipay_fund_account_query(
123456, # 商户ID
'ACCTRANS_ACCOUNT' # 这个是这个接口固定的请求参数 每个接口的请求参数都是不同的,你在写的时候参考你的支付宝接口文档去写参数和调用接口。
) # alipay_fund_account_query是这个库封装的支付宝单笔转账接口的类方法,你在请求其他的接口请点击去查找对应接口的方法或者查看这个库官方的文档。
print(result)
if result.get('available_amount') >= available_amount:
result = dc_alipay.api_alipay_fund_trans_toaccount_transfer(
datetime.now().strftime("%Y%m%d%H%M%S"), # 订单编号
payee_type="ALIPAY_USERID", # ALIPAY_USERID/ALIPAY_LOGINID
payee_account="123456789", #如果选择 ALIPAY_USERID 就填写用户的UID
amount=1.00 # 提现金额
)
print(result)
当打印出来如下内容表示成功!例如{'code':'40002'}等响应结果都属于错误的
{'code': '10000', 'msg': 'Success', 'order_id': '20220214110070001506590009984230', 'out_biz_no': '20220214175544', 'pay_date': '2022-02-14 17:55:45'}
赞助💰
如果你觉得此DEMO对你有帮助,你可以赞助我一杯咖啡,鼓励我继续开发、分享各类技术知识。
如果在使用此demo中遇到自己无法解决问题,请联系QQ510897279获取技术支持。
DEMO编写时间:2022年2月14日【情人节】