Explorar el Código

修改爱签BUG

zhou.xiaoning hace 1 año
padre
commit
fbe61220a1
Se han modificado 13 ficheros con 443 adiciones y 42 borrados
  1. 2 2
      config/config.xml
  2. 38 12
      config/readme.md
  3. 37 5
      controllers/asign/test.go
  4. 108 0
      docs/docs.go
  5. 108 0
      docs/swagger.json
  6. 74 0
      docs/swagger.yaml
  7. 2 1
      go.mod
  8. 2 7
      go.sum
  9. 1 0
      models/account.go
  10. 1 0
      routers/router.go
  11. 17 7
      services/asign/api.go
  12. 52 8
      services/asign/apiModels.go
  13. 1 0
      services/asign/const.go

+ 2 - 2
config/config.xml

@@ -56,8 +56,8 @@
   </Tencent>
   <Asign>
     <Url value="https://oapi.asign.cn"/>
-    <AppId value="332768562"/>
-    <PrivateKey value="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDB1BczuEtnsE+4HmM1aj+n363w2FaXhJkm/3JStPWY93pNDEaWN9IevPsUAjKEXGw4kaYWJAs6oLcouPz5BUONOoRubk6cXk9juBPa1Kipyr5W5vlhaPOCMx9YSBGNGef6RoVBT+H9U3nVTJyJIFQM2teWNw8PrlbcHJAFJjwAwVySbOeJuhYMXK/kKTi7UNP1UGFL0e3n0CZyYH1/k8gcmzlz+nKWtQzTQi7ijFzg3ycoDf6YnGTzUOssdmGrxyjH+KRaFYXVGUg2StfjTaUEV1ww+zICRdIyQgHMRCn0hkvKuVbNCUPSx75Cz6AcW5X8/Oq6dv0zfZy50mZ7T1wtAgMBAAECggEAUYfUJqY72aa5MbpegsZpdkTJVsi5S8yz20qSHSYPNMPMhwJF4sQiN1nIxzbRZwm1X+osEZ4htwyJXrDJgDntm0dlE0qE+JNXE5wHhgHz3E/y1n0boxTRcQ/t/GV8NH0ULhthzAI9DiEB2235Xljh4fJfwsjwJelwke/VyMS3cp0nqp8/pyzhLKnqr7JL9uOQqYKo+RiAgX4Y2Lrll/vSIONw9fefCK5u9kTdXt5numUc+Vdt81sX62vNk38iNqqBW+suwr8KOOSM5mlffxKbRxHkPTCJTYA+Rdlfpdms3/Co7MotfWy0XamcW7TNyt8PkDQNLySF4kgIdKaKZjU4oQKBgQDpGeHMW1EwrQVjWPXhLmxDOse/3apRqLZ85urVn4wnDStMDzaDZoUf6PEmQlLPl8lyKxuKTw8xXPp2BKTGg6eseUVjA2fidufwnJ/a4CmkvFbTNLbEiNqRA6VUht7SGSviVwT8Fg0DH2139otlQdup/ypFQFUGKNUKPwR45PpD+QKBgQDU3pC2cBHEYcEwdw7xM9cKBLrF5CdHnBR8kA8L7bk2kzm23nWHWBr6frAhZTYeoTvADaZSMt1EURKS13J1q0wDkfUBolPif3pAjTZVJV6dMDonnbbvOXU/u4czsMp077RCfbbgr15gH2He6KPK0xmI1mME/JBVm4cy9kldAjK+1QKBgEdwJDBSCCbnz8/rsqdJZ+qOuCsIDyupjgvnZS8FD5nkQlG0E9vfbosiA83a47A1b4pqxaz0n85cFXJX5/vi219TZz16DLtt/5VRGvikXH7dLara6+x9mKZ6vI+UKfOvvTBHxQJQ67n6Rr1ONNhaf6yww86ncadKmkfimkdGvaBZAoGACUeelWVzUNVWH6/BBgDViglEvyXAFJ4YQonhLgrx/RAT/wXZp8nOe0cUlJAd+N3chfXSX1j6TmUeYypjQf/ys2Ekhiq2b3RRNwkw6itT4ZRdpKZ6eBlQJDQfo8A8QzbD6/YhB9B9U8FqedY4dboYLd/ytx/vhtvd2/nintxeq/UCgYEAqe1lh9lYbxPREsHjuhHiRzxqxdGS13hW2bvoLisAhQdNx/L9HFtEO5Nx2fRdzFRgXbH/QjfOxEadMia04uY0upqfg4fPT0Za2WIvn+uJBxpRiwupbAlKmP626jdmajJ03aQe1F7P8Ny+96Wh8x18uaMJx88Kg7e7+hi95WokLB4="/>
+    <AppId value="832360903"/>
+    <PrivateKey value="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCl+o3JA7u724TabBVR+cBuxbIaNOlW54fFDLqE6Kxm0Ym/2y3yZDVkcY9WTxXnvb1wRAzpyIneatZQ6hgqCVRsMZn3MZ9/6qpPApKufEN5TilCZ8+Og++fOLPODNQFDLfWHMKjZxmqWK8vOtEmneWn/JFwy1he2EBmXOYqyzu5FIKutOgLeEHoocdaNwtiaBhCulxEonze818q58TxLe1kcOBf9Dmk1BUOqDYxAY5FbqnDDVTKVTL9G8rw9XUJ0NO0hoqKKAciMgcV9epEN0/AQuir3rBrh1vXCf6mwVfYKFpqw+LJLv4WkOjai21xuiMYdU7Vibv95h862Aj8ovAfAgMBAAECggEBAIxrdgqrGueqpzH3IO5ygkf0/2HGg+afCLE/vIj3I+v0uDpVXwDjoHwyytZ1IA4n6x4QpHAg1esSrfBUrE7cB81lBWIpXExnJuCjR59Qx/DXnHZuxx1GJ7Kn0Q6wsar4AIunV0/QyNjiIIuvkgS+ru248v7fOgs7nvg6/gsUV5mTDppV6kf4lI14Mvpa7MIwKK2bB1zzLsWA7X9IuBS/QNxv+rRykc/uhZofDhWvaXbwGKxFf6unY2HwC3IFQONOdD6LlXyMdNT2pjMdPGdVu79eOC6wn2HBiIp7lXs08NqiL3oJ9Hh8+lqO0HVz5OMkpdaofXa7wDvZtdxGwsAlBokCgYEA5tgZWo/zK/u9GHCZrtwk9mP057BFy/83tl/c8ZmUT1CkyGx3/czVCvPZSjl6FBYWw6Bj1opwIBcQis83Kd7FHbVMgNDgg7Tyew+OAMUnM8GmWFHNQ/jA8Xe251yFOmoPwT/2MbGgwqmJjEtxD0zKPo8OVaK1odPZXN1g+KAjXjUCgYEAuBDkgrhpd8NrEa5OrxtiSipdgj8bmC7ET9xJVzFtoHFYybFCexQUA0z2NouA0GGw8qahOCx/a/CIP/hL1X3tZFUwuGjq3iSxBwhaM4aUPmDY1ratCCIxEQsl5eosGi54ltIVDE1yAgut3wMFP0YKM5ht/uBssPHrP7/gqdsGL4MCgYBcB0S8TO0F2Ns+9gzeoBcAP0MwZp68v+dnBnqfurlckWrQGCYSAWnhbutuYtGfVlsG7FdA/XnL4UYQAKIeSBhPSqrQI/WNrEKK+t2CwxZo1MfLJ/lsIqxQ14gMXl8itYvIYAZ3MzhCwrH6Q000a0mpfQCa9T3x4PIjyoHRPI49DQKBgBtZlzq9QB6lkOE9rz9hqEcw6FgUHHuOZ2keaF9mXs26SeEeT6yOHTMoWmVccTWFbo9/pvD726skQHqQ4GPGpGGGLwkXvd5oQU20NgL1+k0SguXUmv1cZ0ILEASLuSXixdRTPwFm+IvJRHqgrkTqmVV1TtLSchQQvk3oqu9SNicVAoGAYWga1T1D8MW0v7q2d05hJ3JqgHbAYZmKVxlR2Moh33fzV8CmusY3FhnbPQi8Lorj/CexjfXgvG+rZfa713qtJYLHWmJ7hQKwBQH9J0QPO3ffQyFAM1RjJyIvB9BPt8zN2QbujR4O6wXFee1zjKYgnuBAt7dBmE3O3nNdXAMa1g4="/>
     <NotifyUrl value="http://218.17.158.45:15105/api/Asign/HandleASignCompleted"/>
     <OpenApiUrl value="http://192.168.31.134:5015/mtp2-onlineopen"/>
   </Asign>

