Compare commits
13 Commits
1638baf604
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 4f6fc49093 | |||
| 7b1ccb572e | |||
| 1d46f6a9a2 | |||
| e340813938 | |||
| 78dbb3a175 | |||
| 43916f00f0 | |||
| c53d5fdf2a | |||
| b18c3d58ab | |||
| 32fcdd7ad1 | |||
| b9ca357448 | |||
| 9059458433 | |||
| 29f248f1b4 | |||
| 8a7a7aaba7 |
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
28
app/user/cmd/api/internal/logic/user/decryptmobilelogic.go
Normal file
28
app/user/cmd/api/internal/logic/user/decryptmobilelogic.go
Normal 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
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1
|
|
||||||
BIN
tmp/main.exe
BIN
tmp/main.exe
Binary file not shown.
Reference in New Issue
Block a user