Compare commits

...

13 Commits

Author SHA1 Message Date
4f6fc49093 Merge branch 'main' of http://1.117.67.95:3000/ZhangRongHong/qnc-server 2025-04-14 17:02:57 +08:00
7b1ccb572e change SignName 2025-04-14 17:02:54 +08:00
1d46f6a9a2 2454 2025-04-04 01:02:26 +08:00
e340813938 fix ali 2025-04-03 18:20:20 +08:00
78dbb3a175 fix 2025-04-03 16:52:33 +08:00
43916f00f0 ali pay up 2025-04-03 16:40:29 +08:00
c53d5fdf2a 3 2025-04-03 09:40:55 +08:00
b18c3d58ab add idv044 2025-04-02 19:06:13 +08:00
32fcdd7ad1 fix 2025-03-21 20:39:02 +08:00
b9ca357448 fix params 2025-03-21 18:40:02 +08:00
9059458433 fix Delay 2025-03-21 16:18:58 +08:00
29f248f1b4 fix delay 2025-03-21 16:12:47 +08:00
8a7a7aaba7 从仓库中移除tmp目录下的文件,并在.gitignore中添加忽略规则 2025-03-21 15:57:16 +08:00
15 changed files with 123 additions and 57 deletions

View File

@@ -36,10 +36,12 @@ service main {
@handler wxMiniAuth @handler wxMiniAuth
post /user/wxMiniAuth (WXMiniAuthReq) returns (WXMiniAuthResp) post /user/wxMiniAuth (WXMiniAuthReq) returns (WXMiniAuthResp)
@doc "wechat h5 auth" @doc "wechat h5 auth"
@handler wxH5Auth @handler wxH5Auth
post /user/wxh5Auth (WXH5AuthReq) returns (WXH5AuthResp) post /user/wxh5Auth (WXH5AuthReq) returns (WXH5AuthResp)
@handler DecryptMobile
post /user/decryptMobile
} }
//need login //need login

View File