+ 38 - 12
config/readme.md

@@ -14,7 +14,7 @@ ProxyOperatorOpenId 子客企业管理员ID,生产环境应要求客户使用
 SignToken 腾讯电子签密回调通知Token,用于验签,使用公司账号登录 https://qian.tencent.com/console/ 设置和获取
 SignKey 腾讯电子签密回调通知密钥,用于解密,使用公司账号登录 https://qian.tencent.com/console/ 设置和获取
 
-多元测试环境
+### 多元测试环境
 ```xml
 <Tencent>
   <Enabled value="1"/>
@@ -29,7 +29,7 @@ SignKey 腾讯电子签密回调通知密钥,用于解密,使用公司账号
   <SignKey value="8774F484EA294C1E829EA6E2D7F99123"/>
 </Tencent>
 ```
-麦顿实盘环境
+### 麦顿实盘环境
 ```xml
 <Tencent>
   <Enabled value="1"/>
@@ -44,7 +44,7 @@ SignKey 腾讯电子签密回调通知密钥,用于解密,使用公司账号
   <SignKey value="34FD7C4496794788B569E84729601276"/>
 </Tencent>
 ```
-南海国际(海南丹农)测试环境
+### 南海国际(海南丹农)测试环境
 ```xml
 <Tencent>
   <Enabled value="1"/>
@@ -59,6 +59,7 @@ SignKey 腾讯电子签密回调通知密钥,用于解密,使用公司账号
   <SignKey value="E7C6EA231F454BF1A5CF8C223D45C422"/>
 </Tencent>
 ```
+---
 ## 爱签配置说明
 爱签官网:https://www.asign.cn
 接入助手:https://web.asign.cn/platform/tools/helper
@@ -68,13 +69,14 @@ SignKey 腾讯电子签密回调通知密钥,用于解密,使用公司账号
 演示地址:https://ai.acsign.cn/m/#/demo/index
 
 爱签配置说明:
