From 5dc2fbd0e7d4e89b90aa9edbea86ee578fac7ddd Mon Sep 17 00:00:00 2001 From: 24024 <240241002@qq.com> Date: Wed, 14 Jan 2026 19:57:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(payment):=20=E4=BC=98=E5=8C=96=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=9B=9E=E8=B0=83=E7=AD=BE=E5=90=8D=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 取消支付回调中签名前日志冗余输出,简化验证流程 - verify_notify方法中合并签名和数据为空的校验,减少日志行 - 调整sign和sign_type参数移除逻辑,兼容不同通知类型的签名校验 - 增加验证失败时的详细日志,帮助定位公钥配置问题 - 提示可能公钥使用错误,改善错误排查体验 --- __pycache__/config.cpython-312.pyc | Bin 4123 -> 4123 bytes .../__pycache__/payment.cpython-312.pyc | Bin 8105 -> 7522 bytes blueprints/payment.py | 13 +----- config.py | 2 +- .../alipay_service.cpython-312.pyc | Bin 4369 -> 4178 bytes services/alipay_service.py | 39 ++++++++---------- 6 files changed, 21 insertions(+), 33 deletions(-) diff --git a/__pycache__/config.cpython-312.pyc b/__pycache__/config.cpython-312.pyc index 6d38c547f397c9c2d778a92ebc1f9668e3564faa..63b4247c9958f281a01db61b5754f960970fd9f9 100644 GIT binary patch delta 369 zcmWN;J92_R007X;q;ujO(r+P3fT85Kd<6kTp!2gX8v*&O1ZZq>3vZAvlVjurX>*d~ zz5Db1dGbA-P9FY!ynjx9C%0VfU+kktJzoP3NCdlFE8M7er94MnQBLPx|%ghkg71e z&i6|>p=+)iadb-+p%~51t3=$cXVtYnvO6~|@{Twv6YyT*GGhm0z}1qPMuH@cL;_{J zf}znMITMCtR*RP^i&7UE`s$LL)yU)k2pTv)NRI6t31u*GxvsAed&tC*)p!6?%sONR z=5erP>5{1ashWj()be{bb2hZdO|B6@L7`%+8%3*1pAALCm?qzhLlg&tt-w~O373pR YmK7dLE$f0rl522q$5Y^c$xlCze_~X76951J delta 369 zcmWN;K~{o5007W>?R<5I_ADYCD3>bAC?gpP1MC1tFOXX$N z}r!fJOpwEGAQ<) zgNBFjN!v%pd(9=;>*d&QpqtnpGlC7;tU-m->BUqF8UbrOvgIQd?Q{c#HA$LF57(J{ zYEyq6xw^+48Ue3s0V`@4V|E%(KK!Ml<09$T3u5c zW-zKyEyty(F?q%0#M&1gxkaH6Ud7sIxyT)+@L9D^!^+~`kgD6_ImWro+b}529=EAf YRX0x<^jwgwx@m;-N>iK#k7lQvW&3$FFl6ygz925cQp-{zGWia(%w#iB5xyFhHEgRHA!@RuC-38uW@W8mE>fH9z$LHD zUc)k*VJ;I)o{^zM7NU}YA%!D_vxapI*W@Z*O;v7mb(K8I3?*_fwJHonwzX`NxaE_1 zOB7*(HE?S|R-|yQ;e$Dqks*a2r#gW&revl_h7`eCwmP<8C|%B2&QQS|$xzOyDKy!O zZwYIWGSHgI0sQZn{WJw9I|!Iet`~4JV86wZl30>>i?cX0Juk7Ov?#U65~!}o0Yrdw z6q$nv3m{R<4kRZ37myY52QutIB67e`YGC-lCOuhCFj)MFq}pux4!#FM3fG17E(+#<7ZHYo7EVk+>aev0kUS#7=_BanSml+{&g^Dm)D zHm+M7B}IuTsquOFlOrVE8SN)8kPKpUnEY9Cw!b6LT0c$MB4;375a*A3Y?-zkYS2BDCk_<)GK;jpNO>TZlX-=wLQ3j9;N*06}?`00000 delta 1130 zcmZ{kT}TvB6vyv;?(B{`v+l0$YMPq+;TrT1K_=*~yJaP0UlQ7jZI0PmtTK+7G~35R zR8Ux*B0&U|B29CRf});!$%lGaaj95(h|tKF5Q^xrds`9;&^av3+58Z-yn#B)dXCdkrxkJ?4w;{%NGU=?XqcX)VASd7 zOoj_5?Ph+BVKxl6N7@FX)`QfVgz2VO(&p5>Mp8Ge zJw3%Xm1nd?AtnF6b*^J{8{L8wF=0AuI=B-1s6KR>X+eEdzzsih?jG&U#h+PvaP>>_ z!k6i>#cQ`02cA}!s^vJ_>%{ncE4lDuaB+Hg;rZRqgYetU2$~vI+FRpYz0#kOrAs%K z#)k1!A5Jx9%ssJ=c&pam-43JHuXMlxH>E9NhHdNW?$0pYUET0X3j2f%t3NdQV8iq32!3tPHX@LtGWs|)L4}$pZ8N=7{JX+>G&>sF3$Nmfl%%{0t!45lhWDQ8_;2(P%; z<0DP?n@5|+ycECI}ET5LgNJ z5Qqeg1bYeg5qJoKaL0Y9a6gd;2(kxG6uAM|HWh5;j$nEGairh}P3?f{qB5Qwzj_3s nMTM4=Sdw2t&s(@ybkF9as=qOaE?%awTHZ&&wqh@P0{g!JPWTWR diff --git a/blueprints/payment.py b/blueprints/payment.py index aaffe82..86676a0 100644 --- a/blueprints/payment.py +++ b/blueprints/payment.py @@ -73,18 +73,9 @@ def payment_return(): logger.error("同步回调缺少签名参数") return "参数错误:缺少签名", 400 - # 验证签名前,先记录关键信息 - logger.info(f"验证订单号: {data.get('out_trade_no')}") - logger.info(f"支付宝交易号: {data.get('trade_no')}") - logger.info(f"支付金额: {data.get('total_amount')}") - - # 从数据中移除sign参数以进行验证 - verify_data = data.copy() - verify_data.pop('sign', None) - verify_data.pop('sign_type', None) # 也要移除sign_type - alipay_service = AlipayService() - success = alipay_service.verify_notify(verify_data, signature) + # 直接传递原始字典,由 verify_notify 处理 + success = alipay_service.verify_notify(data, signature) out_trade_no = data.get('out_trade_no') order = Order.query.filter_by(out_trade_no=out_trade_no).first() diff --git a/config.py b/config.py index 4215064..76d86d2 100644 --- a/config.py +++ b/config.py @@ -50,7 +50,7 @@ class Config: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCJSgmesQisfxNdz5dUhdv3Anh6aOGyQ03t69cqnenFumyEiLFk1N9FBDRR6onUsW9ZUGf7+P1sn/TMHdoOQZzZsxYVCCj85820ORP/DHTyP0ONHfBj0GqnKig5o3OGosC9ieJT6QLBzycOmiv/3YcHSJQPQ3zlyUloPScD1UsslgpCFWF3c3UDstzhYy/i1LbNy63w+Hr/xj01f1JCzivJoir9erLpTbbjPcPbQXd9xpycwIyGufXbFh1kOE6q+WOZq6NAXCe0/leUwh+q5v0pTnWnY07iB9nQtL2qvXQIBZWGI6HV4NDnO6rblDf1oOwNWYKcjCtL045xcHfUWKlrAgMBAAECggEAO4qfp3JyJ5WpSYtJv3+aiYNJyxUHpW9pMeGR3MrF41pZzBUYknl8J4uOQWStyE/30c18e5xeFKk+2vOraXltVEFGN3Lli+HgpeQHVxsI8TMc0ewFINT4HG29KlpINUEKxGkzfl7VMkbsUnns0Tg7Yp5IkGIdne7xZkL3U8NCqh/0oHAczMTwV1gqOFetyENNhdqzZJgwjR5c2OIIsNAuq+s0CcIqIw6hSwKzYN3H2i+4UKXmgU9kB2pGIzyxOH41FbEZp/UAcv9m2ikK2oYSXIHozaEsYyUXZbvHn4vmz1+grwnMJy2UQZQUCOLjvkul7tGKcNXTFSCvtgudBMSQ2QKBgQDxKvs97C3CRqgM/GkajI3DVmCY9NZGj5fd75JVg0yIeYQ4tmUmVIepTfq/8YxmgUD284FAFeyfbcFMbZnP4MXQ5Ddun0je70P3snLhfCw52PG1ypxBHl/jzZPdecy5kPKSQIWK9dfaXzwvhRC+YFV2x2V+tcubfeGgZkJ4+79KPQKBgQCRu483SbkjIbKTlJVL1m8a8RtljEg0AxnGIOQQvpkNHWRRHEqE3ozkj3PUHicDh9MumyZSRm9ifSmbD+cYSnjpQYafD9pZQ4lFWE72rCrz2vTTiZKyd/VuuQl2wTcj57ffX7cCaXQ635O1w+tz4VXnZzFnN0Lx3KDQ76bpPEEExwKBgHpRqoyFtc/LtoCfpU9p6p0gum3aALRZMFXIpRfqOG8f8wgwuqzuQsCEZKHmCagT9rdKWkv+0r0qFdiF3nWpM6v3lIXvFC6+fGKth8cGDAhrGG10DjyZA1mvc0fp9wRHmEDFqPYKKyj/FK+ldhCZG7/a8oeJ/XMoLcAFHcHvLd6hAoGAFQnDmhKthHHX6tA3YVRag8Qs1VMUFVYhQWX8JqKtS6RjmAYCh/3szw4ahZO4xBy2kvLY7GW4rLou6HC6RtpxbBMGkS3jsqE6TuV5uMiQBtYkI+mnYNZKeyqBQECSaj+IXtndfJ6mpd0i4Mmg0wDDuv09t43Vvz6/hIokSWVmaX8CgYEApzBH2M3R3j/jz2Hb3cevI+3MaeSIZMCedj2oTI2VB+6cOfuCW+65uuj7VuZkjEWzHMt3jVWPBtjyp002D3unYfIiaFaXUK4hSeoOCVj9ma8xhqR278Llkhxgf6KDx2E43YeTtrg9jStHmuD+Wr4UV96MOuIyaKqOFQHs4P/sQqY= -----END RSA PRIVATE KEY-----""" # 应用私钥 ALIPAY_PUBLIC_KEY = """-----BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx6iXKiRpbs5WLHlb6fdoteef+vs+QxxtmwDL2IJwhEJ+OMrkwlKyd4noYaiGDy2YcyHKahb4bsHRoPLVEqLveuVFksjsiFTH2mUhuwuqDe//XwE4hHsguNL3nY72gZ6qjwbg5mAVrHRcKUi6XSLSP4pWdCzD0leZ4GA9Kw1WstCS4sGBcrzyHPhRvtdVFZR5UjNLVAaN6HIMNhW0TBXz4r1ihXMV4byeN3n0n6e6reBLXr222f7c5almGurq6D9pLqwAmsqWbQWbvitOjZRll+bjpa29JIkNi+jEpPdYpGjU3e0Tl8aWkKjtYXmDyWtdw00RkciHUR4hMuCZW5qIjwIDAQAB +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlDx4KdOtOQE+tBq6jHKKFenRaRe2gbBnleBk++5gki9IQuxVyZUGTJixstf2gELFHWrGanpnwmGggXsqG+Rm5ZLJOlmFM1k0XeAIDvi6tP/rM+ZDFSu1bMBYtT5vzgVZC7mzIvOp9gsT/puqd3aNZmlviLD0R6OYN0zvFX+5qADZV7A9ziA+nXPFSHreBh7yY/q9ophVZNeHGPoYkDVI5++RrF1cALKOdit0giN5vxpe3ch9z3E6+FZg3LiP+1RW3tMiDQfp/SlVs6bNhLUtmlI5r7+mtFCKDUCEpnQ3S9e0II6rzyVXRyKCFs7qi5YzyhhmO3tJJoe9ilEFyNzfRQIDAQAB -----END PUBLIC KEY-----""" # 支付宝公钥 ALIPAY_RETURN_URL = "http://331002.xyz:2010/payment/return" # 支付成功跳转地址 ALIPAY_NOTIFY_URL = "http://331002.xyz:2010/payment/notify" # 支付异步通知地址 diff --git a/services/__pycache__/alipay_service.cpython-312.pyc b/services/__pycache__/alipay_service.cpython-312.pyc index 697c3d5f481aabc17aaace1f924d9c7ac02d02df..e89946c097597324bd3d0a6fd49971d591d6e0ae 100644 GIT binary patch delta 1067 zcmZ8eTTByC5WTzIE^OPSTen--(xw%NrfDQ#d?3CB8jXMt;s=R@7^?)-niMOdRjScg z4MgfiTY(BBVDP~!F;VgLp(Z5$6m6msKG1Zx^h-3F`1tWIYq4=Y&d$u4IWx02kn_fx z@tUSp09nKNy85m3ScaK0hHwCafC66JjeD_1!!e1UH`q(+VL7HEG0==C*hlFhrJ}Jk zxLCvL6i(tUYLyHFUeG|nT9pM;!%2e8R(SCwcUtLHHg^6edKg#1pDG%3q^*%A?joF&5p)5kDy+DRrA*F{{Zw=>mby|ivhU{pZPK8VRI}A7 zTFNSr!m|>OY2bIY9rlrIi<3T911E8sJVQ3)^0x_V0w)yJ zpb4`vo<&F@ai?{5UY<@k)EVfBf^4PT|%$@n-kmfvsobkB4MMp?_@l{=nxaXuk*XzTw&7e(UD)Z96wt z*Y4c2rF>gS?e?;2s~8&jPG;XMf8r^E(i0 zFa>J@HN9&`skdCQ-|>;<7xW6F%<^PlDHzQjr6cAI(H3Uo-(=|2;F>{u#JnoXtX`-q zdZ>SHd1RSjCvqZdDk4Rd6Z<3P-BG3rt)(e)MA?nvs5%8cHNyzUYJYtq~f>5iOxzV`oUBxnpE;OpTKNiU{QChF}9z#l?hDwS0ykxKCzZwrkjZ# z5ZIC_Yr%A`^&c{?1opxK*G*TSJ5q-Ot*x{Ea(&brs}&g66l2Xqb@6tSz<55J^FEl} zZ_V!a=F*6F%53j#=x&H@NYd}kl@af>-c0t^bZhv6)dE{KZv>|N$gb~tV6c)Ict@GQ zmS@|ajUSCS@Qw`vTlEL|6HP-+V+Y5Ayr+gQ-8xypJA4AWeTKD^WKMB9E>CENG_f|` zu|{CmE)?>G70KGiJ4bgWt9Zv2fvrZFA~i(viP*6G%&9uw