Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
ypt_mgw_local
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
苏星豪
ypt_mgw_local
Commits
acfae641
提交
acfae641
authored
12月 17, 2024
作者:
李思鑫
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
zsk 支付相关
上级
d4ae7f00
全部展开
显示空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
47 行增加
和
47 行删除
+47
-47
public_key.txt
wx/cert/zsk/dev/req/public_key.txt
+0
-0
private_key.txt
wx/cert/zsk/dev/resp/private_key.txt
+0
-0
public_key.txt
wx/cert/zsk/dev/resp/public_key.txt
+0
-0
public_key.txt
wx/cert/zsk/prod/req/public_key.txt
+3
-0
models.py
wx/models.py
+2
-2
views.py
wx/views.py
+0
-0
zskpay.py
wx/zskpay.py
+42
-45
没有找到文件。
wx/cert/zsk/req/public_key.txt
→
wx/cert/zsk/
dev/
req/public_key.txt
浏览文件 @
acfae641
File moved
wx/cert/zsk/resp/private_key.txt
→
wx/cert/zsk/
dev/
resp/private_key.txt
浏览文件 @
acfae641
File moved
wx/cert/zsk/resp/public_key.txt
→
wx/cert/zsk/
dev/
resp/public_key.txt
浏览文件 @
acfae641
File moved
wx/cert/zsk/prod/req/public_key.txt
0 → 100644
浏览文件 @
acfae641
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFROPf3SA7LPmGcNioy4u1ub+tSR9bNhwYc1vdWhCp6Q3AjNSdXQNy3nTUFxtehmmFXTd2nHoY1ogApvecL+6Uks4ExakQTv20UUbXoRZsAUW3QU018+ljqwkB+DcxWViwiXdCBIMvsNSHIDIxx/PyX1HO3Ok6iB3bhQkrm7zlhQIDAQAB
-----END PUBLIC KEY-----
wx/models.py
浏览文件 @
acfae641
...
...
@@ -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
=
_
(
'微信商户平台'
)
...
...
wx/views.py
浏览文件 @
acfae641
差异被折叠。
点击展开。
wx/zskpay.py
浏览文件 @
acfae641
#橙券支付
#中数科支付
#接口文档 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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论