@@ -32,9 +32,9 @@ TianjuConfig:
ApiKey: "479bcac2a77b56e976d044ff2bd996f4" ApiKey: "479bcac2a77b56e976d044ff2bd996f4"
BaseURL: "https://apis.tianapi.com" BaseURL: "https://apis.tianapi.com"
Alipay: Alipay:
AppID: "2021004165608254" AppID: "2021004161631930"
PrivateKey: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCvo8TmTNnVguKwMYrX0z01PfUlSS+AqwwCH1+/P39q6No+09yO1bjhy4LowtDfwKX8F+IZLl5Cx06f1M8KzPvjQliBAfMJ1FuTEOOXPmtE1YLAYIUMLbltR6Crnp16T28eF41Uo0PUo2ple/oSjWhYgsTJjyBMXY04f6HM2uZlHOhG2aOUz2CDNbvkEhNddazuPMgo8Xl7vwENGDFTPa85HmSSoDppFowLdYfAw2Jl1ilKNg4sOPc6d507nXdgpMlUguwZxol6OQ2hBS6v9OjII5cJ1tyR/klJRapnIPmFaPvhDozYwjU6Z3jMvcbrByl0qNpLrbEFS4pn9hfRo4YrAgMBAAECggEAZAi0Ri6TCqXnEk7FMzMec0p8auYJ5hCFYFgaIkS5/1vroUjtH3TePcu5HXSHnkiMwM2hepIMIaB+SU3dNduVwtOwsJk5oOmP1m0SErv8QFISjBrs7AjGyVS4T8ahDl5bfRoQ5pmuMld4a6B2x0Y+ndqs1ddsn9HQctNOhexOuFsSjX1N3PZxFzfRTmGzxf7kwZGlXMN7G1r3Rp4koylYHVpqjXIK34Anc8SVljxFVkFOk62QvBdYcCucepymHNl0pYwPDCCylPH8OpIXOErmPldTflmoLRc+ywu9rw4I8UvkoPgTe+16he+jdi/N7cwbMTfixq+/Aeadjv2AgMuwkQKBgQDgLS3dRFAc6FMSJIA0FKgv5D/R3NZgWilbOAF11PtnE4AX4i0yZryGtLq+3NWCWYQF8iI60lIy3rEf9zWncwfadhWTEDUBjjrqqU46N2ddTzHsDw09I56TT2vrEwCdmJ2vh1hxPfgE3fSDnKbP4Wkl77JCTH7v0rA1jb65Plt8TwKBgQDIkrXqe/pVHDdxswoPL6em32TnKiaJ/R/UDDio20mgGG7FWEJAY5yYtu0y9Ug7W8PjJE7/cJ2/dwDSvHZm8R0iq8d6XkzN03Z+uvzGnMdUraXJZHSPZ5L/2ofysXjt/OtpA1Sox5++1+obiq6CZ6IYORLSxSf+it1JUbKXsNcVZQKBgQCTPzm7984DXtqJtS38h4D9jBgbWcn6Gd7GSuAyrIXBa76ccXSsgWzdskJjcZxQdUnRufyf1Fwni7yeOXullFoZNazwHxoh/nFWh4SZmqCrWoR5AF36xbW4HtfM3XtvCLqye90s7L5HPB8Kf8/WBcJSJ8JX5/UMw7/4PTWEaaAf4wKBgQCEXu7YVgIccYbV7wdQhm7q3rxFI7hTkU6UL4ylRDQPCJDyhREUValf0DozS1XkdueM3MWWJ8i0N+G/MsohnjdQTnZT+DBQFqM5eEai/Y1AAWpMw5N5oS2O1barIR1iU2053QzeZwCyfuTuUFRjk+mSevhFSgDfKN5qKRTor7kDUQKBgB3fC6jO8XCwimPvpsiGnuddNAq/w8iqSjSwuSvbI0Q7Lq6rvAIw2AmkC5t4kW4JcZLUgDvAs4GFoPDYhoL73vc1e2c35VTNck6IxZSQzzQ9pfXFiLtTe6eqggN4EOPGHKLd92CMAgoeySsp3NydpGSx2N/NUqp8BkoFLQ/k2W9o" PrivateKey: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCOh6r6Ce7ZgMf5mWqVsU8sYNdU0HRlZbgYUQ2wF65PzWU3vL52+LG89ATbtHeKUy6esuuaAyYhuDrqU9f6mUl5QJGsWCF6JqqyberVIMJfdsdOTbgooSSUBxIsMYfoRZPdsZ9dHomDxfi2oGWJdAnaruTxKw7W8EPJwqc9/vopzdxLsT8t/eMzr4jvHIBVHtkMbmgNJ8b05tqJ1FViK3Yt78YBkt3PLdyjLzqRuKlVpmNceBEhzNbg4menGBzpJHTWO4uGk0KzUgY7wCSfyjrA9IPyWnDqlhws+9LwFKgkNpqxmwGgMihLysDRFOD5D1VLfry/yYT22UrwAzXFQYUvAgMBAAECggEAfKGfXXMwG5sjwltnuyvHepvXzz9UeJHgz8qYeIHMl9WYC4wM1IWVDhAm62M8IIWqP3Ve1VapklTBl8PnGSfO+qr+dsC9zU1geBPrg6BYtxdrIkqNnWGDVbl1J5XMLMwih3nZS5j3UHXdjPxmrTH9p+7FHSm0mTiRXizLB0gdwk0E+H+btJKLpCvqqIoEucowzbjY/ch86ASojpQGZiWapbi+03Xke6/wlGCbNzgGmQQo/C6XAbxl2ZKJxS/yp0JxGfO6gPJYx3xkuf+Pwr0U3imN8yDB/xo0LVamoxQggWua+mQXt72J4zD2imIU7TB4JFJV3kUd+45KLOccOsOuCQKBgQDLfsBxU/LiNn+zW6yus+dCu7JzQSN2K57XF+PSXhQTSjIu4K4y8v4WZHdSwkAGQSU3MLq66QD7ELYHGDBakFFj3sX7z2CHshFlu2I/DYP+0LPVRlIblsSDFn6rYBLOPXc3VkuEFcA0PpO3vW6yF7h2d9OpGaiYmpTvXa/6oPLQfQKBgQCzTgxTTrzZjLXCv85fzX3aYu9ceP4N0jaOwveEMvKNClSomUIDfHLn4sUTmAvHBdJz4Xqy/7+v/YpI0ifC0KouX0t6h3+YA6n4hCvpBMlUVACtHUfx+mzjj+KLxEvmm6ZJCmV5DC3yYvaDTANafM3PzyQRs/jw5WPWywezFfooGwKBgQC4Fq9TFkWYHQNDJ0C9PqSL+y7BEwFYireED+maSl9Q4AMr4zfTgX0YlsRXSsEOp2paVivmoJixh3mUS26azwnCFir21LCXsSAJ7w0+yyRIpVa6LoZizO5zRCtNL3lzt6kcl2VzVRXubVnGk4kLdWf7TAVfaYXan6TyMcfcLDPdJQKBgCwtV6YS6T6kh4fjICLEi3SKGbVr7hRTrbOA3+EHeHE9kVw03mnjeKAfZDUOqiAwFAkPDd8aWg0vZ6nHdZpvNO7V9c/LoKlAhdlAH117G2uWgtAkPbyl2bw7kDKle5nm0ZJ/aD7pvExTC6+Pw+fAhijkPVvLPtODgRTD0zLRgF/vAoGBAMdxes5p7u+Eoa41c3Y39dGvY30QiiGPB4oWLTdmyh4VQfC7DU7ihUCRsk5w4i/BuTNNlJauWM2MMX7YeRBt6ncq59vBAU2OeLd6oRsOkE2ZkH7tNDnGxZuOZkiSFnYUQLMBPnVe4JkS7ZvRWSyuIi9SE8TDpTLbH1kfEmIMq4dR"
AlipayPublicKey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2CqoCp95w/JV3RT/gzF4/8QmVT1HQNaeW7yUp+mA7x9AbjvlTW/+eRn6oGAL/XhZLjvHD0XjKLVKX0MJVS1aUQHEHEbOJN4Eu8II45OavD4iZISa7Kp9V6AM+i4qTyaeV2wNDnGxHQBaLVUGCfMR+56EK2YpORdE1H9uy72SSQseVb3bmpsV9EW/IJNmcVL/ut3uA1JWAoRmzlQ7ekxg7p8AYXzYPEHQr1tl7W+M4zv9wO9GKZCxIqMA8U3RP5npPfRaCfIRGzXzCqFEEUvWuidOB7frsvN4jiPD07qpL2Bi9LM1X/ee2kC/oM8Uhd7ERZhG8MbZfijZKxgrsDKBcwIDAQAB" AlipayPublicKey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjoeq+gnu2YDH+ZlqlbFPLGDXVNB0ZWW4GFENsBeuT81lN7y+dvixvPQE27R3ilMunrLrmgMmIbg66lPX+plJeUCRrFgheiaqsm3q1SDCX3bHTk24KKEklAcSLDGH6EWT3bGfXR6Jg8X4tqBliXQJ2q7k8SsO1vBDycKnPf76Kc3cS7E/Lf3jM6+I7xyAVR7ZDG5oDSfG9ObaidRVYit2Le/GAZLdzy3coy86kbipVaZjXHgRIczW4OJnpxgc6SR01juLhpNCs1IGO8Akn8o6wPSD8lpw6pYcLPvS8BSoJDaasZsBoDIoS8rA0RTg+Q9VS368v8mE9tlK8AM1xUGFLwIDAQAB"
IsProduction: true IsProduction: true
NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/alipay/callback" NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/alipay/callback"
ReturnURL: "http://localhost:5678/inquire" ReturnURL: "http://localhost:5678/inquire"

