Python3版本的银联SDK如何实现与使用
项目需要,官方的 SDK 没有 python 的,按照论坛里 Python2 的版本,用 Flask 撸了一个 Python3 的
做了一点单元测试,封装了 Docker,给有需要的人
Python3版本的银联SDK如何实现与使用
4 回复
没有使用过程吗?
银联官方提供了Python3版本的SDK,可以通过官方渠道获取。这里给你一个完整的示例,展示如何集成和使用银联的Python SDK进行支付。
首先,你需要从银联官方获取SDK包,通常包含以下核心文件:
acp_sdk.py- 核心SDK文件cert_util.py- 证书工具- 商户证书文件
1. 环境准备
# 安装依赖
pip install pycryptodome
2. 配置SDK
from acp_sdk import AcpService
# 基础配置
SDK_CONFIG = {
'signCertPath': '/path/to/your/signCert.pem', # 签名证书路径
'signCertPwd': 'your_password', # 证书密码
'validateCertDir': '/path/to/cert_dir/', # 验签证书目录
'ifValidateCNName': False, # 是否验证域名
'ifValidateRemoteCert': True, # 是否验证远程证书
}
# 初始化SDK
AcpService.init(SDK_CONFIG)
3. 支付请求示例
def create_payment(order_id, amount, order_desc):
"""创建支付订单"""
params = {
'version': '5.1.0', # 版本号
'encoding': 'UTF-8', # 编码方式
'txnType': '01', # 交易类型-消费
'txnSubType': '01', # 交易子类
'bizType': '000201', # 业务类型
'channelType': '07', # 渠道类型
'merId': '777290058110097', # 商户号
'orderId': order_id, # 订单号
'txnTime': '20231201143030', # 交易时间
'txnAmt': str(amount), # 交易金额(分)
'currencyCode': '156', # 交易币种
'orderDesc': order_desc, # 订单描述
'frontUrl': 'https://yourdomain.com/front_return', # 前台通知地址
'backUrl': 'https://yourdomain.com/back_notify', # 后台通知地址
}
# 签名
AcpService.sign(params)
# 生成支付表单
html_form = AcpService.createAutoFormHtml(
'https://gateway.test.95516.com/gateway/api/frontTransReq.do',
params
)
return html_form
4. 支付结果通知处理
def handle_notify(request_data):
"""处理支付结果通知"""
# 验证签名
if not AcpService.validate(request_data):
return {'respCode': '99', 'respMsg': '验签失败'}
# 处理业务逻辑
order_id = request_data.get('orderId')
txn_amt = request_data.get('txnAmt')
resp_code = request_data.get('respCode')
if resp_code == '00':
# 支付成功,更新订单状态
update_order_status(order_id, 'PAID')
return {'respCode': '00', 'respMsg': '成功'}
else:
# 支付失败
update_order_status(order_id, 'FAILED')
return {'respCode': '99', 'respMsg': '交易失败'}
5. 查询交易状态
def query_order(order_id):
"""查询订单状态"""
params = {
'version': '5.1.0',
'encoding': 'UTF-8',
'txnType': '00', # 查询交易
'txnSubType': '00',
'bizType': '000000',
'merId': '777290058110097',
'orderId': order_id,
'txnTime': '20231201143030',
}
AcpService.sign(params)
# 发送查询请求
result = AcpService.post(
params,
'https://gateway.test.95516.com/gateway/api/queryTrans.do'
)
return result
关键点说明:
- 证书配置要正确,特别是路径和密码
- 交易时间格式必须是
YYYYMMDDHHMMSS - 金额单位是分,需要转换为字符串
- 生产环境要使用正式网关地址
使用建议: 仔细阅读银联官方文档,确保参数配置正确。
搭楼,分享个我之前调试的 php 的银联支付
https://github.com/zjsxwc/upacp-sdk
请参考官方文档 demo 里面也有现成的示例