-1、通过API对交易所企业用户(EX_LEGAL)进行四要素实名和添加用户;
-2、在“印章管理”中新增交易所默认印章;
-3、在“应用管理”中“安全配置”添加IP白名单;
-4、在“应用管理”中配置公钥;
+1、在“应用管理”中“安全配置”添加IP白名单;
+2、在“应用管理”中配置公钥;
+3、通过API对交易所企业用户(EX_LEGAL)进行四要素实名和添加用户;
+    (需要数据:企业名称、社会统一信用代码、法人姓名、法人身份证号、法人银行卡号(仅限印有“银联”字样的银行卡)和法人手机号(限中国大陆11位手机号)
+4、在“印章管理”中新增交易所默认印章;
 5、在“应用管理”中“签章权限”查看“无感知签章权限”是否已开通,如未开通则让交易所与爱签协商开通。
 
-多元测试环境
+### 多元测试环境
 ```xml
 <Asign>
   <Url value="https://prev.asign.cn"/>
@@ -85,12 +87,12 @@ SignKey 腾讯电子签密回调通知密钥,用于解密,使用公司账号
 </Asign>
 ```
 
-贵茶1测试环境
+### 贵茶1测试环境
 https://preweb.asign.cn/platform
 zhou.xiaoning@muchinfo.cn
 Aa123456
 
-中融测试环境
+### 中融测试环境
 爱签正式环境 zrwyt2023@163.com 密码 Zrwyt20231101
 爱签测试环境 zrwyt202302@163.com 密码 Zrwyt20231101
 ```xml
@@ -103,7 +105,7 @@ Aa123456
 </Asign>
 ```
 
-贵茶2测试环境
+### 贵茶2测试环境
 爱签测试环境地址:https://preweb.asign.cn/platform/openlogin    登陆帐号 : 155065880@qq.com   密码:Lv123456
 ```xml
 <Asign>
@@ -114,7 +116,8 @@ Aa123456
   <OpenApiUrl value="http://192.168.31.134:5015/mtp2-onlineopen"/>
 </Asign>
 ```
-贵茶2生产环境 https://web.asign.cn/platform/openlogin   帐号  :155065880@qq.com  密码:Lv123456
+### 贵茶2生产环境 
+https://web.asign.cn/platform/openlogin   帐号  :155065880@qq.com  密码:Lv123456
 ```
 # 公钥
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwdQXM7hLZ7BPuB5jNWo/p9+t8NhWl4SZJv9yUrT1mPd6TQxGljfSHrz7FAIyhFxsOJGmFiQLOqC3KLj8+QVDjTqEbm5OnF5PY7gT2tSoqcq+Vub5YWjzgjMfWEgRjRnn+kaFQU/h/VN51UyciSBUDNrXljcPD65W3ByQBSY8AMFckmzniboWDFyv5Ck4u1DT9VBhS9Ht59AmcmB9f5PIHJs5c/pylrUM00Iu4oxc4N8nKA3+mJxk81DrLHZhq8cox/ikWhWF1RlINkrX402lBFdcMPsyAkXSMkIBzEQp9IZLyrlWzQlD0se+Qs+gHFuV/Pzqunb9M32cudJme09cLQIDAQAB
@@ -139,3 +142,26 @@ privateKey: 'MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAkMD+72J6iAF0ZNV+3t6
 notifyUrl: 'http://218.17.158.45:15105/api/Asign/HandleASignCompleted' # 合同签署回调通知URL
 openApiUrl: 'http://192.168.31.202:5015/mtp2-onlineopen'
 willFaceRedirectUrl: 'http://218.17.158.45:15105/api/Account/HandleWillFace' # 人脸认证结果回调通知URL,可拼接参数
+
+### 贵茶3实盘环境
+https://web.asign.cn/platform/openlogin
+帐号:admin@gz-cyjyszh.com
+密码:ZwfZ18839460988
+
+```
+# 公钥
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApfqNyQO7u9uE2mwVUfnAbsWyGjTpVueHxQy6hOisZtGJv9st8mQ1ZHGPVk8V5729cEQM6ciJ3mrWUOoYKglUbDGZ9zGff+qqTwKSrnxDeU4pQmfPjoPvnzizzgzUBQy31hzCo2cZqlivLzrRJp3lp/yRcMtYXthAZlzmKss7uRSCrrToC3hB6KHHWjcLYmgYQrpcRKJ83vNfKufE8S3tZHDgX/Q5pNQVDqg2MQGORW6pww1UylUy/RvK8PV1CdDTtIaKiigHIjIHFfXqRDdPwELoq96wa4db1wn+psFX2ChaasPiyS7+FpDo2ottcbojGHVO1Ym7/eYfOtgI/KLwHwIDAQAB
+
+# 私钥
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCl+o3JA7u724TabBVR+cBuxbIaNOlW54fFDLqE6Kxm0Ym/2y3yZDVkcY9WTxXnvb1wRAzpyIneatZQ6hgqCVRsMZn3MZ9/6qpPApKufEN5TilCZ8+Og++fOLPODNQFDLfWHMKjZxmqWK8vOtEmneWn/JFwy1he2EBmXOYqyzu5FIKutOgLeEHoocdaNwtiaBhCulxEonze818q58TxLe1kcOBf9Dmk1BUOqDYxAY5FbqnDDVTKVTL9G8rw9XUJ0NO0hoqKKAciMgcV9epEN0/AQuir3rBrh1vXCf6mwVfYKFpqw+LJLv4WkOjai21xuiMYdU7Vibv95h862Aj8ovAfAgMBAAECggEBAIxrdgqrGueqpzH3IO5ygkf0/2HGg+afCLE/vIj3I+v0uDpVXwDjoHwyytZ1IA4n6x4QpHAg1esSrfBUrE7cB81lBWIpXExnJuCjR59Qx/DXnHZuxx1GJ7Kn0Q6wsar4AIunV0/QyNjiIIuvkgS+ru248v7fOgs7nvg6/gsUV5mTDppV6kf4lI14Mvpa7MIwKK2bB1zzLsWA7X9IuBS/QNxv+rRykc/uhZofDhWvaXbwGKxFf6unY2HwC3IFQONOdD6LlXyMdNT2pjMdPGdVu79eOC6wn2HBiIp7lXs08NqiL3oJ9Hh8+lqO0HVz5OMkpdaofXa7wDvZtdxGwsAlBokCgYEA5tgZWo/zK/u9GHCZrtwk9mP057BFy/83tl/c8ZmUT1CkyGx3/czVCvPZSjl6FBYWw6Bj1opwIBcQis83Kd7FHbVMgNDgg7Tyew+OAMUnM8GmWFHNQ/jA8Xe251yFOmoPwT/2MbGgwqmJjEtxD0zKPo8OVaK1odPZXN1g+KAjXjUCgYEAuBDkgrhpd8NrEa5OrxtiSipdgj8bmC7ET9xJVzFtoHFYybFCexQUA0z2NouA0GGw8qahOCx/a/CIP/hL1X3tZFUwuGjq3iSxBwhaM4aUPmDY1ratCCIxEQsl5eosGi54ltIVDE1yAgut3wMFP0YKM5ht/uBssPHrP7/gqdsGL4MCgYBcB0S8TO0F2Ns+9gzeoBcAP0MwZp68v+dnBnqfurlckWrQGCYSAWnhbutuYtGfVlsG7FdA/XnL4UYQAKIeSBhPSqrQI/WNrEKK+t2CwxZo1MfLJ/lsIqxQ14gMXl8itYvIYAZ3MzhCwrH6Q000a0mpfQCa9T3x4PIjyoHRPI49DQKBgBtZlzq9QB6lkOE9rz9hqEcw6FgUHHuOZ2keaF9mXs26SeEeT6yOHTMoWmVccTWFbo9/pvD726skQHqQ4GPGpGGGLwkXvd5oQU20NgL1+k0SguXUmv1cZ0ILEASLuSXixdRTPwFm+IvJRHqgrkTqmVV1TtLSchQQvk3oqu9SNicVAoGAYWga1T1D8MW0v7q2d05hJ3JqgHbAYZmKVxlR2Moh33fzV8CmusY3FhnbPQi8Lorj/CexjfXgvG+rZfa713qtJYLHWmJ7hQKwBQH9J0QPO3ffQyFAM1RjJyIvB9BPt8zN2QbujR4O6wXFee1zjKYgnuBAt7dBmE3O3nNdXAMa1g4=
+```
+实盘配置
+```xml
+<Asign>
+  <Url value="https://oapi.asign.cn"/>
+  <AppId value="832360903"/>
+  <PrivateKey value="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCl+o3JA7u724TabBVR+cBuxbIaNOlW54fFDLqE6Kxm0Ym/2y3yZDVkcY9WTxXnvb1wRAzpyIneatZQ6hgqCVRsMZn3MZ9/6qpPApKufEN5TilCZ8+Og++fOLPODNQFDLfWHMKjZxmqWK8vOtEmneWn/JFwy1he2EBmXOYqyzu5FIKutOgLeEHoocdaNwtiaBhCulxEonze818q58TxLe1kcOBf9Dmk1BUOqDYxAY5FbqnDDVTKVTL9G8rw9XUJ0NO0hoqKKAciMgcV9epEN0/AQuir3rBrh1vXCf6mwVfYKFpqw+LJLv4WkOjai21xuiMYdU7Vibv95h862Aj8ovAfAgMBAAECggEBAIxrdgqrGueqpzH3IO5ygkf0/2HGg+afCLE/vIj3I+v0uDpVXwDjoHwyytZ1IA4n6x4QpHAg1esSrfBUrE7cB81lBWIpXExnJuCjR59Qx/DXnHZuxx1GJ7Kn0Q6wsar4AIunV0/QyNjiIIuvkgS+ru248v7fOgs7nvg6/gsUV5mTDppV6kf4lI14Mvpa7MIwKK2bB1zzLsWA7X9IuBS/QNxv+rRykc/uhZofDhWvaXbwGKxFf6unY2HwC3IFQONOdD6LlXyMdNT2pjMdPGdVu79eOC6wn2HBiIp7lXs08NqiL3oJ9Hh8+lqO0HVz5OMkpdaofXa7wDvZtdxGwsAlBokCgYEA5tgZWo/zK/u9GHCZrtwk9mP057BFy/83tl/c8ZmUT1CkyGx3/czVCvPZSjl6FBYWw6Bj1opwIBcQis83Kd7FHbVMgNDgg7Tyew+OAMUnM8GmWFHNQ/jA8Xe251yFOmoPwT/2MbGgwqmJjEtxD0zKPo8OVaK1odPZXN1g+KAjXjUCgYEAuBDkgrhpd8NrEa5OrxtiSipdgj8bmC7ET9xJVzFtoHFYybFCexQUA0z2NouA0GGw8qahOCx/a/CIP/hL1X3tZFUwuGjq3iSxBwhaM4aUPmDY1ratCCIxEQsl5eosGi54ltIVDE1yAgut3wMFP0YKM5ht/uBssPHrP7/gqdsGL4MCgYBcB0S8TO0F2Ns+9gzeoBcAP0MwZp68v+dnBnqfurlckWrQGCYSAWnhbutuYtGfVlsG7FdA/XnL4UYQAKIeSBhPSqrQI/WNrEKK+t2CwxZo1MfLJ/lsIqxQ14gMXl8itYvIYAZ3MzhCwrH6Q000a0mpfQCa9T3x4PIjyoHRPI49DQKBgBtZlzq9QB6lkOE9rz9hqEcw6FgUHHuOZ2keaF9mXs26SeEeT6yOHTMoWmVccTWFbo9/pvD726skQHqQ4GPGpGGGLwkXvd5oQU20NgL1+k0SguXUmv1cZ0ILEASLuSXixdRTPwFm+IvJRHqgrkTqmVV1TtLSchQQvk3oqu9SNicVAoGAYWga1T1D8MW0v7q2d05hJ3JqgHbAYZmKVxlR2Moh33fzV8CmusY3FhnbPQi8Lorj/CexjfXgvG+rZfa713qtJYLHWmJ7hQKwBQH9J0QPO3ffQyFAM1RjJyIvB9BPt8zN2QbujR4O6wXFee1zjKYgnuBAt7dBmE3O3nNdXAMa1g4="/>
+  <NotifyUrl value="http://218.17.158.45:15105/api/Asign/HandleASignCompleted"/>
+  <OpenApiUrl value="http://192.168.31.134:5015/mtp2-onlineopen"/>
+</Asign>
+```

+ 37 - 5
controllers/asign/test.go

@@ -98,13 +98,13 @@ func TestCaptchaVerify(c *gin.Context) {
 
 // CaptchaVerify 添加企业用户(V2)(测试)
 // @Summary 添加企业用户(V2)(测试)
-// @Produce     json
-// @accept      application/json
+// @Produce json
+// @accept  application/json
 // @Param   data body     asignService.APIAddEnterpriseUserReq true "入参"
 // @Success 200  {object} asignService.APIAddUserRsp
-// @Failure     500  {object} app.Response
+// @Failure 500  {object} app.Response
 // @Router  /Asign/TestAddEnterpriseUser [post]
-// @Tags        爱签
+// @Tags    爱签
 func TestAddEnterpriseUser(c *gin.Context) {
 	appG := app.Gin{C: c}
 
@@ -147,7 +147,39 @@ func TestGetUser(c *gin.Context) {
 	getUserReq := asignService.APIReq[asignService.APIGetUserReq]{
 		Data: req,
 	}
-	apiRsp, err := asignService.APIPost[asignService.APIGetUserReq, []asignService.APIGetUserRsp](getUserReq, asignService.APIURL_GetUser)
+	apiRsp, err := asignService.APIPost[asignService.APIGetUserReq, asignService.APIGetUserRsp](getUserReq, asignService.APIURL_GetUser)
+	if err != nil {
+		appG.ResponseByMsg(http.StatusBadRequest, e.ERROR, err.Error(), nil)
+		return
+	}
+
+	appG.Response(http.StatusOK, e.SUCCESS, apiRsp)
+}
+
+// GetUserSeals 查询印章(测试)
+// @Summary 查询印章(测试)
+// @Produce     json
+// @accept      application/json
+// @Param   data body     asignService.APIGetUserSealsReq true "入参"
+// @Success 200  {object} asignService.APIGetUserSealsRsp
+// @Failure     500  {object} app.Response
+// @Router  /Asign/GetUserSeals [post]
+// @Tags        爱签
+func GetUserSeals(c *gin.Context) {
+	appG := app.Gin{C: c}
+
+	// 获取请求参数
+	var req asignService.APIGetUserSealsReq
+	if err := appG.C.ShouldBindJSON(&req); err != nil {
+		logger.GetLogger().Errorf(err.Error())
+		appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
+		return
+	}
+
+	r := asignService.APIReq[asignService.APIGetUserSealsReq]{
+		Data: req,
+	}
+	apiRsp, err := asignService.APIPost[asignService.APIGetUserSealsReq, asignService.APIGetUserSealsRsp](r, asignService.APIURL_GetUserSeals)
 	if err != nil {
 		appG.ResponseByMsg(http.StatusBadRequest, e.ERROR, err.Error(), nil)
 		return

+ 108 - 0
docs/docs.go

@@ -239,6 +239,45 @@ const docTemplate = `{
                 }
             }
         },