View File

@@ -16,7 +16,7 @@ VerifyCode:
AccessKeyID: "LTAI5tKGB3TVJbMHSoZN3yr9" AccessKeyID: "LTAI5tKGB3TVJbMHSoZN3yr9"
AccessKeySecret: "OCQ30GWp4yENMjmfOAaagksE18bp65" AccessKeySecret: "OCQ30GWp4yENMjmfOAaagksE18bp65"
EndpointURL: "dysmsapi.aliyuncs.com" EndpointURL: "dysmsapi.aliyuncs.com"
SignName: "全能查" SignName: "海南省学宇思网络科技"
TemplateCode: "SMS_473780047" TemplateCode: "SMS_473780047"
ValidTime: 300 ValidTime: 300
Encrypt: Encrypt:
@@ -34,9 +34,9 @@ TianjuConfig:
ApiKey: "479bcac2a77b56e976d044ff2bd996f4" ApiKey: "479bcac2a77b56e976d044ff2bd996f4"
BaseURL: "https://apis.tianapi.com" BaseURL: "https://apis.tianapi.com"
Alipay: Alipay:
AppID: "2021004165608254" AppID: "2021004161631930"
PrivateKey: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCvo8TmTNnVguKwMYrX0z01PfUlSS+AqwwCH1+/P39q6No+09yO1bjhy4LowtDfwKX8F+IZLl5Cx06f1M8KzPvjQliBAfMJ1FuTEOOXPmtE1YLAYIUMLbltR6Crnp16T28eF41Uo0PUo2ple/oSjWhYgsTJjyBMXY04f6HM2uZlHOhG2aOUz2CDNbvkEhNddazuPMgo8Xl7vwENGDFTPa85HmSSoDppFowLdYfAw2Jl1ilKNg4sOPc6d507nXdgpMlUguwZxol6OQ2hBS6v9OjII5cJ1tyR/klJRapnIPmFaPvhDozYwjU6Z3jMvcbrByl0qNpLrbEFS4pn9hfRo4YrAgMBAAECggEAZAi0Ri6TCqXnEk7FMzMec0p8auYJ5hCFYFgaIkS5/1vroUjtH3TePcu5HXSHnkiMwM2hepIMIaB+SU3dNduVwtOwsJk5oOmP1m0SErv8QFISjBrs7AjGyVS4T8ahDl5bfRoQ5pmuMld4a6B2x0Y+ndqs1ddsn9HQctNOhexOuFsSjX1N3PZxFzfRTmGzxf7kwZGlXMN7G1r3Rp4koylYHVpqjXIK34Anc8SVljxFVkFOk62QvBdYcCucepymHNl0pYwPDCCylPH8OpIXOErmPldTflmoLRc+ywu9rw4I8UvkoPgTe+16he+jdi/N7cwbMTfixq+/Aeadjv2AgMuwkQKBgQDgLS3dRFAc6FMSJIA0FKgv5D/R3NZgWilbOAF11PtnE4AX4i0yZryGtLq+3NWCWYQF8iI60lIy3rEf9zWncwfadhWTEDUBjjrqqU46N2ddTzHsDw09I56TT2vrEwCdmJ2vh1hxPfgE3fSDnKbP4Wkl77JCTH7v0rA1jb65Plt8TwKBgQDIkrXqe/pVHDdxswoPL6em32TnKiaJ/R/UDDio20mgGG7FWEJAY5yYtu0y9Ug7W8PjJE7/cJ2/dwDSvHZm8R0iq8d6XkzN03Z+uvzGnMdUraXJZHSPZ5L/2ofysXjt/OtpA1Sox5++1+obiq6CZ6IYORLSxSf+it1JUbKXsNcVZQKBgQCTPzm7984DXtqJtS38h4D9jBgbWcn6Gd7GSuAyrIXBa76ccXSsgWzdskJjcZxQdUnRufyf1Fwni7yeOXullFoZNazwHxoh/nFWh4SZmqCrWoR5AF36xbW4HtfM3XtvCLqye90s7L5HPB8Kf8/WBcJSJ8JX5/UMw7/4PTWEaaAf4wKBgQCEXu7YVgIccYbV7wdQhm7q3rxFI7hTkU6UL4ylRDQPCJDyhREUValf0DozS1XkdueM3MWWJ8i0N+G/MsohnjdQTnZT+DBQFqM5eEai/Y1AAWpMw5N5oS2O1barIR1iU2053QzeZwCyfuTuUFRjk+mSevhFSgDfKN5qKRTor7kDUQKBgB3fC6jO8XCwimPvpsiGnuddNAq/w8iqSjSwuSvbI0Q7Lq6rvAIw2AmkC5t4kW4JcZLUgDvAs4GFoPDYhoL73vc1e2c35VTNck6IxZSQzzQ9pfXFiLtTe6eqggN4EOPGHKLd92CMAgoeySsp3NydpGSx2N/NUqp8BkoFLQ/k2W9o" PrivateKey: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCOh6r6Ce7ZgMf5mWqVsU8sYNdU0HRlZbgYUQ2wF65PzWU3vL52+LG89ATbtHeKUy6esuuaAyYhuDrqU9f6mUl5QJGsWCF6JqqyberVIMJfdsdOTbgooSSUBxIsMYfoRZPdsZ9dHomDxfi2oGWJdAnaruTxKw7W8EPJwqc9/vopzdxLsT8t/eMzr4jvHIBVHtkMbmgNJ8b05tqJ1FViK3Yt78YBkt3PLdyjLzqRuKlVpmNceBEhzNbg4menGBzpJHTWO4uGk0KzUgY7wCSfyjrA9IPyWnDqlhws+9LwFKgkNpqxmwGgMihLysDRFOD5D1VLfry/yYT22UrwAzXFQYUvAgMBAAECggEAfKGfXXMwG5sjwltnuyvHepvXzz9UeJHgz8qYeIHMl9WYC4wM1IWVDhAm62M8IIWqP3Ve1VapklTBl8PnGSfO+qr+dsC9zU1geBPrg6BYtxdrIkqNnWGDVbl1J5XMLMwih3nZS5j3UHXdjPxmrTH9p+7FHSm0mTiRXizLB0gdwk0E+H+btJKLpCvqqIoEucowzbjY/ch86ASojpQGZiWapbi+03Xke6/wlGCbNzgGmQQo/C6XAbxl2ZKJxS/yp0JxGfO6gPJYx3xkuf+Pwr0U3imN8yDB/xo0LVamoxQggWua+mQXt72J4zD2imIU7TB4JFJV3kUd+45KLOccOsOuCQKBgQDLfsBxU/LiNn+zW6yus+dCu7JzQSN2K57XF+PSXhQTSjIu4K4y8v4WZHdSwkAGQSU3MLq66QD7ELYHGDBakFFj3sX7z2CHshFlu2I/DYP+0LPVRlIblsSDFn6rYBLOPXc3VkuEFcA0PpO3vW6yF7h2d9OpGaiYmpTvXa/6oPLQfQKBgQCzTgxTTrzZjLXCv85fzX3aYu9ceP4N0jaOwveEMvKNClSomUIDfHLn4sUTmAvHBdJz4Xqy/7+v/YpI0ifC0KouX0t6h3+YA6n4hCvpBMlUVACtHUfx+mzjj+KLxEvmm6ZJCmV5DC3yYvaDTANafM3PzyQRs/jw5WPWywezFfooGwKBgQC4Fq9TFkWYHQNDJ0C9PqSL+y7BEwFYireED+maSl9Q4AMr4zfTgX0YlsRXSsEOp2paVivmoJixh3mUS26azwnCFir21LCXsSAJ7w0+yyRIpVa6LoZizO5zRCtNL3lzt6kcl2VzVRXubVnGk4kLdWf7TAVfaYXan6TyMcfcLDPdJQKBgCwtV6YS6T6kh4fjICLEi3SKGbVr7hRTrbOA3+EHeHE9kVw03mnjeKAfZDUOqiAwFAkPDd8aWg0vZ6nHdZpvNO7V9c/LoKlAhdlAH117G2uWgtAkPbyl2bw7kDKle5nm0ZJ/aD7pvExTC6+Pw+fAhijkPVvLPtODgRTD0zLRgF/vAoGBAMdxes5p7u+Eoa41c3Y39dGvY30QiiGPB4oWLTdmyh4VQfC7DU7ihUCRsk5w4i/BuTNNlJauWM2MMX7YeRBt6ncq59vBAU2OeLd6oRsOkE2ZkH7tNDnGxZuOZkiSFnYUQLMBPnVe4JkS7ZvRWSyuIi9SE8TDpTLbH1kfEmIMq4dR"
AlipayPublicKey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2CqoCp95w/JV3RT/gzF4/8QmVT1HQNaeW7yUp+mA7x9AbjvlTW/+eRn6oGAL/XhZLjvHD0XjKLVKX0MJVS1aUQHEHEbOJN4Eu8II45OavD4iZISa7Kp9V6AM+i4qTyaeV2wNDnGxHQBaLVUGCfMR+56EK2YpORdE1H9uy72SSQseVb3bmpsV9EW/IJNmcVL/ut3uA1JWAoRmzlQ7ekxg7p8AYXzYPEHQr1tl7W+M4zv9wO9GKZCxIqMA8U3RP5npPfRaCfIRGzXzCqFEEUvWuidOB7frsvN4jiPD07qpL2Bi9LM1X/ee2kC/oM8Uhd7ERZhG8MbZfijZKxgrsDKBcwIDAQAB" AlipayPublicKey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAomw6g4rBmCr/QoX3NI3DVLyDpkaUytZ2uFhdfQaegIDAuUfZfgpTCASlAtO82t8ISAbSOSyp9CUpwdGV4EYOiCBbLxMYB6taaHPiIjJ1zNT1EakJzWgU53hz1AVeABB9kdAvMqSvjH6KLoVupmqm4Li8ZwDW9M2ANAmyDfKgiF0Lt4aUUnaZktoCrTWTkpmtfRZCHNACj851IllvN2wyC4OL7dJq5UzOFxmn07Dy/2z4UAhaaSAyRVawpOui5AIYJTXZERLYL3KMyRnMuZoFq3xltzVTzRPM06nRa9RfeVNVwWVtGBIe/r8tcg5wyhI57KUszGNOmUIm/se6G2lnAQIDAQAB"
IsProduction: true IsProduction: true
NotifyUrl: "https://www.tianyuancha.cn/api/v1/pay/alipay/callback" NotifyUrl: "https://www.tianyuancha.cn/api/v1/pay/alipay/callback"
ReturnURL: "https://www.tianyuancha.cn/report" ReturnURL: "https://www.tianyuancha.cn/report"

