提交 acfae641 authored 作者: 李思鑫's avatar 李思鑫

zsk 支付相关

上级 d4ae7f00
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFROPf3SA7LPmGcNioy4u1ub+tSR9bNhwYc1vdWhCp6Q3AjNSdXQNy3nTUFxtehmmFXTd2nHoY1ogApvecL+6Uks4ExakQTv20UUbXoRZsAUW3QU018+ljqwkB+DcxWViwiXdCBIMvsNSHIDIxx/PyX1HO3Ok6iB3bhQkrm7zlhQIDAQAB
-----END PUBLIC KEY-----
......@@ -26,7 +26,6 @@ class Pay(models.Model):
cert_serial_no=models.CharField(_('商户证书序列号'),max_length=100,blank=True,null=True)
cert_path=models.CharField(_('证书地址'),max_length=200)
pay_id=models.CharField(_('商户号'),max_length=100)
remark=models.CharField(_('备注'),max_length=200,blank=True,null=True)
comp_abbr=models.CharField(_('公司缩写'),max_length=100,blank=True,null=True)
send_hb_method = models.SmallIntegerField(_('发放类型'),blank=True,null=True)
......@@ -37,7 +36,8 @@ class Pay(models.Model):
pay_platform_pn=models.CharField(_('支付平台项目编码'),max_length=50,blank=True,null=True)
aes_key=models.CharField(_('aes密码'),max_length=50,blank=True,null=True)
aes_iv=models.CharField(_('aes偏移值'),max_length=50,blank=True,null=True)
public_key_id=models.CharField(_('公钥id'),max_length=500,blank=True,null=True)
public_key=models.CharField(_('公钥'),max_length=500,blank=True,null=True)
class Meta:
verbose_name = _('微信商户平台')
......
差异被折叠。
#橙券支付
#中数科支付
#接口文档 https://doc.apipost.net/docs/detail/34ff33e7bce7000?target_id=ef551d7ba901a
......@@ -19,45 +18,34 @@ from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
from wx.models import *
env = 'prod'
domainMap={
'dev':'http://ywymtest-api.azhiyun.cn',
'prod':'https://ywym-api.qidianpw.com'
}
env = 'dev'
domain='http://ywymtest-api.azhiyun.cn'
sign = {
'dev': {
'ym-id': '645206198756315136',
'ym-key': '15a5ba24711540f0bd3246b92a7c7daa'
},
'prod':{}
}
domain = domainMap[env]
class ZSKPay:
def __init__(self):
def __init__(self, appid, taxId, ymId, ymKey, cert):
self.MAX_ENCRYPTION_SIZE = 117 #214
# 计算签名
def generate_sign(self,data):
# # 1. 整理参数
# sorted_keys = sorted(data.keys())
# sorted_data = []
# for key in sorted_keys:
# sorted_data.append(f"{key}={data[key]}")
# # 2. 连接参数
# params_string = '&'.join(sorted_data)
# # 3. 添加签名秘钥
# params_string += f"&key={self.k}"
# # 4. MD5 加密
# sign = hashlib.md5(params_string.encode('utf-8')).hexdigest().upper()
return 'sign'
self.appid = appid
self.domain = domain
self.taxId = taxId
self.ymId = ymId
self.ymKey = ymKey
self.cert = cert
def encrypt_data(self, data):
encrypted_chunks = []
current_directory = os.getcwd()
with open(current_directory+"/wx/cert/zsk/req/public_key.txt", "rb") as public_file:
with open(self.cert + "public_key.txt", "rb") as public_file:
public_key_content = public_file.read()
public_key_loaded = serialization.load_pem_public_key(
......@@ -110,17 +98,17 @@ class ZSKPay:
# print("加密后数据:", type(data), data)
headers = {
'Content-Type': 'application/json',
**sign[env]
'ym-id':self.ymId,
'ym-key':self.ymKey
}
request = urllib.request.Request(domain + url, bytes(json.dumps({'data': data}), "utf8"), headers, method='POST')
request = urllib.request.Request(self.domain + url, bytes(json.dumps({'data': data}), "utf8"), headers, method='POST')
# 发送请求并获取响应
try:
response = urllib.request.urlopen(request)
# 读取响应体
res_body = response.read().decode('utf-8')
print("返回结果:", res_body)
return json.loads(res_body)
......@@ -131,19 +119,26 @@ class ZSKPay:
#转账
def transfer(self,data):
print('开始转账:')
if not data['transferNo'] or not data['transferAmount'] or not data['transferRemark'] or not data['openid'] :
raise ValueError("transferDetailList 必传")
company_id = data.get('company_id','')
batchNo = data.get('transferNo', self.generate_batchNo())
batchName = data.get('batchName','活动批次')
batchRemark = data.get('batchRemark','无')
transferDetailList = []
transferDetailList.append(data)
handle_data = {
"taxId": 1836580691238883330,
"batchNo":data.get('batchNo', self.generate_batchNo()),
"appid": data.get('appid','wxb8516c6064271fe4'),
"batchName": data.get('batchName','活动批次'),
"batchRemark": data.get('batchRemark','默认备注'),
"taxId": self.taxId,
"batchNo": batchNo,
"appid": self.appid,
"batchName": batchName,
"batchRemark": batchRemark,
"totalAmount": 0,
"totalNum": 0, #转账总笔数
"transferSceneId": "", #转账场景ID
"notifyUrl": "", #回调地址
#转账明细列表
"transferDetailList":data.get('transferDetailList',[])
"transferDetailList": transferDetailList
# [
# {
# "transferNo": "tj_consumer_winner_001", //商家明细单号
......@@ -154,16 +149,18 @@ class ZSKPay:
# }
# ]
}
if len(data['transferDetailList']) == 0:
raise ValueError("transferDetailList 必传")
for item in data['transferDetailList']:#计算总金额和总笔数
for item in transferDetailList:#计算总金额和总笔数
# if not item.get('transferNo') or not item.get('transferAmount') or not item.get('transferRemark') or not item.get('openid'):
# raise ValueError("缺少转账参数")
handle_data['totalAmount'] += item['transferAmount']
handle_data['totalNum'] += 1
print('加密前数据----:',handle_data)
return self.http_post(data=handle_data,url='/wx-pay/transfer')
# print('加密前数据----:',handle_data)
body = self.http_post(data=handle_data,url='/wx-pay/transfer')
print('resp body', body)
# if body and body.get('code', '') == 200:
return body
#转账信息查询
def tranfer_info(self,data={}):
......@@ -171,11 +168,11 @@ class ZSKPay:
raise ValueError("缺少参数")
encrypt_body = self.http_post(data=data,url='/wx-pay/transfer-info')
decrypted_body = self.decrypt_data(encrypt_body['data'])
print('解密后的查询数据',decrypted_body)
# print('解密后的查询数据',decrypted_body)
return json.loads(decrypted_body)
# 生成订单号
def generate_batchNo():
def generate_batchNo(self):
timestamp = int(time.time())
random_number = random.randint(1000, 9999)
batchNo ='tj'+ str(timestamp) + str(random_number)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论