qq 也可以获取支付二维码 成功微信支付了

This commit is contained in:
yml2213
2026-08-12 21:41:26 +08:00
parent 4c978b923b
commit d610933f87
7 changed files with 286 additions and 18 deletions
@@ -15,6 +15,8 @@ _MODULE = importlib.util.module_from_spec(_SPEC)
sys.modules[_SPEC.name] = _MODULE
_SPEC.loader.exec_module(_MODULE)
from pyvm.payment_errors import describe_payment_failure
class TestJsdomPay(unittest.TestCase):
def test_build_save_body_has_current_payment_context(self):
@@ -42,8 +44,51 @@ class TestJsdomPay(unittest.TestCase):
fields = parse_qs(body, keep_blank_values=True)
self.assertEqual(fields["session_id"], ["openid"])
self.assertEqual(fields["session_type"], ["kp_accesstoken"])
self.assertEqual(fields["qq_appid"], ["102033112"])
self.assertEqual(fields["wx_appid"], [""])
self.assertEqual(fields["offerid_for_qq_appid"], ["102033112"])
self.assertNotIn("qq_appid", fields)
def test_wechat_payment_does_not_include_qq_offer_field(self):
body = _MODULE.build_save_body(
{"token_id": "token", "transaction_id": "transaction", "out_trade_no": "trade"},
{"openid": "openid", "accesstoken": "access-token", "logintype": "WX"},
"web-token", "anti-token", "cipher", "1", "pf", 100,
)
fields = parse_qs(body, keep_blank_values=True)
self.assertNotIn("offerid_for_qq_appid", fields)
def test_qq_page_info_matches_the_web_flow(self):
body = _MODULE.build_page_info_body(
{"token_id": "token", "transaction_id": "transaction", "out_trade_no": "trade"},
{"openid": "openid", "accesstoken": "access-token", "logintype": "QC", "appid": "102033112"},
"anti-token", "1", "pf",
)
fields = parse_qs(body, keep_blank_values=True)
self.assertEqual(fields["isusempaymode"], ["1"])
self.assertEqual(fields["offerid_for_qq_appid"], ["102033112"])
self.assertNotIn("pay_method", fields)
def test_qq_risk_rejection_is_not_reported_as_qr_error(self):
message = describe_payment_failure("QC", "payment", "ret=1099 err_code=1099-1007-0")
self.assertIn("风控/限流", message)
self.assertIn("未生成微信付款码", message)
self.assertIn("停止连续重试", message)
def test_game_role_error_is_classified_separately(self):
message = describe_payment_failure("QC", "order", "inner=10014 gamerole err")
self.assertIn("角色或区服校验失败", message)
self.assertIn("重新选择角色和区服", message)
def test_encrypt_rand_aligns_plaintext_to_aes_block(self):
params = {
"token_id": "t", "openid": "o", "openkey": "k", "session_id": "openid",
"session_type": "kp_accesstoken", "zoneid": "1", "pay_method": "wechat",
"buy_quantity": "1", "from_h5": "1", "webversion": "minipayv2",
}
rand_value = _MODULE.make_encrypt_rand(params, "tdrc_session%3Dpay-test", "1775990000")
plaintext = _MODULE.build_plaintext(params, "tdrc_session%3Dpay-test", "1775990000", rand_value)
self.assertEqual(len(plaintext.encode("latin-1")) % 16, 0)
self.assertGreaterEqual(len(rand_value), 8)
if __name__ == "__main__":