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))