123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- from gmssl import sm2
- import requests
- import time
- import json
- import hashlib
- import pprint
- import datetime
- pay_url = "http://127.0.0.1:8848/pay"
- search_url = "http://127.0.0.1:8848/search"
- # 测试用 秘钥组1 脚本加密用
- pk1 = "04865e672fa71ab6e37429fd731800792c1015cf4e936bd01ec0092b7da571fb63cb99cca8104b35243175d3f535784f6127af451bed43b5b929db6b864de3b207"
- sk1 = "b73190a4fa4f6786fa36a35c1c16e533943fb5951a40c6b9e2d06b5a19d5c19a"
- # 测试用 秘钥组2 脚本解密用
- pk2 = "04f87981e38e98c5d400daed3e3dbf0a77e622860923b37ab94622c435401604a2e23f7c2ddb656f0b7735ca1f36cc203e6ac8fe47d6bc15f3739608e81b424c04"
- sk2 = "6907ee4516db5e2f04eef3976551f2c8ead793648edf37b82035013527b3ee42"
- sinKey = "ZctLTt2tugU2ntZdVgMXssrGuENPH6V7b7ROYN88Msw="
- pub_head = {
- "appId": "CESHI",
- "method": "sd.tovc.recharge",
- "signType": "md5",
- "sign": "",
- "timestamp": "",
- "version": "v1.0",
- "requestId": str(int(time.time()*1000)),
- "bizContent": ""
- }
- def encrypt(data: str):
- en = sm2.CryptSM2(private_key="", public_key=pk1)
- r = en.encrypt(data.encode("utf-8"))
- # result = bytearray([0x4])
- result = bytearray()
- result.extend(r) # type:ignore
- return result.hex() # type:ignore
- def decrypt(data: str):
- en = sm2.CryptSM2(private_key=sk2, public_key="")
- r = en.decrypt(data.encode("utf-8"))
- return r.hex() # type:ignore
- def sign_head(head: dict):
- keys = list(head.keys())
- keys.sort()
- ks = []
- for k in keys:
- v = head[k].strip()
- if k != "sign" and v:
- ks.append(f"{k}={v}")
- ks.append(f"key={sinKey}")
- s = "&".join(ks)
- m5 = hashlib.md5(s.encode("utf-8"))
- sign = m5.hexdigest()
- head["sign"] = sign
- def test_pay():
- pay_body = {
- "gameUserId": "13856023633",
- "serverType": "tel",
- "productNo": "YDHF10",
- "spOrderId": str(int(time.time()*1000)),
- "source": "SD"
- }
- pay_body = json.dumps(pay_body, ensure_ascii=False)
- head = pub_head.copy()
- now = datetime.datetime.now()
- head["timestamp"] = f"{now:%Y-%m-%d %H:%M:%S}"
- head["requestId"] = str(int(time.time()*1000))
- head["bizContent"] = encrypt(pay_body)
- sign_head(head)
- pprint.pprint(pay_body)
- r = requests.post(pay_url, json=head)
- result = r.json()
- print(result)
- order = {
- 'code': '0000',
- 'msg': 'success',
- 'data':'{"resultCode":"000","resultDesc":"OK","data":{"state":"0","orderCash":"","orderId":"1679647728031106994","spOrderId":"1679647727617","gameUserId":"13856023633","productName":"YDHF10"}}',
- 'sign': '2B4C3FBD6C65A8A78BCA7EDF71F6C666',
- 'requestId': '1679647727617'}
- def test_search():
- search_body = {
- "spOrderId": "1679680499000"
- }
- pay_body = json.dumps(search_body, ensure_ascii=False)
- head = pub_head.copy()
- now = datetime.datetime.now()
- head["timestamp"] = f"{now:%Y-%m-%d %H:%M:%S}"
- head["requestId"] = str(int(time.time()*1000))
- head["bizContent"] = encrypt(pay_body)
- sign_head(head)
- pprint.pprint(head)
- r = requests.post(search_url, json=head)
- result = r.json()
- print(result)
- # test_pay()
- test_search()
- # s = "{\"HEADER\":{\"VERSION\":\"V1.1\",\"TIMESTAMP\":\"2023-03-24 21:31:47\",\"SEQNO\":\"1679664707214\",\"APPID\":\"jtceshi\",\"SECERTKEY\":\"376F93167C475920C274EE682650031D\"},\"MSGBODY\":{\"CONTENT\":{\"ORDERID\":\"1679647728031106994\",\"USER\":\"13856023633\",\"REQDATE\":\"2023-03-24\",\"PACKAGEID\":\"YDHF10\",\"STATUS\":\"4\",\"EXTORDER\":\"1679647727617\",\"MSG\":\"充值失败\",\"CHECKTIME\":\"20230324164950000\",\"PRICE\":\"100000\"},\"RESP\":{\"RCODE\":\"00\",\"RMSG\":\"OK\"}}}"
- # pprint.pprint(json.loads(s))
|