在网站使用支付宝python sdk接入支付后成功后,需要实现用户提现功能,在支付宝沙箱环境下使用sdk顺利实现提现,结果转成正式环境后报错,咨询支付宝客服后告知python sdk不支持提现,原因是提现接口需要证书签名,当时就傻眼了,感觉被支付宝沙箱玩弄了,关键是之前写的支付接口也得重写,最后无奈只能舍弃python sdk自行实现签名和验签请求支付宝接口。下面是自行实现签名和验签全流程:
证书签名需要新加alipay_root_cert_sn和app_cert_sn两个参数,这两个参数需要解析支付宝根证书(alipay_root_cert_sn)和应用公钥证书(appCerPublicKey_"app_id".crt)得到:
import OpenSSL
import re
import rsa
import base64
def sn_string():
root_file_li = open(alipayRootCert.crt', 'r').read().split('\n\n')
# 支付宝根证书中有4套证书需要一一解析
alipay_root_cert_li = []
for root_str in root_file_li:
cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, root_str)
certIssue = cert.get_issuer()
try:
if not re.match(b'sha.+WithRSAEncryption', cert.get_signature_algo