+        "/Asign/GetUserSeals": {
+            "post": {
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "爱签"
+                ],
+                "summary": "查询印章(测试)",
+                "parameters": [
+                    {
+                        "description": "入参",
+                        "name": "data",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/asign.APIGetUserSealsReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/asign.APIGetUserSealsRsp"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/Asign/QueryUsereSignRecords": {
             "get": {
                 "security": [
@@ -23615,6 +23654,75 @@ const docTemplate = `{
                 }
             }
         },
+        "asign.APIGetUserSealsReq": {
+            "type": "object",
+            "required": [
+                "account"
+            ],
+            "properties": {
+                "account": {
+                    "description": "用户唯一识别码",
+                    "type": "string"
+                },
+                "sealNo": {
+                    "description": "印章编号(不传则返回印章列表)",
+                    "type": "string"
+                }
+            }
+        },
+        "asign.APIGetUserSealsRsp": {
+            "type": "object",
+            "properties": {
+                "companyName": {
+                    "description": "企业名称(当用户类型为企业时返回)",
+                    "type": "string"
+                },
+                "idNo": {
+                    "description": "个人用户证件号/企业法人身份证",
+                    "type": "string"
+                },
+                "list": {
+                    "description": "印章列表",
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/asign.APISealInfo"
+                    }
+                },
+                "mobile": {
+                    "description": "用户接收短信通知的手机号",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "个人用户名称/企业法人名称",
+                    "type": "string"
+                },
+                "userType": {
+                    "description": "用户类型:1:企业 2:个人",
+                    "type": "integer"
+                }
+            }
+        },
+        "asign.APISealInfo": {
+            "type": "object",
+            "properties": {
+                "isDefault": {
+                    "description": "是否默认章: 1:是 0:否",
+                    "type": "integer"
+                },
+                "sealName": {
+                    "description": "印章名称(印章抬头文字)",
+                    "type": "string"
+                },
+                "sealNo": {
+                    "description": "印章编号",
+                    "type": "string"
+                },
+                "sealUrl": {
+                    "description": "印章图片访问地址(当印章还在做成中时,此值为空)",
+                    "type": "string"
+                }
+            }
+        },
         "asign.BankCard4Req": {
             "type": "object",
             "required": [

+ 108 - 0
docs/swagger.json

@@ -230,6 +230,45 @@
                 }
             }
         },
+        "/Asign/GetUserSeals": {
+            "post": {
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "爱签"
+                ],
+                "summary": "查询印章(测试)",
+                "parameters": [
+                    {
+                        "description": "入参",
+                        "name": "data",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/asign.APIGetUserSealsReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/asign.APIGetUserSealsRsp"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/Asign/QueryUsereSignRecords": {
             "get": {
                 "security": [
@@ -23606,6 +23645,75 @@
                 }
             }
         },
+        "asign.APIGetUserSealsReq": {
+            "type": "object",
+            "required": [
+                "account"
+            ],
+            "properties": {
+                "account": {
+                    "description": "用户唯一识别码",
+                    "type": "string"
+                },
+                "sealNo": {
+                    "description": "印章编号(不传则返回印章列表)",
+                    "type": "string"
+                }
+            }
+        },
+        "asign.APIGetUserSealsRsp": {
+            "type": "object",
+            "properties": {
+                "companyName": {
+                    "description": "企业名称(当用户类型为企业时返回)",
+                    "type": "string"
+                },
+                "idNo": {
+                    "description": "个人用户证件号/企业法人身份证",
+                    "type": "string"
+                },
+                "list": {
+                    "description": "印章列表",
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/asign.APISealInfo"
+                    }
+                },
+                "mobile": {
+                    "description": "用户接收短信通知的手机号",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "个人用户名称/企业法人名称",
+                    "type": "string"
+                },
+                "userType": {
+                    "description": "用户类型:1:企业 2:个人",
+                    "type": "integer"
+                }
+            }
+        },
+        "asign.APISealInfo": {
+            "type": "object",
+            "properties": {
+                "isDefault": {
+                    "description": "是否默认章: 1:是 0:否",
+                    "type": "integer"
+                },
+                "sealName": {
+                    "description": "印章名称(印章抬头文字)",
+                    "type": "string"
+                },
+                "sealNo": {
+                    "description": "印章编号",
+                    "type": "string"
+                },
+                "sealUrl": {
+                    "description": "印章图片访问地址(当印章还在做成中时,此值为空)",
+                    "type": "string"
+                }
+            }
+        },
         "asign.BankCard4Req": {
             "type": "object",
             "required": [

+ 74 - 0
docs/swagger.yaml

@@ -155,6 +155,55 @@ definitions:
         description: 证件号码
         type: string
     type: object
+  asign.APIGetUserSealsReq:
+    properties:
+      account:
+        description: 用户唯一识别码
+        type: string
+      sealNo:
+        description: 印章编号(不传则返回印章列表)
+        type: string
+    required:
+    - account
+    type: object
+  asign.APIGetUserSealsRsp:
+    properties:
+      companyName:
+        description: 企业名称(当用户类型为企业时返回)
+        type: string
+      idNo:
+        description: 个人用户证件号/企业法人身份证
+        type: string
+      list:
+        description: 印章列表
+        items:
+          $ref: '#/definitions/asign.APISealInfo'
+        type: array
+      mobile:
+        description: 用户接收短信通知的手机号
+        type: string
+      name:
+        description: 个人用户名称/企业法人名称
+        type: string
+      userType:
+        description: 用户类型:1:企业 2:个人
+        type: integer
+    type: object
+  asign.APISealInfo:
+    properties:
+      isDefault:
+        description: 是否默认章: 1:是 0:否
+        type: integer
+      sealName:
+        description: 印章名称(印章抬头文字)
+        type: string
+      sealNo:
+        description: 印章编号
+        type: string
+      sealUrl:
+        description: 印章图片访问地址(当印章还在做成中时,此值为空)
+        type: string
+    type: object
   asign.BankCard4Req:
     properties:
       company:
@@ -31344,6 +31393,31 @@ paths:
       summary: 创建印章
       tags:
       - 爱签
+  /Asign/GetUserSeals:
+    post:
+      consumes:
+      - application/json
+      parameters:
+      - description: 入参
+        in: body
+        name: data
+        required: true
+        schema:
+          $ref: '#/definitions/asign.APIGetUserSealsReq'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/asign.APIGetUserSealsRsp'
+        "500":
+          description: Internal Server Error
+          schema:
+            $ref: '#/definitions/app.Response'
+      summary: 查询印章(测试)
+      tags:
+      - 爱签
   /Asign/QueryUsereSignRecords:
     get:
       consumes:

+ 2 - 1
go.mod

@@ -57,6 +57,8 @@ require (
 
 require (
 	github.com/bwmarrin/snowflake v0.3.0
+	github.com/bytedance/sonic v1.10.2
+	github.com/goinggo/mapstructure v0.0.0-20140717182941-194205d9b4a9
 	github.com/swaggo/files v1.0.1
 	github.com/swaggo/gin-swagger v1.6.0
 	github.com/swaggo/swag v1.16.2
@@ -68,7 +70,6 @@ require (
 	github.com/KyleBanks/depth v1.2.1 // indirect
 	github.com/PuerkitoBio/purell v1.1.1 // indirect
 	github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
-	github.com/bytedance/sonic v1.10.2 // indirect
 	github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
 	github.com/chenzhuoyu/iasm v0.9.1 // indirect
 	github.com/fsnotify/fsnotify v1.4.7 // indirect

+ 2 - 7
go.sum

@@ -25,13 +25,10 @@ github.com/bndr/gotabulate v1.1.2/go.mod h1:0+8yUgaPTtLRTjf49E8oju7ojpU11YmXyvq1
 github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
 github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
 github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
-github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA=
-github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
 github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM=
 github.com/bytedance/sonic v1.10.2 h1:GQebETVBxYB7JGWJtLBi07OVzWwt+8dWA00gEVW2ZFE=
 github.com/bytedance/sonic v1.10.2/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4=
 github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
-github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
 github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
 github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0=
 github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA=
@@ -78,6 +75,8 @@ github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gG
 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
 github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/goinggo/mapstructure v0.0.0-20140717182941-194205d9b4a9 h1:wqckanyE9qc/XnvnybC6SHOb8Nyd62QXAZOzA8twFig=
+github.com/goinggo/mapstructure v0.0.0-20140717182941-194205d9b4a9/go.mod h1:64ikIrMv84B+raz7akXOqbF7cK3/OQQ/6cClY10oy7A=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
 github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
@@ -98,7 +97,6 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
 github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
 github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
 github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc=
 github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
@@ -200,7 +198,6 @@ github.com/xormplus/core v0.0.0-20200308074340-f3bce19d5f31/go.mod h1:V3p6iAR/Ma
 github.com/xormplus/xorm v0.0.0-20200912034818-5d90dcd4e3d6 h1:8wMAe6KZ0YOG1RvjxyK5VhB29grvQbhb6MZTDIdpSd4=
 github.com/xormplus/xorm v0.0.0-20200912034818-5d90dcd4e3d6/go.mod h1:+v6b10b4x5IcQmp1/Cbo9IqaknxVeuhQng+fhya6bdI=
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU=
 golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
 golang.org/x/arch v0.7.0 h1:pskyeJh/3AmoQ8CPE95vxHLqp1G1GfGNXTmcl9NEKTc=
 golang.org/x/arch v0.7.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
@@ -232,8 +229,6 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
 golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=

+ 1 - 0
models/account.go

@@ -1418,6 +1418,7 @@ func (r *Gtwithholdsigninfo) buildSql() string {
 		t.updatetime
 	from GT_WithholdSignInfo t
 	where t.userid = %v 
+	order by t.updatetime desc 
 	`
 	sqlId.FormatParam(r.USERID)
 

+ 1 - 0
routers/router.go

@@ -861,6 +861,7 @@ func InitRouter() *gin.Engine {
 		asignR.Use().POST("TestAddEnterpriseUser", asign.TestAddEnterpriseUser)
 		asignR.Use().POST("TestGetUser", asign.TestGetUser)
 		asignR.Use().POST("CreateSeal", asign.CreateSeal)
+		asignR.Use().POST("GetUserSeals", asign.GetUserSeals)
 
 		asignR.Use(token.Auth()).POST("BankCard4", asign.BankCard4)
 		asignR.Use(token.Auth()).POST("CaptcaResend", asign.CaptcaResend)

+ 17 - 7
services/asign/api.go

@@ -25,10 +25,10 @@ import (
 	"time"
 
 	"github.com/bytedance/sonic"
-	"github.com/bytedance/sonic/encoder"
+	"github.com/fatih/structs"
 )
 
-func APIPost[T1 APIReqData, T2 APIRspData](req APIReq[T1], apiPort APIURL) (rsp *APIRsp[T2], err error) {
+func APIPost[T_REQ APIReqData, T_RSP APIRspData](req APIReq[T_REQ], apiPort APIURL) (rsp *APIRsp[T_RSP], err error) {
 	apiUrl := config.SerCfg.AsignCfg.Url + string(apiPort)
 
 	var rspBody []byte
@@ -42,7 +42,7 @@ func APIPost[T1 APIReqData, T2 APIRspData](req APIReq[T1], apiPort APIURL) (rsp
 		err = errors.New("调用接口返回内容为空")
 		return
 	}
-	rsp = new(APIRsp[T2])
+	rsp = new(APIRsp[T_RSP])
 	err = sonic.Unmarshal(rspBody, rsp)
 
 	return
@@ -56,17 +56,27 @@ func httpPost(apiUrl string, bizData ...interface{}) (rspBody []byte, err error)
 	timestamp := strconv.Itoa(int(time.Now().UnixMilli() + 10000*60))
 
 	// 排序key
-	var b []byte
+	// var b []byte
+	var sortedData string
 	if len(bizData) == 1 {
-		b, err = encoder.Encode(bizData[0], encoder.SortMapKeys)
+		// b, err = encoder.Encode(bizData[0], encoder.SortMapKeys)
+		sortedData = SortMapByKey(structs.Map(bizData[0]))
 	} else {
-		b, err = encoder.Encode(bizData, encoder.SortMapKeys)
+		// b, err = encoder.Encode(bizData, encoder.SortMapKeys)
+		sortedData := "["
+		for i, item := range bizData {
+			if i > 0 {
+				sortedData += ","
+			}
+			sortedData += SortMapByKey(structs.Map(item))
+		}
+		sortedData += "]"
 	}
 	if err != nil {
 		logger.GetLogger().Errorf("处理入参排序失败:" + err.Error())
 		return
 	}
-	sortedData := string(b)
+	// sortedData := string(b)
 	// 签名
 	signature, err := getSignature(sortedData, appId, timestamp, privateKey)
 	if err != nil {

+ 52 - 8
services/asign/apiModels.go

@@ -1,7 +1,22 @@
 package asign
 
 type APIReqData interface {
-	interface{} | APIPersonBankCard4Req | APICompanyBankCard4Req | APICaptchaResendReq | APICaptchaVerifyReq | APIGetUserReq | APIAddPersonalUserReq | APIAddEnterpriseUserReq | APITemplateListReq | APICreateContractReq | APIAddSignerReq | APIContractStatusReq | APIDownloadContractReq | APICreateSealReq | APIModifySealReq
+	interface{} |
+		APIPersonBankCard4Req |
+		APICompanyBankCard4Req |
+		APICaptchaResendReq |
+		APICaptchaVerifyReq |
+		APIGetUserReq |
+		APIAddPersonalUserReq |
+		APIAddEnterpriseUserReq |
+		APITemplateListReq |
+		APICreateContractReq |
+		APIAddSignerReq |
+		APIContractStatusReq |
+		APIDownloadContractReq |
+		APICreateSealReq |
+		APIModifySealReq |
+		APIGetUserSealsReq
 }
 
 type APIReq[T APIReqData] struct {
@@ -9,7 +24,12 @@ type APIReq[T APIReqData] struct {
 }
 
 type APIRspData interface {
-	interface{} | APIBankCard4Rsp | APIAddUserRsp | APICaptchaVerifyRsp | APIGetUserRsp
+	interface{} |
+		APIBankCard4Rsp |
+		APIAddUserRsp |
+		APICaptchaVerifyRsp |
+		APIGetUserRsp |
+		APIGetUserSealsRsp
 }
 
 type APIRsp[T APIRspData] struct {
@@ -28,12 +48,12 @@ type APIPersonBankCard4Req struct {
 
 // APICompanyBankCard4Req 企业法人银行卡四要素认证入参
 type APICompanyBankCard4Req struct {
-	CompanyName string `json:"companyName" binding:"required"` // 企业名称
-	CreditCode  string `json:"creditCode" binding:"required"`  // 社会统一信用代码
-	RealName    string `json:"realName" binding:"required"`    // 法人姓名
-	IdCardNo    string `json:"idCardNo" binding:"required"`    // 法人身份证号
-	BankCard    string `json:"bankCard" binding:"required"`    // 法人银行卡号(仅限印有“银联”字样的银行卡)
-	Mobile      string `json:"mobile" binding:"required"`      // 法人手机号(限中国大陆11位手机号)
+	CompanyName string `json:"companyName" binding:"required" mapstructure:"companyName"` // 企业名称
+	CreditCode  string `json:"creditCode" binding:"required" mapstructure:"creditCode"`   // 社会统一信用代码
+	RealName    string `json:"realName" binding:"required" mapstructure:"realName"`       // 法人姓名
+	IdCardNo    string `json:"idCardNo" binding:"required" mapstructure:"idCardNo"`       // 法人身份证号
+	BankCard    string `json:"bankCard" binding:"required" mapstructure:"bankCard"`       // 法人银行卡号(仅限印有“银联”字样的银行卡)
+	Mobile      string `json:"mobile" binding:"required" mapstructure:"mobile"`           // 法人手机号(限中国大陆11位手机号)
 }
 
 // APIBankCard4Rsp 银行卡四要素认证出参
@@ -345,3 +365,27 @@ type APIModifySealReq struct {
 	HasBorder      int     `json:"hasBorder" structs:",omitempty"`      // 是否带边框(仅个人印章有效)1 - 是,0 - 否(默认)
 	Shape          int     `json:"shape" structs:",omitempty"`          // 边框样式(仅个人印章有效)
 }
+
+// APIGetUserSealsReq 查询印章入参
+type APIGetUserSealsReq struct {
+	Account string `json:"account" binding:"required"` // 用户唯一识别码
+	SealNo  string `json:"sealNo"`                     // 印章编号(不传则返回印章列表)
+}
+
+// APISealInfo 印章信息
+type APISealInfo struct {
+	SealName  string `json:"sealName"`  // 印章名称(印章抬头文字)
+	SealUrl   string `json:"sealUrl"`   // 印章图片访问地址(当印章还在做成中时,此值为空)
+	IsDefault int    `json:"isDefault"` // 是否默认章: 1:是 0:否
+	SealNo    string `json:"sealNo"`    // 印章编号
+}
+
+// APIGetUserSealsRsp 查询印章出参
+type APIGetUserSealsRsp struct {
+	Name        string        `json:"name"`        // 个人用户名称/企业法人名称
+	IdNo        string        `json:"idNo"`        // 个人用户证件号/企业法人身份证
+	Mobile      string        `json:"mobile"`      // 用户接收短信通知的手机号
+	UserType    int           `json:"userType"`    // 用户类型:1:企业 2:个人
+	CompanyName string        `json:"companyName"` // 企业名称(当用户类型为企业时返回)
+	List        []APISealInfo `json:"list"`        // 印章列表
+}

+ 1 - 0
services/asign/const.go

@@ -20,4 +20,5 @@ const (
 	APIURL_CreateContract            = "/contract/createContract"   // 上传待签署文件
 	APIURL_AddSigner                 = "/contract/addSigner"        // 添加签署方
 	APIURL_Contract_Status           = "/contract/status"           // 查询合同状态
+	APIURL_GetUserSeals              = "/user/getUserSeals"         // 获取指定用户的印章
 )