View File

@@ -209,6 +209,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
server.AddRoutes( server.AddRoutes(
[]rest.Route{ []rest.Route{
{
Method: http.MethodPost,
Path: "/user/decryptMobile",
Handler: user.DecryptMobileHandler(serverCtx),
},
{ {
// mobile code login // mobile code login
Method: http.MethodPost, Method: http.MethodPost,

View File

@@ -0,0 +1,16 @@
package user
import (
"net/http"
"qnc-server/app/user/cmd/api/internal/logic/user"
"qnc-server/app/user/cmd/api/internal/svc"
"qnc-server/common/result"
)
func DecryptMobileHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := user.NewDecryptMobileLogic(r.Context(), svcCtx)
err := l.DecryptMobile()
result.HttpResult(r, w, nil, err)
}
}

View File

@@ -135,7 +135,6 @@ var productProcessors = map[string]func(*QueryServiceLogic, *types.QueryServiceR
"toc_PhoneTwoElements": (*QueryServiceLogic).ProcessTocPhoneTwoElementsLogic, "toc_PhoneTwoElements": (*QueryServiceLogic).ProcessTocPhoneTwoElementsLogic,
"toc_IDCardTwoElements": (*QueryServiceLogic).ProcessTocIDCardTwoElementsLogic, "toc_IDCardTwoElements": (*QueryServiceLogic).ProcessTocIDCardTwoElementsLogic,
"toc_NaturalLifeStatus": (*QueryServiceLogic).ProcessTocNaturalLifeStatusLogic, "toc_NaturalLifeStatus": (*QueryServiceLogic).ProcessTocNaturalLifeStatusLogic,
"toc_PersonVehicleVerification": (*QueryServiceLogic).ProcessTocPersonVehicleVerificationLogic,
"toc_DualMarriage": (*QueryServiceLogic).ProcessTocDualMarriageLogic, "toc_DualMarriage": (*QueryServiceLogic).ProcessTocDualMarriageLogic,
"toc_PhoneNumberRisk": (*QueryServiceLogic).ProcessTocPhoneNumberRiskLogic, "toc_PhoneNumberRisk": (*QueryServiceLogic).ProcessTocPhoneNumberRiskLogic,
"toc_NetworkDuration": (*QueryServiceLogic).ProcessTocNetworkDurationLogic, "toc_NetworkDuration": (*QueryServiceLogic).ProcessTocNetworkDurationLogic,
@@ -152,6 +151,7 @@ var productProcessors = map[string]func(*QueryServiceLogic, *types.QueryServiceR
"toc_vehicleValuation": (*QueryServiceLogic).ProcessTocVehicleValuationLogic, // 车辆估值 "toc_vehicleValuation": (*QueryServiceLogic).ProcessTocVehicleValuationLogic, // 车辆估值
"toc_chassisNumberCheck": (*QueryServiceLogic).ProcessTocChassisNumberCheckLogic, // 车辆识别代码 "toc_chassisNumberCheck": (*QueryServiceLogic).ProcessTocChassisNumberCheckLogic, // 车辆识别代码
"toc_vehicleTransferCount": (*QueryServiceLogic).ProcessTocVehicleTransferCountLogic, // 车辆过户次数 "toc_vehicleTransferCount": (*QueryServiceLogic).ProcessTocVehicleTransferCountLogic, // 车辆过户次数
"toc_PersonVehicleVerification": (*QueryServiceLogic).ProcessTocPersonVehicleVerificationLogic, // 人车核验
"toc_ExitRestriction": (*QueryServiceLogic).ProcessTocExitRestrictionLogic, // 限制出境 "toc_ExitRestriction": (*QueryServiceLogic).ProcessTocExitRestrictionLogic, // 限制出境
"toc_MonthlyMobileConsumptionLevel": (*QueryServiceLogic).ProcessTocMonthlyMobileConsumptionLevelLogic, // 月消费水平 "toc_MonthlyMobileConsumptionLevel": (*QueryServiceLogic).ProcessTocMonthlyMobileConsumptionLevelLogic, // 月消费水平
@@ -1690,7 +1690,7 @@ func (l *QueryServiceLogic) ProcessTocBankCardThreeElementsVerificationLogic(req
return &types.QueryServiceResp{Id: cacheNo}, nil return &types.QueryServiceResp{Id: cacheNo}, nil
} }
// ProcessTocMobileRiskAssessmentLogic 手机号码风险评估 // ProcessTocMobileRiskAssessmentLogic 高风险特殊手机号
func (l *QueryServiceLogic) ProcessTocMobileRiskAssessmentLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { func (l *QueryServiceLogic) ProcessTocMobileRiskAssessmentLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) {
userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx)
if getUidErr != nil { if getUidErr != nil {

View File

@@ -46,7 +46,7 @@ func (l *QuerySingleTestLogic) QuerySingleTest(req *types.QuerySingleTestReq) (r
// 使用新的超时上下文 // 使用新的超时上下文
apiResp, err := l.svcCtx.ApiRequestService.PreprocessRequestApi(timeoutCtx, marshalParams, req.Api) apiResp, err := l.svcCtx.ApiRequestService.PreprocessRequestApi(timeoutCtx, marshalParams, req.Api)
if err != nil { if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "单查测试, 获取接口失败 : %d", err) return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "单查测试, 接口请求失败 : %d", err)
} }
var respData interface{} var respData interface{}
err = json.Unmarshal(apiResp.Data, &respData) err = json.Unmarshal(apiResp.Data, &respData)

View File

@@ -0,0 +1,28 @@
package user
import (
"context"
"github.com/zeromicro/go-zero/core/logx"
"qnc-server/app/user/cmd/api/internal/svc"
)
type DecryptMobileLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewDecryptMobileLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DecryptMobileLogic {
return &DecryptMobileLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *DecryptMobileLogic) DecryptMobile() error {
// todo: add your logic here and delete this line
return nil
}

View File

@@ -112,7 +112,7 @@ func (l *PaySuccessNotifyUserHandler) ProcessTask(ctx context.Context, t *asynq.
func (l *PaySuccessNotifyUserHandler) handleError(ctx context.Context, err error, order *model.Order, query *model.Query) error { func (l *PaySuccessNotifyUserHandler) handleError(ctx context.Context, err error, order *model.Order, query *model.Query) error {
logx.Errorf("处理任务失败,原因: %v", err) logx.Errorf("处理任务失败,原因: %v", err)
if order.Status == "paid" && query.QueryState == model.QueryStatePending { if order.Status == "paid" && query.QueryState == model.QueryStateProcessing {
// 更新查询状态为失败 // 更新查询状态为失败
query.QueryState = model.QueryStateFailed query.QueryState = model.QueryStateFailed
updateQueryErr := l.svcCtx.QueryModel.UpdateWithVersion(ctx, nil, query) updateQueryErr := l.svcCtx.QueryModel.UpdateWithVersion(ctx, nil, query)

View File

@@ -235,6 +235,7 @@ var requestProcessors = map[string]func(*ApiRequestService, context.Context, []b
"HRD004": (*ApiRequestService).ProcessHRD004Request, "HRD004": (*ApiRequestService).ProcessHRD004Request,
"mobilelocal": (*ApiRequestService).ProcessMobilelocalRequest, // 手机归属地 "mobilelocal": (*ApiRequestService).ProcessMobilelocalRequest, // 手机归属地
"sfz": (*ApiRequestService).ProcessSfzRequest, // 身份证归属地 "sfz": (*ApiRequestService).ProcessSfzRequest, // 身份证归属地
"IDV044": (*ApiRequestService).ProcessIDV044Request,
} }
// PreprocessRequestApi 调用指定的请求处理函数 // PreprocessRequestApi 调用指定的请求处理函数
@@ -894,48 +895,39 @@ func (a *ApiRequestService) ProcessCAR059Request(ctx context.Context, params []b
logx.Infof("车辆维保记录查询任务,订单号: %s, 未查询到结果,需要重试", orderID.String()) logx.Infof("车辆维保记录查询任务,订单号: %s, 未查询到结果,需要重试", orderID.String())
// 检查重试次数 // 检查重试次数
maxRetries := 10 maxRetries := 56
if retryCount >= maxRetries { if retryCount >= maxRetries {
fmt.Errorf("车辆维保记录查询任务已达最大重试次数 %d停止重试订单号: %s", return nil, fmt.Errorf("车辆维保记录查询任务已达最大重试次数 %d停止重试订单号: %s",
maxRetries, orderID.String()) maxRetries, orderID.String())
} }
// 计算延迟时间 // 固定延迟时间为30秒
var delay time.Duration fixedDelay := 30 * time.Second
if retryCount == 0 {
delay = 0 // 第一次无延迟
} else {
// 指数退避策略
baseDelay := 3 * time.Second
maxDelay := 1 * time.Hour
delay = baseDelay
for i := 1; i < int(retryCount); i++ {
delay = delay * 2
if delay > maxDelay {
delay = maxDelay
break
}
}
}
// 检查ctx是否已经有超时 // 检查ctx是否已经有超时
deadline, hasDeadline := ctx.Deadline() deadline, hasDeadline := ctx.Deadline()
if hasDeadline { if hasDeadline {
timeRemaining := time.Until(deadline) timeRemaining := time.Until(deadline)
if timeRemaining <= delay {
// 如果剩余时间不足使用剩余时间的90%作为超时 // 检查上下文是否已经超时或即将超时
delay = time.Duration(float64(timeRemaining) * 0.9) if timeRemaining <= 0 {
logx.Infof("调整延迟时间以适应上下文超时,新延迟: %v", delay) return nil, fmt.Errorf("上下文超时,停止重试,订单号: %s", orderID.String())
}
// 如果剩余时间不足以等待完整的15秒
if timeRemaining < fixedDelay+500*time.Millisecond {
logx.Infof("上下文剩余时间不足,提前返回,订单号: %s, 剩余时间: %v",
orderID.String(), timeRemaining)
return nil, fmt.Errorf("上下文剩余时间不足,无法完成下一次重试")
} }
} }
// 等待指定延迟时间 // 等待固定的延迟时间
logx.Infof("安排延迟重试,订单号: %s, 延迟: %v, 重试次数: %d", logx.Infof("安排固定延迟重试,订单号: %s, 延迟: 30秒, 重试次数: %d",
orderID.String(), delay, retryCount+1) orderID.String(), retryCount+1)
select { select {
case <-time.After(delay): case <-time.After(fixedDelay):
// 延迟时间到,继续处理 // 延迟时间到,继续处理
case <-ctx.Done(): case <-ctx.Done():
// 上下文被取消,返回错误 // 上下文被取消,返回错误
@@ -955,8 +947,8 @@ func (a *ApiRequestService) ProcessCAR059Request(ctx context.Context, params []b
} }
return nil, fmt.Errorf("车辆维保记录结果查询失败: %+v", err) return nil, fmt.Errorf("车辆维保记录结果查询失败: %+v", err)
} }
logx.Infof("车辆维保记录查询任务完成,订单号: %s, 结果数据长度: %d", logx.Infof("车辆维保记录查询任务完成,订单号: %s",
orderID.String(), len(resp)) orderID.String())
return &APIInternalResult{ return &APIInternalResult{
Data: resp, Data: resp,
}, nil }, nil
@@ -1424,7 +1416,7 @@ func (a *ApiRequestService) ProcessCOM187Request(ctx context.Context, params []b
"keyword": name.String(), "keyword": name.String(),
} }
resp, err := a.yushanService.request("COM187", request) resp, err := a.yushanService.request("COM187", request)
if err != nil { if err != nil && err != ErrEmptyResult {
return nil, fmt.Errorf("出境限制查询失败: %+v", err) return nil, fmt.Errorf("出境限制查询失败: %+v", err)
} }
return &APIInternalResult{ return &APIInternalResult{
@@ -1603,7 +1595,7 @@ func (a *ApiRequestService) ProcessFIN018Request(ctx context.Context, params []b
}, nil }, nil
} }
// 手机号码风险评估 // 高风险特殊手机号
func (a *ApiRequestService) ProcessMOB032Request(ctx context.Context, params []byte) (*APIInternalResult, error) { func (a *ApiRequestService) ProcessMOB032Request(ctx context.Context, params []byte) (*APIInternalResult, error) {
mobile := gjson.GetBytes(params, "mobile") mobile := gjson.GetBytes(params, "mobile")
if !mobile.Exists() { if !mobile.Exists() {
@@ -1615,7 +1607,7 @@ func (a *ApiRequestService) ProcessMOB032Request(ctx context.Context, params []b
} }
resp, err := a.yushanService.request("MOB032", request) resp, err := a.yushanService.request("MOB032", request)
if err != nil { if err != nil {
return nil, fmt.Errorf("手机号码风险评估失败: %+v", err) return nil, fmt.Errorf("高风险特殊手机号失败: %+v", err)
} }
return &APIInternalResult{ return &APIInternalResult{
Data: resp, Data: resp,
@@ -1705,3 +1697,21 @@ func (a *ApiRequestService) ProcessSfzRequest(ctx context.Context, params []byte
Data: resp, Data: resp,
}, nil }, nil
} }
func (a *ApiRequestService) ProcessIDV044Request(ctx context.Context, params []byte) (*APIInternalResult, error) {
idCard := gjson.GetBytes(params, "id_card")
name := gjson.GetBytes(params, "name")
if !idCard.Exists() || !name.Exists() {
return nil, errors.New("api请求, IDV044, 获取相关参数失败")
}
request := map[string]interface{}{
"cardNo": idCard.String(),
"name": name.String(),
}
resp, err := a.yushanService.request("IDV044", request)
if err != nil {
return nil, fmt.Errorf("婚姻状态查询失败: %v", err)
}
return &APIInternalResult{
Data: resp,
}, nil
}

View File

@@ -4,7 +4,6 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/pkg/errors"
"io" "io"
"log" "log"
"net/http" "net/http"
@@ -12,6 +11,8 @@ import (
"qnc-server/pkg/lzkit/crypto" "qnc-server/pkg/lzkit/crypto"
"strconv" "strconv"
"time" "time"
"github.com/pkg/errors"
) )
type WestResp struct { type WestResp struct {
@@ -99,7 +100,6 @@ func (w *WestDexService) CallAPI(code string, reqData map[string]interface{}) (r
return nil, DecryptErr return nil, DecryptErr
} }
return decryptedData, errors.New(westDexResp.Message) return decryptedData, errors.New(westDexResp.Message)
log.Println(string(decryptedData))
} }
if westDexResp.Data == "" { if westDexResp.Data == "" {
return nil, errors.New(westDexResp.Message) return nil, errors.New(westDexResp.Message)

View File

@@ -8,6 +8,7 @@ import (
"encoding/base64" "encoding/base64"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
@@ -28,6 +29,11 @@ func NewYushanService(c config.Config) *YushanService {
} }
} }
var (
// ErrEmptyResult 表示查询结果为空
ErrEmptyResult = errors.New("查询结果为空")
)
func (y *YushanService) request(prodID string, params map[string]interface{}) ([]byte, error) { func (y *YushanService) request(prodID string, params map[string]interface{}) ([]byte, error) {
// 获取当前时间戳 // 获取当前时间戳
unixMilliseconds := time.Now().UnixNano() / int64(time.Millisecond) unixMilliseconds := time.Now().UnixNano() / int64(time.Millisecond)
@@ -98,7 +104,7 @@ func (y *YushanService) request(prodID string, params map[string]interface{}) ([
if retCode == "100000" { if retCode == "100000" {
// retcode 为 100000表示查询为空 // retcode 为 100000表示查询为空
return respData, fmt.Errorf("羽山请求查空: %s", string(respData)) return json.RawMessage("{}"), ErrEmptyResult
} else if retCode == "000000" || retCode == "000001" || retCode == "000002" || retCode == "000003" { } else if retCode == "000000" || retCode == "000001" || retCode == "000002" || retCode == "000003" {
// retcode 为 000000表示有数据返回 retdata // retcode 为 000000表示有数据返回 retdata
retData := gjson.GetBytes(respData, "retdata") retData := gjson.GetBytes(respData, "retdata")

View File

@@ -87,7 +87,7 @@ type TocCarVin struct {
} }
type TocCarVinDrivingPermit struct { type TocCarVinDrivingPermit struct {
VinCode string `json:"vin_code" validate:"required"` VinCode string `json:"vin_code" validate:"required"`
CarDrivingPermit string `json:"car_drivingPermit" validate:"required"` CarDrivingPermit string `json:"car_driving_permit" validate:"required"`
} }
type TocCarVinLicense struct { type TocCarVinLicense struct {
VinCode string `json:"vin_code" validate:"required"` VinCode string `json:"vin_code" validate:"required"`
@@ -173,7 +173,7 @@ type TocBankCardThreeElementsVerification struct {
BankCard string `json:"bank_card" validate:"required"` BankCard string `json:"bank_card" validate:"required"`
} }
// 手机号码风险评估 // 高风险特殊手机号
type TocMobileRiskAssessment struct { type TocMobileRiskAssessment struct {
Mobile string `json:"mobile" validate:"required,mobile"` Mobile string `json:"mobile" validate:"required,mobile"`
} }

View File

@@ -1 +0,0 @@
exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1

Binary file not shown.