diff --git a/go.mod b/go.mod index 8d179c1b..ecf72c6d 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/ArtisanCloud/PowerWeChat/v3 go 1.23 -//replace github.com/ArtisanCloud/PowerLibs/v3 => ../PowerLibs +// replace github.com/ArtisanCloud/PowerLibs/v3 => ../PowerLibs //replace github.com/ArtisanCloud/PowerSocialite/v3 => ../PowerSocialite @@ -10,27 +10,28 @@ require ( github.com/ArtisanCloud/PowerLibs/v3 v3.2.6 github.com/ArtisanCloud/PowerSocialite/v3 v3.0.7 github.com/go-playground/assert/v2 v2.0.1 - github.com/redis/go-redis/v9 v9.0.3 + github.com/pkg/errors v0.9.1 + github.com/redis/go-redis/v9 v9.6.1 github.com/stretchr/testify v1.9.0 - go.opentelemetry.io/otel v1.4.0 - go.opentelemetry.io/otel/sdk v1.4.0 + go.opentelemetry.io/otel v1.31.0 + go.opentelemetry.io/otel/sdk v1.31.0 ) require ( - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/clbanning/mxj/v2 v2.7.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/go-logr/logr v1.2.2 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - go.opentelemetry.io/otel/trace v1.4.0 // indirect - go.uber.org/atomic v1.7.0 // indirect - go.uber.org/multierr v1.6.0 // indirect - go.uber.org/zap v1.21.0 // indirect - golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 // indirect - golang.org/x/sys v0.25.0 // indirect + go.opentelemetry.io/otel/metric v1.31.0 // indirect + go.opentelemetry.io/otel/trace v1.31.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.0 // indirect + golang.org/x/crypto v0.28.0 // indirect + golang.org/x/sys v0.26.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index cc8fdb4d..348b9b1d 100644 --- a/go.sum +++ b/go.sum @@ -2,105 +2,63 @@ github.com/ArtisanCloud/PowerLibs/v3 v3.2.6 h1:xNDXBJ1VNYAEgs4UG/lSygzU66/XG3mTA github.com/ArtisanCloud/PowerLibs/v3 v3.2.6/go.mod h1:xFGsskCnzAu+6rFEJbGVAlwhrwZPXAny6m7j71S/B5k= github.com/ArtisanCloud/PowerSocialite/v3 v3.0.7 h1:P+erNlErr+X2v7Et+yTWaTfIRhw+HfpAPdvNIEwk9Gw= github.com/ArtisanCloud/PowerSocialite/v3 v3.0.7/go.mod h1:VZQNCvcK/rldF3QaExiSl1gJEAkyc5/I8RLOd3WFZq4= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao= -github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w= -github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= -github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/redis/go-redis/v9 v9.0.3 h1:+7mmR26M0IvyLxGZUHxu4GiBkJkVDid0Un+j4ScYu4k= -github.com/redis/go-redis/v9 v9.0.3/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDOjzMvcuQHk= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4= +github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opentelemetry.io/otel v1.4.0 h1:7ESuKPq6zpjRaY5nvVDGiuwK7VAJ8MwkKnmNJ9whNZ4= -go.opentelemetry.io/otel v1.4.0/go.mod h1:jeAqMFKy2uLIxCtKxoFj0FAL5zAPKQagc3+GtBWakzk= -go.opentelemetry.io/otel/sdk v1.4.0 h1:LJE4SW3jd4lQTESnlpQZcBhQ3oci0U2MLR5uhicfTHQ= -go.opentelemetry.io/otel/sdk v1.4.0/go.mod h1:71GJPNJh4Qju6zJuYl1CrYtXbrgfau/M9UAggqiy1UE= -go.opentelemetry.io/otel/trace v1.4.0 h1:4OOUrPZdVFQkbzl/JSdvGCWIdw5ONXXxzHlaLlWppmo= -go.opentelemetry.io/otel/trace v1.4.0/go.mod h1:uc3eRsqDfWs9R7b92xbQbU42/eTNz4N+gLP8qJCi4aE= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= -golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= +go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= +go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= +go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= +go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= +go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= +go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index 43746745..7cae36c3 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,9 @@ package main import ( "context" "fmt" + "os" + "strconv" + fmt2 "github.com/ArtisanCloud/PowerLibs/v3/fmt" "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel" "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/power" @@ -14,8 +17,6 @@ import ( "github.com/ArtisanCloud/PowerWeChat/v3/src/work" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/sdk/trace" - "os" - "strconv" ) func GetOfficialConfig() *officialAccount.UserConfig { @@ -39,7 +40,6 @@ func GetOfficialConfig() *officialAccount.UserConfig { HttpDebug: false, Debug: false, } - } func GetWorkConfig() *work.UserConfig { @@ -67,7 +67,7 @@ func GetWorkConfig() *work.UserConfig { DB: 1, }), - //HttpDebug: true, + // HttpDebug: true, Debug: true, // server config @@ -113,15 +113,14 @@ func GetPaymentConfig() *payment.UserConfig { //"sandbox": true, // server config - //Token: os.Getenv("token"), - //AESKey: os.Getenv("aes_key"), + // Token: os.Getenv("token"), + // AESKey: os.Getenv("aes_key"), } } func GetMiniProgramConfig() *miniProgram.UserConfig { return &miniProgram.UserConfig{ - AppID: os.Getenv("miniprogram_app_id"), // 小程序、公众号或者企业微信的appid Secret: os.Getenv("miniprogram_secret"), // 商户号 appID @@ -141,7 +140,6 @@ func GetMiniProgramConfig() *miniProgram.UserConfig { //"sandbox": true, } - } func GetOpenPlatformConfig() *openPlatform.UserConfig { @@ -161,11 +159,11 @@ func GetOpenPlatformConfig() *openPlatform.UserConfig { Password: "", DB: 1, }), - //OAuth: "", - //HttpDebug: "", - //Debug: "", - //NotifyURL: "", - //Sandbox: "", + // OAuth: "", + // HttpDebug: "", + // Debug: "", + // NotifyURL: "", + // Sandbox: "", } } @@ -180,7 +178,6 @@ func init() { } func main() { - fmt.Printf("hello Wechat! \n") tracer := otel.Tracer("example-tracer") @@ -193,9 +190,6 @@ func main() { if err != nil { fmt.Println(err.Error()) } - //officialAccountApp.Logger.Info("custom info log") - //officialAccountApp.Logger.Error("custom error log") - //officialAccountApp.Logger.Warn("custom warn log") officialAccountApp.TemplateMessage.Send(ctx, &request.RequestTemlateMessage{ ToUser: "", @@ -251,5 +245,4 @@ func main() { fmt.Println(err.Error()) } fmt2.Dump("openPlatform config:", openPlatform.GetConfig().All()) - } diff --git a/src/basicService/qrCode/request/requestCreate.go b/src/basicService/qrCode/request/requestCreate.go index 852eb0ba..3833aa6e 100644 --- a/src/basicService/qrCode/request/requestCreate.go +++ b/src/basicService/qrCode/request/requestCreate.go @@ -1,6 +1,5 @@ package request - type ActionInfo struct { Scene interface{} `json:"scene"` } diff --git a/src/basicService/url/request/requestShortGenKey.go b/src/basicService/url/request/requestShortGenKey.go index 43a4b698..d28398e1 100644 --- a/src/basicService/url/request/requestShortGenKey.go +++ b/src/basicService/url/request/requestShortGenKey.go @@ -3,4 +3,4 @@ package request type RequestShortGenKey struct { LongData string `json:"long_data"` ExpireSeconds int `json:"expire_seconds"` -} \ No newline at end of file +} diff --git a/src/kernel/accessToken.go b/src/kernel/accessToken.go index afc20731..5845b8a4 100644 --- a/src/kernel/accessToken.go +++ b/src/kernel/accessToken.go @@ -46,6 +46,7 @@ type AccessToken struct { func NewAccessToken(app ApplicationInterface) (*AccessToken, error) { config := (app).GetConfig() baseURI := config.GetString("http.base_uri", "/") + proxyURI := config.GetString("http.proxy_uri", "") var cacheClient cache.CacheInterface = nil c := config.Get("cache", nil) @@ -55,6 +56,9 @@ func NewAccessToken(app ApplicationInterface) (*AccessToken, error) { h, err := helper.NewRequestHelper(&helper.Config{ BaseUrl: baseURI, + ClientConfig: &contract3.ClientConfig{ + ProxyURI: proxyURI, + }, }) if err != nil { return nil, err @@ -82,7 +86,6 @@ func NewAccessToken(app ApplicationInterface) (*AccessToken, error) { } func (accessToken *AccessToken) GetToken(ctx context.Context, refresh bool) (resToken *response2.ResponseGetToken, err error) { - cacheKey := accessToken.GetCacheKey() cache := accessToken.GetCache() @@ -147,7 +150,6 @@ func (accessToken *AccessToken) SetToken(token *response2.ResponseGetToken) (tok return nil, errors.New("failed to cache access token") } return accessToken, err - } func (accessToken *AccessToken) getFormatToken(token object.HashMap) (*response2.ResponseGetToken, error) { @@ -157,7 +159,6 @@ func (accessToken *AccessToken) getFormatToken(token object.HashMap) (*response2 if accessToken.TokenKey == "access_token" && token["access_token"] != nil { resToken.AccessToken = token[accessToken.TokenKey].(string) - } else if accessToken.TokenKey == "component_access_token" && token["component_access_token"] != nil { resToken.AccessToken = token[accessToken.TokenKey].(string) resToken.ComponentAccessToken = token[accessToken.TokenKey].(string) @@ -194,7 +195,6 @@ func (accessToken *AccessToken) Refresh(ctx context.Context) contract.AccessToke } func (accessToken *AccessToken) requestToken(ctx context.Context, credentials *object.StringMap) (*response2.ResponseGetToken, error) { - res, err := accessToken.sendRequest(ctx, credentials) if err != nil { return nil, err @@ -207,14 +207,13 @@ func (accessToken *AccessToken) requestToken(ctx context.Context, credentials *o token.AuthorizerRefreshToken == "" && token.SuiteAccessToken == "" && token.ProviderAccessToken == "") { - return nil, errors.New(fmt.Sprintf("Request access_token fail: %v", res)) + return nil, fmt.Errorf("Request access_token fail: %v", res) } return token, nil } func (accessToken *AccessToken) ApplyToRequest(request *http.Request, requestOptions *object.HashMap) (*http.Request, error) { - // query Access Token power mapToken, err := accessToken.getQuery(request.Context()) if err != nil { @@ -230,7 +229,6 @@ func (accessToken *AccessToken) ApplyToRequest(request *http.Request, requestOpt } func (accessToken *AccessToken) sendRequest(ctx context.Context, credential *object.StringMap) (*response2.ResponseGetToken, error) { - key := "json" if accessToken.RequestMethod == http.MethodGet { key = "query" @@ -249,26 +247,24 @@ func (accessToken *AccessToken) sendRequest(ctx context.Context, credential *obj df := accessToken.HttpHelper.Df().WithContext(ctx).Uri(strEndpoint). Method(accessToken.RequestMethod) - // 检查是否需要有请求参数配置 - if options != nil { - // set query key values - if (*options)["query"] != nil { - queries := (*options)["query"].(*object.StringMap) - if queries != nil { - for k, v := range *queries { - df.Query(k, v) - } + // 检查是否需要有请求参数配置 + // set query key values + if (*options)["query"] != nil { + queries := (*options)["query"].(*object.StringMap) + if queries != nil { + for k, v := range *queries { + df.Query(k, v) } } + } - // set body json - if (*options)["json"] != nil { - df.Json((*options)["json"]) - } - //if (*options)["form_params"] != nil { - // df.Json((*options)["form_params"]) - //} + // set body json + if (*options)["json"] != nil { + df.Json((*options)["json"]) } + //if (*options)["form_params"] != nil { + // df.Json((*options)["form_params"]) + //} rs, err := df.Request() if err != nil { @@ -290,7 +286,6 @@ func (accessToken *AccessToken) SetCacheKey(key string) { // 2. 计算字符串的md5。"testappidtestsecret"的md5值为"edc5f6181730baffc0b88cf96658aeff" // 3. 加上PowerWeChat前缀命名空间:"powerwechat.access_token.",最终结果为:"powerwechat.access_token.edc5f6181730baffc0b88cf96658aeff" func (accessToken *AccessToken) GetCacheKey() string { - cacheKey := "" if accessToken.CacheTokenKey != "" { cacheKey = accessToken.CacheTokenKey @@ -308,7 +303,7 @@ func (accessToken *AccessToken) GetDefaultCacheKey() string { cacheKey := accessToken.CachePrefix + hex.EncodeToString(buffer[:]) // tbf - //fmt2.Dump(cacheKey) + // fmt2.Dump(cacheKey) return cacheKey } @@ -332,11 +327,9 @@ func (accessToken *AccessToken) getQuery(ctx context.Context) (*object.StringMap } return arrayReturn, err - } func (accessToken *AccessToken) RegisterHttpMiddlewares() { - // log logMiddleware := accessToken.GetMiddlewareOfLog @@ -356,7 +349,6 @@ func (accessToken *AccessToken) OverrideGetMiddlewareOfLog() { accessToken.GetMiddlewareOfLog = func(logger contract2.LoggerInterface) contract3.RequestMiddleware { return func(handle contract3.RequestHandle) contract3.RequestHandle { return func(request *http.Request) (response *http.Response, err error) { - logger := logger.WithContext(request.Context()) // 此处请求前后日志根据 log 配置中的 level 判断是否打印 @@ -376,7 +368,6 @@ func (accessToken *AccessToken) OverrideGetMiddlewareOfLog() { } func (accessToken *AccessToken) OverrideGetEndpoint() { - accessToken.GetEndpoint = func() (string, error) { if accessToken.EndpointToGetToken == "" { return "", errors.New("no endpoint for access token request") @@ -384,7 +375,6 @@ func (accessToken *AccessToken) OverrideGetEndpoint() { return accessToken.EndpointToGetToken, nil } - } func (accessToken *AccessToken) getTokenKey() string { diff --git a/src/kernel/baseClient.go b/src/kernel/baseClient.go index 496b9cda..2f03942b 100644 --- a/src/kernel/baseClient.go +++ b/src/kernel/baseClient.go @@ -3,16 +3,16 @@ package kernel import ( "bytes" "context" - "errors" "fmt" - request2 "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/request" - response2 "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/response" "io" "net/http" "strconv" "strings" "time" + request2 "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/request" + response2 "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/response" + "github.com/ArtisanCloud/PowerLibs/v3/http/contract" "github.com/ArtisanCloud/PowerLibs/v3/http/helper" contract2 "github.com/ArtisanCloud/PowerLibs/v3/logger/contract" @@ -51,7 +51,6 @@ type UploadContent struct { } func NewBaseClient(app *ApplicationInterface, token *AccessToken) (*BaseClient, error) { - config := (*app).GetConfig() baseURI := config.GetString("http.base_uri", "/") proxyURI := config.GetString("http.proxy_uri", "") @@ -68,7 +67,6 @@ func NewBaseClient(app *ApplicationInterface, token *AccessToken) (*BaseClient, ProxyURI: proxyURI, }, }) - if err != nil { return nil, err } @@ -98,7 +96,6 @@ func NewBaseClient(app *ApplicationInterface, token *AccessToken) (*BaseClient, } return client, nil - } func (client *BaseClient) HttpGet(ctx context.Context, url string, query *object.StringMap, outHeader interface{}, outBody interface{}) (interface{}, error) { @@ -143,6 +140,7 @@ func (client *BaseClient) HttpPostJson(ctx context.Context, url string, data int outBody, ) } + func (client *BaseClient) HttpPostJsonByEncode(ctx context.Context, url string, data interface{}, query *object.StringMap, outHeader interface{}, outBody interface{}) (interface{}, error) { return client.RequestByEncodedData( ctx, @@ -159,7 +157,6 @@ func (client *BaseClient) HttpPostJsonByEncode(ctx context.Context, url string, } func (client *BaseClient) HttpUpload(ctx context.Context, url string, files *object.HashMap, form *UploadForm, query interface{}, outHeader interface{}, outBody interface{}) (interface{}, error) { - // http client request df := client.HttpHelper.Df().WithContext(ctx).Uri(url).Method(http.MethodPost) @@ -196,7 +193,6 @@ func (client *BaseClient) HttpUpload(ctx context.Context, url string, files *obj for k, v := range mems { multipart.FileMem(form.FileName, k, v) } - }) // set query params @@ -231,13 +227,11 @@ func (client *BaseClient) HttpUpload(ctx context.Context, url string, files *obj } return response, err - } func (client *BaseClient) Request(ctx context.Context, url string, method string, options *object.HashMap, returnRaw bool, outHeader interface{}, outBody interface{}, ) (*http.Response, error) { - // http client request client.QueryRaw = returnRaw df := client.HttpHelper.Df().WithContext(ctx).Uri(url).Method(method) @@ -308,13 +302,11 @@ func (client *BaseClient) Request(ctx context.Context, url string, method string } return response, err - } func (client *BaseClient) RequestByEncodedData(ctx context.Context, url string, method string, options *object.HashMap, returnRaw bool, outHeader interface{}, outBody interface{}, ) (*http.Response, error) { - // http client request client.QueryRaw = returnRaw df := client.HttpHelper.Df().WithContext(ctx).Uri(url).Method(method) @@ -383,7 +375,6 @@ func (client *BaseClient) RequestByEncodedData(ctx context.Context, url string, } return response, err - } func (client *BaseClient) RequestRaw(ctx context.Context, url string, method string, options *object.HashMap, outHeader interface{}, outBody interface{}) (*http.Response, error) { @@ -391,7 +382,6 @@ func (client *BaseClient) RequestRaw(ctx context.Context, url string, method str } func (client *BaseClient) RegisterHttpMiddlewares() { - // access token accessTokenMiddleware := client.GetMiddlewareOfAccessToken // log @@ -421,10 +411,9 @@ func (client *BaseClient) OverrideGetMiddlewareOfAccessToken() { client.GetMiddlewareOfAccessToken = func(handle contract.RequestHandle) contract.RequestHandle { return func(request *http.Request) (response *http.Response, err error) { // 前置中间件 - //fmt.Println("获取access token, 在请求前执行") + // fmt.Println("获取access token, 在请求前执行") accessToken := (*client.App).GetAccessToken() - // accessToken := client.Token if accessToken != nil { config := (*client.App).GetContainer().Config @@ -442,7 +431,7 @@ func (client *BaseClient) OverrideGetMiddlewareOfAccessToken() { // handle 执行之后就可以操作 response 和 err // 后置中间件 - //fmt.Println("获取access token, 在请求后执行") + // fmt.Println("获取access token, 在请求后执行") return } } @@ -452,7 +441,6 @@ func (client *BaseClient) OverrideGetMiddlewareOfLog() { client.GetMiddlewareOfLog = func(logger contract2.LoggerInterface) contract.RequestMiddleware { return func(handle contract.RequestHandle) contract.RequestHandle { return func(request *http.Request) (response *http.Response, err error) { - logger = logger.WithContext(request.Context()) // 此处请求前后日志根据 log 配置中的 level 判断是否打印 @@ -475,17 +463,16 @@ func (client *BaseClient) OverrideGetMiddlewareOfRefreshAccessToken() { return contract.RequestMiddleware(func(handle contract.RequestHandle) contract.RequestHandle { return func(request *http.Request) (response *http.Response, err error) { // 前置中间件 - //fmt.Println("检查微信返回错误,token是否失效,执行前访问") + // fmt.Println("检查微信返回错误,token是否失效,执行前访问") response, err = handle(request) // handle 执行之后就可以操作 response 和 err - if err != nil { return response, err } if response.StatusCode != http.StatusOK { - return response, errors.New(fmt.Sprintf("http response code:%d", response.StatusCode)) + return response, fmt.Errorf("http response code:%d", response.StatusCode) } rs, err := client.CheckTokenNeedRefresh(request, response, retry) @@ -496,7 +483,7 @@ func (client *BaseClient) OverrideGetMiddlewareOfRefreshAccessToken() { } // 后置中间件 - //fmt.Println("检查微信返回错误,token是否失效,, 在请求后执行") + // fmt.Println("检查微信返回错误,token是否失效,, 在请求后执行") return } }) @@ -504,7 +491,6 @@ func (client *BaseClient) OverrideGetMiddlewareOfRefreshAccessToken() { } func (client *BaseClient) CheckTokenNeedRefresh(req *http.Request, rs *http.Response, retry int) (*http.Response, error) { - ctx := req.Context() // 如何微信返回的是二进制数据流,那么就无须判断返回的err code是否正常 @@ -542,6 +528,9 @@ func (client *BaseClient) CheckTokenNeedRefresh(req *http.Request, rs *http.Resp // clone 一个request client.Logger.WithContext(ctx).InfoF("refresh token, retry:%d", retry) token, err := client.Token.GetToken(ctx, false) + if err != nil { + return nil, err + } q := req.URL.Query() q.Set(client.Token.TokenKey, token.AccessToken) req.URL.RawQuery = q.Encode() @@ -564,10 +553,6 @@ func (client *BaseClient) CheckTokenNeedRefresh(req *http.Request, rs *http.Resp } return res2, err - //b, err := io.ReadAll(res2.Body) - //rs.Body = io.NopCloser(bytes.NewBuffer(b)) - //content := string(b) - //fmt2.Dump(content) } } diff --git a/src/kernel/models/callback.go b/src/kernel/models/callback.go index ea91a561..6f252240 100644 --- a/src/kernel/models/callback.go +++ b/src/kernel/models/callback.go @@ -2,6 +2,7 @@ package models import ( "encoding/xml" + "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/contract" ) diff --git a/src/kernel/serverGuard.go b/src/kernel/serverGuard.go index e0a5088c..4e81a63d 100644 --- a/src/kernel/serverGuard.go +++ b/src/kernel/serverGuard.go @@ -61,7 +61,6 @@ type ServerGuard struct { } func NewServerGuard(app *ApplicationInterface) *ServerGuard { - serverGuard := &ServerGuard{ Observable: support.NewObservable(), App: app, @@ -86,7 +85,6 @@ func NewServerGuard(app *ApplicationInterface) *ServerGuard { serverGuard.OverrideHandleEvent() return serverGuard - } func (serverGuard *ServerGuard) OverrideNotify() { @@ -126,7 +124,6 @@ func (serverGuard *ServerGuard) VerifyURL(request *http.Request) (httpRS *http.R // https://developer.work.weixin.qq.com/document/path/90930 func (serverGuard *ServerGuard) Serve(request *http.Request) (response *http.Response, err error) { - logger := (*serverGuard.App).GetComponent("Logger").(*logger2.Logger) logger.Info("Request received:", "method", request.Method, @@ -148,7 +145,6 @@ func (serverGuard *ServerGuard) Serve(request *http.Request) (response *http.Res } func (serverGuard *ServerGuard) validate(request *http.Request) (*ServerGuard, error) { - if !serverGuard.alwaysValidate && serverGuard.IsSafeMode(request) { return serverGuard, nil } @@ -207,7 +203,7 @@ func (serverGuard *ServerGuard) GetEvent(request *http.Request) (callback *model } func (serverGuard *ServerGuard) GetMessage(request *http.Request) (callback *models.Callback, callbackHeader *models.CallbackMessageHeader, Decrypted interface{}, err error) { - var b = []byte("") + b := []byte("") if request.Body != http.NoBody { b, err = io.ReadAll(request.Body) if err != nil || b == nil { @@ -302,35 +298,26 @@ func (serverGuard *ServerGuard) OverrideGetToken() { } func (serverGuard *ServerGuard) buildResponse(request *http.Request, to string, from string, message interface{}) string { - var toMessage contract.MessageInterface - switch message.(type) { + switch message := message.(type) { case nil: return SUCCESS_EMPTY_RESPONSE case string: - strMessage := message.(string) - if SUCCESS_EMPTY_RESPONSE == strMessage { + if SUCCESS_EMPTY_RESPONSE == message { return SUCCESS_EMPTY_RESPONSE } else { - toMessage = messages.NewText(message.(string)) + toMessage = messages.NewText(message) break } case int: - toMessage = messages.NewText(strconv.Itoa(message.(int))) - break - + toMessage = messages.NewText(strconv.Itoa(message)) case messages.Raw: - return message.(messages.Raw).Get("content", SUCCESS_EMPTY_RESPONSE).(string) - - case object.HashMap: - toMessage = messages.NewNews(message.([]*object.HashMap)) - break - case *object.HashMap: - toMessage = messages.NewNews(message.([]*object.HashMap)) - break + return message.Get("content", SUCCESS_EMPTY_RESPONSE).(string) + case []*object.HashMap: + toMessage = messages.NewNews(message) case contract.MessageInterface: - toMessage = message.(contract.MessageInterface) + toMessage = message default: } @@ -340,7 +327,6 @@ func (serverGuard *ServerGuard) buildResponse(request *http.Request, to string, func (serverGuard *ServerGuard) OverrideHandleEvent() { serverGuard.HandleEvent = func(r *http.Request, closure func(event contract.EventInterface) interface{}) (*object.HashMap, error) { - _, msgHeader, err := serverGuard.GetEvent(r) if err != nil { return nil, err @@ -366,7 +352,6 @@ func (serverGuard *ServerGuard) OverrideHandleEvent() { } func (serverGuard *ServerGuard) handleRequest(request *http.Request) (*object.HashMap, error) { - _, msgHeader, decryptedMessage, err := serverGuard.GetMessage(request) if err != nil { return nil, err @@ -375,7 +360,7 @@ func (serverGuard *ServerGuard) handleRequest(request *http.Request) (*object.Ha fromUserName := "" toUserName := "" - var messageType = "text" + messageType := "text" if msgHeader != nil { if msgHeader.MsgType != "" { messageType = msgHeader.MsgType @@ -393,7 +378,6 @@ func (serverGuard *ServerGuard) handleRequest(request *http.Request) (*object.Ha } func (serverGuard *ServerGuard) buildReply(request *http.Request, to string, from string, message contract.MessageInterface) (response string) { - prepends := &object.HashMap{ "ToUserName": to, "FromUserName": from, @@ -469,13 +453,12 @@ func (serverGuard *ServerGuard) ParseMessage(content string, dataType string) (c } func (serverGuard *ServerGuard) parseMessage2(content string) (dataContent *object.HashMap, err error) { - dataContent = nil if content != "" { // check xml format if content[0] == '<' { dataContent = &object.HashMap{} - //err = xml.Unmarshal([]byte(content), &dataContent) + // err = xml.Unmarshal([]byte(content), &dataContent) *dataContent, err = object.Xml2Map([]byte(content)) if err != nil { return nil, err @@ -494,12 +477,12 @@ func (serverGuard *ServerGuard) parseMessage2(content string) (dataContent *obje return dataContent, err } + func (serverGuard *ServerGuard) shouldReturnRawResponse(request *http.Request) bool { return false } func (serverGuard *ServerGuard) DecryptEvent(request *http.Request, content string) (callbackHeader *models.CallbackMessageHeader, err error) { - encryptor := (*serverGuard.App).GetComponent("Encryptor").(*Encryptor) query := request.URL.Query() buf, cryptErr := encryptor.Decrypt( @@ -525,11 +508,9 @@ func (serverGuard *ServerGuard) DecryptEvent(request *http.Request, content stri callbackHeader.Content = buf return callbackHeader, err - } func (serverGuard *ServerGuard) decryptEchoStr(request *http.Request, content string) (decryptMessage string, err error) { - encryptor := (*serverGuard.App).GetComponent("Encryptor").(*Encryptor) query := request.URL.Query() buf, cryptErr := encryptor.VerifyUrl( @@ -543,11 +524,9 @@ func (serverGuard *ServerGuard) decryptEchoStr(request *http.Request, content st } return string(buf), err - } func (serverGuard *ServerGuard) decryptMessage(request *http.Request, content string) (callbackHeader *models.CallbackMessageHeader, decryptMessage interface{}, err error) { - encryptor := (*serverGuard.App).GetComponent("Encryptor").(*Encryptor) query := request.URL.Query() buf, cryptErr := encryptor.Decrypt( @@ -573,5 +552,4 @@ func (serverGuard *ServerGuard) decryptMessage(request *http.Request, content st decryptMessage, err = serverGuard.ToCallbackType(callbackHeader, buf) return callbackHeader, decryptMessage, err - } diff --git a/src/kernel/support/rsa_oaep_test.go b/src/kernel/support/rsa_oaep_test.go index c0dc7294..782b281b 100644 --- a/src/kernel/support/rsa_oaep_test.go +++ b/src/kernel/support/rsa_oaep_test.go @@ -86,7 +86,7 @@ func TestRSA_EncryptOAEP(t *testing.T) { // 因为每次加密的随机数和hash都是不一样的,所以每次同一个明文加密出来的密文都会不一样 // 验证方法就是从加密出来的密文再解密,看下明文是否一致 - plainMsg, _ := rsaOaep.DecryptOAEP(sha1.New(),encryptedData) + plainMsg, _ := rsaOaep.DecryptOAEP(sha1.New(), encryptedData) assert.Equal(t, testPlainMsg, plainMsg) } @@ -106,7 +106,7 @@ func TestRSAOaep_DecryptOAEP(t *testing.T) { } testEncryptedMSG, _ := base64.URLEncoding.DecodeString(testEncryptedMSGBase64) - decryptedData, err := rsaOaep.DecryptOAEP(sha1.New(),[]byte(testEncryptedMSG)) + decryptedData, err := rsaOaep.DecryptOAEP(sha1.New(), []byte(testEncryptedMSG)) if err != nil { panic(err) } diff --git a/src/miniProgram/liveBroadcast/request/requestBroadcastGetLiveReplay.go b/src/miniProgram/liveBroadcast/request/requestBroadcastGetLiveReplay.go index fa8b5245..4031f026 100644 --- a/src/miniProgram/liveBroadcast/request/requestBroadcastGetLiveReplay.go +++ b/src/miniProgram/liveBroadcast/request/requestBroadcastGetLiveReplay.go @@ -2,7 +2,7 @@ package request type RequestBroadcastGetLiveReplay struct { Action string `json:"action"` - RoomID int `json:"room_id"` - Start int `json:"start"` - Limit int `json:"limit"` + RoomID int `json:"room_id"` + Start int `json:"start"` + Limit int `json:"limit"` } diff --git a/src/miniProgram/liveBroadcast/request/requestBroadcastGetSharedCode.go b/src/miniProgram/liveBroadcast/request/requestBroadcastGetSharedCode.go index b50392ab..b784c40f 100644 --- a/src/miniProgram/liveBroadcast/request/requestBroadcastGetSharedCode.go +++ b/src/miniProgram/liveBroadcast/request/requestBroadcastGetSharedCode.go @@ -1,6 +1,6 @@ package request type RequestBroadcastGetSharedCode struct { - RoomID int `json:"roomId"` + RoomID int `json:"roomId"` Params string `json:"params"` } diff --git a/src/miniProgram/liveBroadcast/request/requestBroadcastModifyAssistant.go b/src/miniProgram/liveBroadcast/request/requestBroadcastModifyAssistant.go index 915fc847..e9c9a440 100644 --- a/src/miniProgram/liveBroadcast/request/requestBroadcastModifyAssistant.go +++ b/src/miniProgram/liveBroadcast/request/requestBroadcastModifyAssistant.go @@ -1,7 +1,7 @@ package request type RequestBroadcastModifyAssistant struct { - RoomID int `json:"roomId"` + RoomID int `json:"roomId"` UserName string `json:"username"` NickName string `json:"nickname"` } diff --git a/src/miniProgram/liveBroadcast/request/requestBroadcastRemoveAssistant.go b/src/miniProgram/liveBroadcast/request/requestBroadcastRemoveAssistant.go index cfeee71f..22162a68 100644 --- a/src/miniProgram/liveBroadcast/request/requestBroadcastRemoveAssistant.go +++ b/src/miniProgram/liveBroadcast/request/requestBroadcastRemoveAssistant.go @@ -1,6 +1,6 @@ package request type RequestBroadcastRemoveAssistant struct { - RoomID int `json:"roomId"` + RoomID int `json:"roomId"` UserName string `json:"username"` } diff --git a/src/officialAccount/card/request/requestCard.go b/src/officialAccount/card/request/requestCard.go index 540521f5..b3438309 100644 --- a/src/officialAccount/card/request/requestCard.go +++ b/src/officialAccount/card/request/requestCard.go @@ -134,19 +134,18 @@ func (m *MemberCard) GetCardType() string { } type BonusRule struct { - CostMoneyUnit int `json:"cost_money_unit,omitempty"` - IncreaseBonus int `json:"increase_bonus,omitempty"` - MaxIncreaseBonus int `json:"max_increase_bonus,omitempty"` - InitIncreaseBonus int `json:"init_increase_bonus,omitempty"` - CostBonusUnit int `json:"cost_bonus_unit,omitempty"` - ReduceMoney int `json:"reduce_money,omitempty"` - LeastMoneyToUseBonus int `json:"least_money_to_use_bonus,omitempty"` - MaxReduceBonus int `json:"max_reduce_bonus,omitempty"` - BaseInfo *BaseInfo `json:"base_info"` - BonusCleared string `json:"bonus_cleared"` - BonusRules string `json:"bonus_rules"` - Prerogative string `json:"prerogative"` - + CostMoneyUnit int `json:"cost_money_unit,omitempty"` + IncreaseBonus int `json:"increase_bonus,omitempty"` + MaxIncreaseBonus int `json:"max_increase_bonus,omitempty"` + InitIncreaseBonus int `json:"init_increase_bonus,omitempty"` + CostBonusUnit int `json:"cost_bonus_unit,omitempty"` + ReduceMoney int `json:"reduce_money,omitempty"` + LeastMoneyToUseBonus int `json:"least_money_to_use_bonus,omitempty"` + MaxReduceBonus int `json:"max_reduce_bonus,omitempty"` + BaseInfo *BaseInfo `json:"base_info"` + BonusCleared string `json:"bonus_cleared"` + BonusRules string `json:"bonus_rules"` + Prerogative string `json:"prerogative"` } type ScenicTicket struct { BaseInfo *BaseInfo `json:"base_info"` diff --git a/src/officialAccount/dataCube/response/responseDataCubeCard.go b/src/officialAccount/dataCube/response/responseDataCubeCard.go index 056115b2..5f6ffcf5 100644 --- a/src/officialAccount/dataCube/response/responseDataCubeCard.go +++ b/src/officialAccount/dataCube/response/responseDataCubeCard.go @@ -39,8 +39,6 @@ type ResponseDataCubeMemberCardSummary struct { List []*MemberCardSummary `json:"list"` } - - // ---------------------------------------------------------------------- type MemberCardSummaryByID struct { @@ -68,8 +66,4 @@ type ResponseDataCubeMemberCardSummaryByID struct { // ---------------------------------------------------------------------- - - - // ---------------------------------------------------------------------- - diff --git a/src/officialAccount/device/response/responseDeviceBind.go b/src/officialAccount/device/response/responseDeviceBind.go index 7dfe6678..d66998e3 100644 --- a/src/officialAccount/device/response/responseDeviceBind.go +++ b/src/officialAccount/device/response/responseDeviceBind.go @@ -8,5 +8,3 @@ type BaseResp struct { type ResponseDeviceBind struct { BaseResp *BaseResp `json:"base_resp"` } - - diff --git a/src/officialAccount/guide/request/request.go b/src/officialAccount/guide/request/request.go index dede6b12..6502ed2b 100644 --- a/src/officialAccount/guide/request/request.go +++ b/src/officialAccount/guide/request/request.go @@ -8,20 +8,15 @@ type FastReplyList struct { GuideFastReplyList []*FastReply `json:"guide_fast_reply_list"` } - type AutoReply struct { Content string `json:"content"` MsgType string `json:"msgtype"` } - - - type BlackKeyword struct { Values []string `json:"values"` } - // ------------------------------------------------------------ type Buyer struct { @@ -30,6 +25,6 @@ type Buyer struct { } type BuyerList struct { - GuideAccount string `json:"guide_account"` + GuideAccount string `json:"guide_account"` BuyerList []Buyer `json:"buyer_list"` -} \ No newline at end of file +} diff --git a/src/officialAccount/material/request/requestMaterialBatchGetMaterial.go b/src/officialAccount/material/request/requestMaterialBatchGetMaterial.go index eff13e12..bcf6d371 100644 --- a/src/officialAccount/material/request/requestMaterialBatchGetMaterial.go +++ b/src/officialAccount/material/request/requestMaterialBatchGetMaterial.go @@ -2,6 +2,6 @@ package request type RequestMaterialBatchGetMaterial struct { Type string `json:"type"` - Offset int64 `json:"offset"` - Count int64 `json:"count"` + Offset int64 `json:"offset"` + Count int64 `json:"count"` } diff --git a/src/officialAccount/material/response/responseMaterialGetMaterialCount.go b/src/officialAccount/material/response/responseMaterialGetMaterialCount.go index f4af5b8a..fa7dcdf2 100644 --- a/src/officialAccount/material/response/responseMaterialGetMaterialCount.go +++ b/src/officialAccount/material/response/responseMaterialGetMaterialCount.go @@ -7,9 +7,9 @@ import ( type ResponseMaterialGetMaterialCount struct { response.ResponseOfficialAccount - VoiceCount int `json:"voice_count"` - VideoCount int `json:"video_count"` - ImageCount int `json:"image_count"` - NewsCount int `json:"news_count"` + VoiceCount int `json:"voice_count"` + VideoCount int `json:"video_count"` + ImageCount int `json:"image_count"` + NewsCount int `json:"news_count"` MediaID string `json:"media_id"` } diff --git a/src/officialAccount/menu/request/requestMenuConditional.go b/src/officialAccount/menu/request/requestMenuConditional.go index 44b1b7a1..89a6f46e 100644 --- a/src/officialAccount/menu/request/requestMenuConditional.go +++ b/src/officialAccount/menu/request/requestMenuConditional.go @@ -1,6 +1,5 @@ package request - type RequestMatchRule struct { TagID string `json:"tag_id"` Sex string `json:"sex"` diff --git a/src/officialAccount/poi/request/requestPOI.go b/src/officialAccount/poi/request/requestPOI.go index 6690d16a..78d36c0f 100644 --- a/src/officialAccount/poi/request/requestPOI.go +++ b/src/officialAccount/poi/request/requestPOI.go @@ -1,6 +1,5 @@ package request - type Photo struct { PhotoUrl string `json:"photo_url"` } @@ -26,4 +25,4 @@ type BusinessInfo struct { AvgPrice int `json:"avg_price"` AvailableState int `json:"available_state"` UpdateStatus int `json:"update_status"` -} \ No newline at end of file +} diff --git a/src/officialAccount/shakeAround/request/requestDevice.go b/src/officialAccount/shakeAround/request/requestDevice.go index 8152a9de..7eaf301f 100644 --- a/src/officialAccount/shakeAround/request/requestDevice.go +++ b/src/officialAccount/shakeAround/request/requestDevice.go @@ -7,7 +7,6 @@ type RequestDeviceApply struct { PoiID int `json:"poi_id"` } - // --------------------------------------------------- type RequestDeviceApplyStatus struct { @@ -24,9 +23,9 @@ type RequestDeviceIdentifier struct { } type RequestDeviceSearch struct { - Type int `json:"type"` + Type int `json:"type"` DeviceIdentifiers []*RequestDeviceIdentifier `json:"device_identifiers"` - ApplyID int `json:"apply_id"` - LastSeen int `json:"last_seen"` - Count int `json:"count"` -} \ No newline at end of file + ApplyID int `json:"apply_id"` + LastSeen int `json:"last_seen"` + Count int `json:"count"` +} diff --git a/src/officialAccount/shakeAround/request/requestPage.go b/src/officialAccount/shakeAround/request/requestPage.go index ccba104d..39b096bf 100644 --- a/src/officialAccount/shakeAround/request/requestPage.go +++ b/src/officialAccount/shakeAround/request/requestPage.go @@ -9,9 +9,7 @@ type RequestPageInfo struct { } type RequestPageUpdate struct { - *RequestPageInfo - PageID int `json:"page_id"` - -} \ No newline at end of file + PageID int `json:"page_id"` +} diff --git a/src/officialAccount/shakeAround/request/requestShakeAround.go b/src/officialAccount/shakeAround/request/requestShakeAround.go index 0af28a9e..b7f9326b 100644 --- a/src/officialAccount/shakeAround/request/requestShakeAround.go +++ b/src/officialAccount/shakeAround/request/requestShakeAround.go @@ -9,10 +9,8 @@ type RequestShakeAroundAccountRegister struct { ApplyReason string `json:"apply_reason"` } - // --------------------------------------------------------- - type RequestShakeAroundUser struct { Ticket string `json:"ticket"` NeedPoi int `json:"need_poi"` diff --git a/src/officialAccount/shakeAround/shakeAround.go b/src/officialAccount/shakeAround/shakeAround.go index 98df4b39..7db74da6 100644 --- a/src/officialAccount/shakeAround/shakeAround.go +++ b/src/officialAccount/shakeAround/shakeAround.go @@ -3,10 +3,10 @@ package shakeAround type ShakeAround struct { *Client - Device *DeviceClient - Page *PageClient - Material *MaterialClient - Group *GroupClient - Relation *RelationClient - Stats *StatsClient + Device *DeviceClient + Page *PageClient + Material *MaterialClient + Group *GroupClient + Relation *RelationClient + Stats *StatsClient } diff --git a/src/officialAccount/store/request/requestStore.go b/src/officialAccount/store/request/requestStore.go index 79d08bc4..b8b51c35 100644 --- a/src/officialAccount/store/request/requestStore.go +++ b/src/officialAccount/store/request/requestStore.go @@ -32,4 +32,3 @@ type RequestStoreUpdate struct { ContractPhone string `json:"contract_phone"` PicList string `json:"pic_list"` } - diff --git a/src/openPlatform/authorizer/miniProgram/code/client.go b/src/openPlatform/authorizer/miniProgram/code/client.go index dedadb24..af6517eb 100644 --- a/src/openPlatform/authorizer/miniProgram/code/client.go +++ b/src/openPlatform/authorizer/miniProgram/code/client.go @@ -5,9 +5,9 @@ import ( "github.com/ArtisanCloud/PowerLibs/v3/object" "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel" response2 "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/response" - response4 "github.com/ArtisanCloud/PowerWeChat/v3/src/work/media/response" "github.com/ArtisanCloud/PowerWeChat/v3/src/openPlatform/authorizer/miniProgram/code/request" "github.com/ArtisanCloud/PowerWeChat/v3/src/openPlatform/authorizer/miniProgram/code/response" + response4 "github.com/ArtisanCloud/PowerWeChat/v3/src/work/media/response" "net/http" ) diff --git a/src/openWork/application.go b/src/openWork/application.go index 40e07791..ea91c436 100644 --- a/src/openWork/application.go +++ b/src/openWork/application.go @@ -158,7 +158,6 @@ func (app *OpenWork) GetConfig() *kernel.Config { } func (app *OpenWork) GetComponent(name string) interface{} { - switch name { case "User": return app.User @@ -180,11 +179,9 @@ func (app *OpenWork) GetComponent(name string) interface{} { default: return nil } - } func MapUserConfig(userConfig *UserConfig) (*object.HashMap, error) { - baseURI := "https://qyapi.weixin.qq.com/" if userConfig.Http.BaseURI != "" { baseURI = userConfig.Http.BaseURI @@ -194,7 +191,6 @@ func MapUserConfig(userConfig *UserConfig) (*object.HashMap, error) { timeout = userConfig.Http.Timeout } config := &object.HashMap{ - "app_id": userConfig.AppID, "secret": userConfig.Secret, "auth_code": userConfig.AuthCode, @@ -250,6 +246,9 @@ func (app *OpenWork) ProviderClient(corpID string, permanentCode string, externC File: (*log)["file"].(string), ENV: (*log)["env"].(string), } + if driver, ok := (*log)["driver"].(contract.LoggerInterface); ok { + workLog.Driver = driver + } debug := config.GetBool("debug", false) httpDebug := config.GetBool("http_debug", false) if externConfig != nil { @@ -265,6 +264,9 @@ func (app *OpenWork) ProviderClient(corpID string, permanentCode string, externC if externConfig.OAuth.Callback != "" { oauth.Callback = externConfig.OAuth.Callback } + if driver, ok := externConfig.Log.Driver.(contract.LoggerInterface); ok { + workLog.Driver = driver + } if externConfig.Log.File != "" { workLog.File = externConfig.Log.File } @@ -314,6 +316,9 @@ func (app *OpenWork) ThirdpartyClient(corpID string, permanentCode string, exter File: (*log)["file"].(string), ENV: (*log)["env"].(string), } + if driver, ok := (*log)["driver"].(contract.LoggerInterface); ok { + workLog.Driver = driver + } debug := config.GetBool("debug", false) httpDebug := config.GetBool("http_debug", false) if externConfig != nil { @@ -335,6 +340,9 @@ func (app *OpenWork) ThirdpartyClient(corpID string, permanentCode string, exter if externConfig.Log.ENV != "" { workLog.ENV = externConfig.Log.ENV } + if driver, ok := externConfig.Log.Driver.(contract.LoggerInterface); ok { + workLog.Driver = driver + } if externConfig.Log.Level != "" { workLog.Level = externConfig.Log.Level } diff --git a/src/openWork/corp/accessToken.go b/src/openWork/corp/accessToken.go index a42d282b..9cbdace1 100644 --- a/src/openWork/corp/accessToken.go +++ b/src/openWork/corp/accessToken.go @@ -45,26 +45,22 @@ func NewAccessToken(app kernel.ApplicationInterface, corpId, permanentCode strin } func (accessToken *AccessToken) OverrideGetEndpoint() { - app := accessToken.App token := app.GetComponent("SuiteAccessToken").(*suit.AccessToken) accessToken.GetEndpoint = func() (string, error) { suiteAccessToken, _ := token.AccessToken.GetToken(context.Background(), false) return accessToken.EndpointToGetToken + `?suite_access_token=` + url.QueryEscape(suiteAccessToken.AccessToken), nil } - } // Override GetCredentials func (accessToken *AccessToken) OverrideGetCredentials() { - app := accessToken.App config := app.GetContainer().GetConfig() appID := (*config)["app_id"].(string) corpID := accessToken.corpID permanentCode := accessToken.permanentCode accessToken.GetCredentials = func() *object.StringMap { - return &object.StringMap{ "auth_corpid": corpID, "permanent_code": permanentCode, diff --git a/src/openWork/license/client.go b/src/openWork/license/client.go index 0b170da6..ccee3015 100644 --- a/src/openWork/license/client.go +++ b/src/openWork/license/client.go @@ -28,7 +28,6 @@ func NewClient(app kernel.ApplicationInterface) (*Client, error) { // 下单购买账号 // https://developer.work.weixin.qq.com/document/path/95644 func (clt *Client) CreateNewOrder(ctx context.Context, req *request.RequestCreateNewOrder) (string, error) { - var result struct { kernelResponse.ResponseWork OrderID string `json:"order_id,omitempty"` @@ -57,7 +56,6 @@ func (clt *Client) CreateRenewOrderJob(ctx context.Context, req *request.Request // 提交续期订单 // https://developer.work.weixin.qq.com/document/path/95646#%E6%8F%90%E4%BA%A4%E7%BB%AD%E6%9C%9F%E8%AE%A2%E5%8D%95 func (clt *Client) SubmitOrderJob(ctx context.Context, req *request.RequestSubmitOrderJob) (string, error) { - var result struct { kernelResponse.ResponseWork OrderID string `json:"order_id,omitempty"` @@ -104,10 +102,9 @@ func (clt *Client) GetOrder(ctx context.Context, orderID string) (*model.Order, // 获取订单中的账号列表 // https://developer.work.weixin.qq.com/document/path/95649 func (clt *Client) ListOrderAccount(ctx context.Context, orderID string, limit int, cursor string) (*response.ResponseListOrderAccount, error) { - var result response.ResponseListOrderAccount - var req = object.HashMap{ + req := object.HashMap{ "order_id": orderID, } if limit > 0 { diff --git a/src/openWork/provider/accessToken.go b/src/openWork/provider/accessToken.go index b6cdf0a7..24d0ddf9 100644 --- a/src/openWork/provider/accessToken.go +++ b/src/openWork/provider/accessToken.go @@ -38,14 +38,12 @@ func NewAccessToken(app kernel.ApplicationInterface) (*AccessToken, error) { // Override GetCredentials func (accessToken *AccessToken) OverrideGetCredentials() { - config := accessToken.App.GetContainer().GetConfig() - //服务商的corpid + // 服务商的corpid corpID := (*config)["provider_corpid"].(string) secret := (*config)["provider_secret"].(string) accessToken.GetCredentials = func() *object.StringMap { - return &object.StringMap{ "corpid": corpID, "provider_secret": secret, diff --git a/src/openWork/provider/client.go b/src/openWork/provider/client.go index 41d2894d..f2906fea 100644 --- a/src/openWork/provider/client.go +++ b/src/openWork/provider/client.go @@ -36,3 +36,20 @@ func (clt *Client) CorpIDToOpenCorpID(ctx context.Context, corpID string) (strin return result.OpenCorpID, err } + +// GetCustomizedAuthURL 获取带参授权链接 +// https://developer.work.weixin.qq.com/document/path/98744 +func (clt *Client) GetCustomizedAuthURL(ctx context.Context, state string, templateIDList []string) (string, error) { + var result struct { + response.ResponseWork + QRCodeURL string `json:"qrcode_url,omitempty"` + } + req := object.HashMap{ + "state": state, + "templateid_list": templateIDList, + } + + _, err := clt.BaseClient.HttpPostJson(ctx, "cgi-bin/service/get_customized_auth_url", &req, nil, nil, &result) + + return result.QRCodeURL, err +} diff --git a/src/openWork/provider/provider.go b/src/openWork/provider/provider.go index c496b14f..6bb212fb 100644 --- a/src/openWork/provider/provider.go +++ b/src/openWork/provider/provider.go @@ -3,10 +3,6 @@ package provider import "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel" func RegisterProvider(app kernel.ApplicationInterface) (*AccessToken, error) { - //client, err := NewClient(app) - //if err != nil { - // return nil, nil, err - //} accessToken, err := NewAccessToken(app) if err != nil { return nil, err diff --git a/src/openWork/server/guard.go b/src/openWork/server/guard.go index 586a36e3..9a54d450 100644 --- a/src/openWork/server/guard.go +++ b/src/openWork/server/guard.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/xml" "errors" + "fmt" "io" "net/http" @@ -86,7 +87,7 @@ type Guard struct { } func NewGuard(app *kernel.ApplicationInterface) *Guard { - //config := (*app).GetContainer().GetConfig() + // config := (*app).GetContainer().GetConfig() guard := &Guard{ kernel.NewServerGuard(app), @@ -98,17 +99,22 @@ func NewGuard(app *kernel.ApplicationInterface) *Guard { guard.OverrideToCallbackType() return guard - } // Override Validate func (guard *Guard) OverrideIsSafeMode() { + if guard.ServerGuard == nil { + return + } guard.IsSafeMode = func(request *http.Request) bool { return true } } func (guard *Guard) Notify(request *http.Request, closure func(content *kernelModels.Callback, ev models.IEvent, callbackMsg interface{}) interface{}) (httpRS *http.Response, err error) { + if guard.ServerGuard == nil { + return nil, nil + } // validate the signature _, err = guard.Validate(request) if err != nil { @@ -185,11 +191,9 @@ func (guard *Guard) Notify(request *http.Request, closure func(content *kernelMo } return httpRS, err - } func (guard *Guard) DecryptEvent(content string) (bufDecrypted []byte, err error) { - encryptor := (*guard.App).GetComponent("Encryptor").(*kernel.Encryptor) bufDecrypted, cryptErr := encryptor.DecryptContent(content) @@ -198,7 +202,6 @@ func (guard *Guard) DecryptEvent(content string) (bufDecrypted []byte, err error } return bufDecrypted, err - } // Override Validate @@ -221,16 +224,14 @@ func (guard *Guard) OverrideResolve() { } func (guard *Guard) registerHandlers() { - // guard.On(EVENT_AUTHORIZED, handlers.NewAuthorized(guard.App)) // guard.On(EVENT_UNAUTHORIZED, handlers.NewUnauthorized(guard.App)) // guard.On(EVENT_UPDATE_AUTHORIZED, handlers.NewUpdateAuthorized(guard.App)) guard.On(EVENT_SUITE_TICKET, handlers.NewSuiteTicket(guard.App)) - } func (guard *Guard) GetMessage(request *http.Request) (ev models.IEvent, msg interface{}, err error) { - var b = []byte("") + b := []byte("") if request.Body != http.NoBody { b, err = io.ReadAll(request.Body) if err != nil || b == nil { @@ -256,7 +257,6 @@ func (guard *Guard) GetMessage(request *http.Request) (ev models.IEvent, msg int } func (guard *Guard) parseMessage(content string, callback interface{}) (err error) { - if len(content) == 0 { return errors.New("empty content") } @@ -277,181 +277,172 @@ func (guard *Guard) parseMessage(content string, callback interface{}) (err erro } func (guard *Guard) OverrideToCallbackType() { - guard.ToCallbackType = func(callbackHeader contract.EventInterface, buf []byte) (decryptMessage interface{}, err error) { - switch callbackHeader.GetMsgType() { + msgType := callbackHeader.GetMsgType() + switch msgType { // msg type is message case kernelModels.CALLBACK_MSG_TYPE_TEXT: decryptMsg := workModels.MessageText{} err = xml.Unmarshal(buf, &decryptMsg) decryptMessage = decryptMsg - break - case kernelModels.CALLBACK_MSG_TYPE_IMAGE: decryptMsg := workModels.MessageImage{} err = xml.Unmarshal(buf, &decryptMsg) decryptMessage = decryptMsg - break - case kernelModels.CALLBACK_MSG_TYPE_VOICE: decryptMsg := workModels.MessageVoice{} err = xml.Unmarshal(buf, &decryptMsg) decryptMessage = decryptMsg - break - case kernelModels.CALLBACK_MSG_TYPE_VIDEO: decryptMsg := workModels.MessageVideo{} err = xml.Unmarshal(buf, &decryptMsg) decryptMessage = decryptMsg - break - case kernelModels.CALLBACK_MSG_TYPE_LOCATION: decryptMsg := workModels.MessageLocation{} err = xml.Unmarshal(buf, &decryptMsg) decryptMessage = decryptMsg - break - case kernelModels.CALLBACK_MSG_TYPE_LINK: decryptMsg := workModels.MessageLink{} err = xml.Unmarshal(buf, &decryptMsg) decryptMessage = decryptMsg - break - // msg type is event case kernelModels.CALLBACK_MSG_TYPE_EVENT: decryptMessage, err = guard.toCallbackEvent(callbackHeader, buf) return decryptMessage, err default: - return nil, errors.New("not found wechat msg type") + return nil, fmt.Errorf("not found wechat msg type:%s", msgType) } return decryptMessage, err } - } // switch event func (guard *Guard) toCallbackEvent(callbackHeader contract.EventInterface, buf []byte) (decryptMessage interface{}, err error) { + eventType := callbackHeader.GetEvent() - switch callbackHeader.GetEvent() { + switch eventType { // event is change contact case workModels.CALLBACK_EVENT_CUSTOMER_ACQUISITION, workModels.CALLBACK_EVENT_CHANGE_EXTERNAL_CONTACT, workModels.CALLBACK_EVENT_CHANGE_CONTACT: decryptMessage, err = guard.toCallbackEventChangeType(callbackHeader, buf) - break + // event is change external chat case workModels.CALLBACK_EVENT_CHANGE_EXTERNAL_CHAT: - decryptMessage, err = guard.toCallbackChatEventChangeType(callbackHeader, buf) - break + switch callbackHeader.GetChangeType() { + case workModels.CALLBACK_EVENT_CHANGE_TYPE_CREATE: + decryptMsg := &workModels.EventExternalChatCreate{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + case workModels.CALLBACK_EVENT_CHANGE_TYPE_UPDATE: + decryptMsg := &workModels.EventExternalChatUpdate{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + case workModels.CALLBACK_EVENT_CHANGE_TYPE_DISMISS: + decryptMsg := &workModels.EventExternalChatDismiss{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + } + + // event is change external tag + case workModels.CALLBACK_EVENT_CHANGE_EXTERNAL_TAG: + switch callbackHeader.GetChangeType() { + case workModels.CALLBACK_EVENT_CHANGE_TYPE_CREATE: + decryptMsg := &workModels.EventExternalUserTagCreate{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + case workModels.CALLBACK_EVENT_CHANGE_TYPE_UPDATE: + decryptMsg := &workModels.EventExternalUserTagUpdate{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + case workModels.CALLBACK_EVENT_CHANGE_TYPE_DELETE: + decryptMsg := &workModels.EventExternalUserTagDelete{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + case workModels.CALLBACK_EVENT_CHANGE_TYPE_SHUFFLE: + decryptMsg := &workModels.EventExternalUserTagDelete{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + } // events case workModels.CALLBACK_EVENT_SUBSCRIBE: decryptMsg := &workModels.EventSubscribe{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - + case workModels.CALLBACK_EVENT_UNSUBSCRIBE: + decryptMsg := &workModels.EventSubscribe{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg case workModels.CALLBACK_EVENT_ENTER_AGENT: decryptMsg := &workModels.EventEnterAgent{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_LOCATION: decryptMsg := &workModels.EventLocation{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_BATCH_JOB_RESULT: decryptMsg := &workModels.EventBatchJobResult{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_CLICK: decryptMsg := &workModels.EventClick{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_VIEW: decryptMsg := &workModels.EventView{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_SCANCODE_PUSH: decryptMsg := &workModels.EventScanCodePush{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_SCANCODE_WAITMSG: decryptMsg := &workModels.EventScancodeWaitMsg{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_PIC_SYSPHOTO: decryptMsg := &workModels.EventPicSysPhoto{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_PIC_PHOTO_OR_ALBUM: decryptMsg := &workModels.EventPicPhotoOrAlbum{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_PIC_WEIXIN: decryptMsg := &workModels.EventPicWeixin{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_LOCATION_SELECT: decryptMsg := &workModels.EventLocationSelect{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_OPEN_APPROVAL_CHANGE: decryptMsg := &workModels.EventOpenApprovalChange{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_SHARE_AGENT_CHANGE: decryptMsg := &workModels.EventShareAgentChange{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_TEMPLATE_CARD_MENU_EVENT: decryptMsg := &workModels.EventTemplateCardMenuEvent{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_LIVING_STATUS_CHANGE: decryptMsg := &workModels.EventLivingStatusChange{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - - case workModels.CALLBACK_EVENT_MSGAUDIT_NOTIFY: + case workModels.CALLBACK_EVENT_MSGAUDIT_NOTIFY, workModels.CALLBACK_EVENT_UNLICENSED_NOTIFY: decryptMsg := &workModels.EventMsgAuditNotify{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - default: - return nil, errors.New("not found wechat event") + return nil, fmt.Errorf("not found wecom event: %s", eventType) } return decryptMessage, err @@ -459,92 +450,84 @@ func (guard *Guard) toCallbackEvent(callbackHeader contract.EventInterface, buf // switch event change type func (guard *Guard) toCallbackEventChangeType(callbackHeader contract.EventInterface, buf []byte) (decryptMessage interface{}, err error) { - - switch callbackHeader.GetChangeType() { + changeType := callbackHeader.GetChangeType() + switch changeType { case workModels.CALLBACK_EVENT_CHANGE_TYPE_OPEN_PROFILE: decryptMsg := &workModels.EventCustomerAcquisitionOpenProfile{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_CHANGE_TYPE_FRIEND_REQUEST: decryptMsg := &workModels.EventCustomerAcquisitionFriendRequest{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - - case workModels.CALLBACK_EVENT_CHANGE_TYPE_ADD_EXTERNAL_CONTACT: - decryptMsg := &workModels.EventExternalUserAdd{} - err = xml.Unmarshal(buf, decryptMsg) - decryptMessage = decryptMsg - break - - case workModels.CALLBACK_EVENT_CHANGE_TYPE_ADD_HALF_EXTERNAL_CONTACT: - decryptMsg := &workModels.EventExternalUserAddHalf{} - err = xml.Unmarshal(buf, decryptMsg) - decryptMessage = decryptMsg - break - - case workModels.CALLBACK_EVENT_CHANGE_TYPE_EDIT_EXTERNAL_CONTACT: - decryptMsg := &workModels.EventExternalUserEdit{} - err = xml.Unmarshal(buf, decryptMsg) - decryptMessage = decryptMsg - break - - case workModels.CALLBACK_EVENT_CHANGE_TYPE_DEL_EXTERNAL_CONTACT: - decryptMsg := &workModels.EventExternalUserDel{} - err = xml.Unmarshal(buf, decryptMsg) - decryptMessage = decryptMsg - break - // change type is for user event case workModels.CALLBACK_EVENT_CHANGE_TYPE_CREATE_USER: decryptMsg := &workModels.EventUserCreate{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_CHANGE_TYPE_UPDATE_USER: decryptMsg := &workModels.EventUserUpdate{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_CHANGE_TYPE_DELETE_USER: decryptMsg := &workModels.EventUserDelete{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - // change type is for party event case workModels.CALLBACK_EVENT_CHANGE_TYPE_CREATE_PARTY: decryptMsg := &workModels.EventPartyCreate{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_CHANGE_TYPE_UPDATE_PARTY: decryptMsg := &workModels.EventPartyUpdate{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - case workModels.CALLBACK_EVENT_CHANGE_TYPE_DELETE_PARTY: decryptMsg := &workModels.EventPartyDelete{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - + // change type is for external contact event + case workModels.CALLBACK_EVENT_CHANGE_TYPE_ADD_EXTERNAL_CONTACT: + decryptMsg := &workModels.EventExternalUserAdd{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + case workModels.CALLBACK_EVENT_CHANGE_TYPE_EDIT_EXTERNAL_CONTACT: + decryptMsg := &workModels.EventExternalUserEdit{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + case workModels.CALLBACK_EVENT_CHANGE_TYPE_ADD_HALF_EXTERNAL_CONTACT: + decryptMsg := &workModels.EventExternalUserAddHalf{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + case workModels.CALLBACK_EVENT_CHANGE_TYPE_DEL_EXTERNAL_CONTACT: + decryptMsg := &workModels.EventExternalUserDel{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + case workModels.CALLBACK_EVENT_CHANGE_TYPE_DEL_FOLLOW_USER: + decryptMsg := &workModels.EventExternalUserDelFollowUser{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + case workModels.CALLBACK_EVENT_CHANGE_TYPE_TRANSFER_FAIL: + decryptMsg := &workModels.EventExternalTransferFail{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + // change type for event external chat + case workModels.CALLBACK_EVENT_UPDATE_DETAIL_ADD_MEMBER, workModels.CALLBACK_EVENT_UPDATE_DETAIL_DEL_MEMBER, workModels.CALLBACK_EVENT_UPDATE_DETAIL_CHANGE_OWNER, workModels.CALLBACK_EVENT_UPDATE_DETAIL_CHANGE_NAME, workModels.CALLBACK_EVENT_UPDATE_DETAIL_CHANGE_NOTICE: + decryptMsg := &workModels.EventExternalChatUpdate{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + case workModels.CALLBACK_EVENT_CHANGE_TYPE_DISMISS: + decryptMsg := &workModels.EventExternalChatDismiss{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg // change type is for tag event case workModels.CALLBACK_EVENT_CHANGE_TYPE_UPDATE_TAG: decryptMsg := &workModels.EventTagUpdate{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break - default: - return nil, errors.New("not found wechat event") + return nil, fmt.Errorf("not found wecom change event: %s, changeType: %s", callbackHeader.GetEvent(), changeType) } return decryptMessage, err @@ -552,23 +535,19 @@ func (guard *Guard) toCallbackEventChangeType(callbackHeader contract.EventInter // switch chat event change type func (guard *Guard) toCallbackChatEventChangeType(callbackHeader contract.EventInterface, buf []byte) (decryptMessage interface{}, err error) { - switch callbackHeader.GetChangeType() { case workModels.CALLBACK_EVENT_CHANGE_TYPE_CREATE: decryptMsg := &workModels.EventExternalChatCreate{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break case workModels.CALLBACK_EVENT_CHANGE_TYPE_UPDATE: decryptMsg := &workModels.EventExternalChatUpdate{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break case workModels.CALLBACK_EVENT_CHANGE_TYPE_DISMISS: decryptMsg := &workModels.EventExternalChatDismiss{} err = xml.Unmarshal(buf, decryptMsg) decryptMessage = decryptMsg - break default: return nil, errors.New("not found wechat event") } diff --git a/src/openWork/suitAuth/client.go b/src/openWork/suitAuth/client.go index 0eee228f..93e701d5 100644 --- a/src/openWork/suitAuth/client.go +++ b/src/openWork/suitAuth/client.go @@ -27,7 +27,6 @@ func NewClient(app kernel.ApplicationInterface) (*Client, error) { // 获取预授权码 // https://developer.work.weixin.qq.com/document/10975#%E8%8E%B7%E5%8F%96%E9%A2%84%E6%8E%88%E6%9D%83%E7%A0%81 func (comp *Client) GetPreAuthCode(ctx context.Context) (*response.PreAuthCode, error) { - var result response.PreAuthCode _, err := comp.BaseClient.HttpGet(ctx, "cgi-bin/service/get_pre_auth_code", nil, nil, &result) @@ -45,7 +44,6 @@ func (comp *Client) SetSessionInfo(ctx context.Context, req *request.SetSessionI // 获取企业永久授权码 // https://developer.work.weixin.qq.com/document/10975#%E8%8E%B7%E5%8F%96%E4%BC%81%E4%B8%9A%E6%B0%B8%E4%B9%85%E6%8E%88%E6%9D%83%E7%A0%81 func (comp *Client) GetPermanentCode(ctx context.Context, authCode string) (*response.GetPermanentCodeResponse, error) { - var result response.GetPermanentCodeResponse req := object.HashMap{ "auth_code": authCode, @@ -58,7 +56,6 @@ func (comp *Client) GetPermanentCode(ctx context.Context, authCode string) (*res // 获取企业授权信息 // https://developer.work.weixin.qq.com/document/10975#%E8%8E%B7%E5%8F%96%E4%BC%81%E4%B8%9A%E6%8E%88%E6%9D%83%E4%BF%A1%E6%81%AF func (comp *Client) GetAuthInfo(ctx context.Context, authCorpID string, permanentCode string) (*response.GetPermanentCodeResponse, error) { - var result response.GetPermanentCodeResponse req := object.HashMap{ "auth_corpid": authCorpID, @@ -72,7 +69,6 @@ func (comp *Client) GetAuthInfo(ctx context.Context, authCorpID string, permanen // userid的转换 // https://developer.work.weixin.qq.com/document/path/97062 func (comp *Client) UserIDToOpenUserID(ctx context.Context, userIDList []string) ([]response.UserIDToOpenUserIDResult, error) { - result := new(response.ResponseUserIDToOpenUserID) req := object.HashMap{ "userid_list": userIDList, diff --git a/src/openWork/suitAuth/provider.go b/src/openWork/suitAuth/provider.go index 5e2052f5..a894bbfb 100644 --- a/src/openWork/suitAuth/provider.go +++ b/src/openWork/suitAuth/provider.go @@ -5,7 +5,6 @@ import ( ) func RegisterProvider(app kernel.ApplicationInterface) (*SuiteTicket, *AccessToken, error) { - ticket, err := NewSuiteTicket(app) if err != nil { return nil, nil, err @@ -16,5 +15,4 @@ func RegisterProvider(app kernel.ApplicationInterface) (*SuiteTicket, *AccessTok } return ticket, accessToken, nil - } diff --git a/src/openWork/suitAuth/suiteTicket.go b/src/openWork/suitAuth/suiteTicket.go index e6c4c2cc..34e189fc 100644 --- a/src/openWork/suitAuth/suiteTicket.go +++ b/src/openWork/suitAuth/suiteTicket.go @@ -47,7 +47,6 @@ func (verifyTicket *SuiteTicket) SetTicket(ticket string) (err error) { } func (verifyTicket *SuiteTicket) GetTicket() (ticket string, err error) { - cacheHandle := verifyTicket.GetCache() cacheKey := verifyTicket.getCacheKey() cached, err := cacheHandle.Get(cacheKey, "") @@ -63,5 +62,4 @@ func (verifyTicket *SuiteTicket) GetTicket() (ticket string, err error) { func (verifyTicket *SuiteTicket) getCacheKey() string { config := verifyTicket.App.GetConfig() return "powerwechat.open_work.suite_ticket." + config.GetString("app_id", "") - } diff --git a/src/payment/apply4Sub/client.go b/src/payment/apply4Sub/client.go index dac25f81..0ac80b54 100644 --- a/src/payment/apply4Sub/client.go +++ b/src/payment/apply4Sub/client.go @@ -138,6 +138,6 @@ func (comp *Client) GetApplyByApplymentId(ctx context.Context, applymentId strin result := &response.ResponseGetApplyForBusiness{} endpoint := "/v3/applyment4sub/applyment/applyment_id/" + applymentId - _, err := comp.Request(ctx, endpoint, nil, http.MethodGet,&object.HashMap{}, false, nil, result) + _, err := comp.Request(ctx, endpoint, nil, http.MethodGet, &object.HashMap{}, false, nil, result) return result, err } diff --git a/src/payment/notify/request/requestNotify.go b/src/payment/notify/request/requestNotify.go index 635ea45b..21a363f6 100644 --- a/src/payment/notify/request/requestNotify.go +++ b/src/payment/notify/request/requestNotify.go @@ -28,6 +28,3 @@ type EncryptedResource struct { Plaintext string // Ciphertext 解密后内容 } - - - diff --git a/src/payment/order/request/h5.go b/src/payment/order/request/h5.go index 2d018264..0606e421 100644 --- a/src/payment/order/request/h5.go +++ b/src/payment/order/request/h5.go @@ -14,8 +14,8 @@ type H5GoodsDetail struct { } type H5Detail struct { - CostPrice int `json:"cost_price"` // 订单原价 - InvoiceID string `json:"invoice_id"` // 商品小票ID + CostPrice int `json:"cost_price"` // 订单原价 + InvoiceID string `json:"invoice_id"` // 商品小票ID GoodsDetail []*H5GoodsDetail `json:"goods_detail,omitempty"` // + 单品列表 } @@ -35,10 +35,10 @@ type H5H5Info struct { } type H5SceneInfo struct { - PayerClientIP string `json:"payer_client_ip"` // 用户终端IP - DeviceID string `json:"device_id"` // 商户端设备号 - StoreInfo *H5StoreInfo `json:"store_info,omitempty"` // + 商户门店信息 - H5Info *H5H5Info `json:"h5_info,omitempty"` // + H5场景信息 + PayerClientIP string `json:"payer_client_ip"` // 用户终端IP + DeviceID string `json:"device_id"` // 商户端设备号 + StoreInfo *H5StoreInfo `json:"store_info,omitempty"` // + 商户门店信息 + H5Info *H5H5Info `json:"h5_info,omitempty"` // + H5场景信息 } type H5SettleInfo struct { @@ -47,13 +47,13 @@ type H5SettleInfo struct { type RequestH5Prepay struct { PrepayBase - Description string `json:"description"` // 商品描述 - OutTradeNo string `json:"out_trade_no"` // 商户订单号 - TimeExpire string `json:"time_expire"` // 交易结束时间 - Attach string `json:"attach"` // 附加数据 - GoodsTag string `json:"goods_tag"` // 订单优惠标记 - Amount *H5Amount `json:"amount,omitempty"` // 订单金额 - Detail *H5Detail `json:"detail,omitempty"` // 优惠功能 - SceneInfo *H5SceneInfo `json:"scene_info,omitempty"` // 场景信息 - SettleInfo *H5SettleInfo `json:"settle_info,omitempty"` // 结算信息 -} \ No newline at end of file + Description string `json:"description"` // 商品描述 + OutTradeNo string `json:"out_trade_no"` // 商户订单号 + TimeExpire string `json:"time_expire"` // 交易结束时间 + Attach string `json:"attach"` // 附加数据 + GoodsTag string `json:"goods_tag"` // 订单优惠标记 + Amount *H5Amount `json:"amount,omitempty"` // 订单金额 + Detail *H5Detail `json:"detail,omitempty"` // 优惠功能 + SceneInfo *H5SceneInfo `json:"scene_info,omitempty"` // 场景信息 + SettleInfo *H5SettleInfo `json:"settle_info,omitempty"` // 结算信息 +} diff --git a/src/payment/partner/request/app.go b/src/payment/partner/request/app.go index efc644fa..deb19ac0 100644 --- a/src/payment/partner/request/app.go +++ b/src/payment/partner/request/app.go @@ -38,13 +38,13 @@ type AppSettleInfo struct { type RequestAppPrepay struct { PrepayBase - Description string `json:"description"` // 商品描述 - OutTradeNo string `json:"out_trade_no"` // 商户订单号 - TimeExpire string `json:"time_expire"` // 交易结束时间 - Attach string `json:"attach"` // 附加数据 - GoodsTag string `json:"goods_tag"` // 订单优惠标记 - Amount *AppAmount `json:"amount"` // 订单金额 - Detail *AppDetail `json:"detail,omitempty"` // 优惠功能 - SceneInfo *AppSceneInfo `json:"scene_info,omitempty"` // 场景信息 - SettleInfo *AppSettleInfo `json:"settle_info,omitempty"` // 结算信息 + Description string `json:"description"` // 商品描述 + OutTradeNo string `json:"out_trade_no"` // 商户订单号 + TimeExpire string `json:"time_expire"` // 交易结束时间 + Attach string `json:"attach"` // 附加数据 + GoodsTag string `json:"goods_tag"` // 订单优惠标记 + Amount *AppAmount `json:"amount"` // 订单金额 + Detail *AppDetail `json:"detail,omitempty"` // 优惠功能 + SceneInfo *AppSceneInfo `json:"scene_info,omitempty"` // 场景信息 + SettleInfo *AppSettleInfo `json:"settle_info,omitempty"` // 结算信息 } diff --git a/src/payment/partner/request/h5.go b/src/payment/partner/request/h5.go index 2d018264..0606e421 100644 --- a/src/payment/partner/request/h5.go +++ b/src/payment/partner/request/h5.go @@ -14,8 +14,8 @@ type H5GoodsDetail struct { } type H5Detail struct { - CostPrice int `json:"cost_price"` // 订单原价 - InvoiceID string `json:"invoice_id"` // 商品小票ID + CostPrice int `json:"cost_price"` // 订单原价 + InvoiceID string `json:"invoice_id"` // 商品小票ID GoodsDetail []*H5GoodsDetail `json:"goods_detail,omitempty"` // + 单品列表 } @@ -35,10 +35,10 @@ type H5H5Info struct { } type H5SceneInfo struct { - PayerClientIP string `json:"payer_client_ip"` // 用户终端IP - DeviceID string `json:"device_id"` // 商户端设备号 - StoreInfo *H5StoreInfo `json:"store_info,omitempty"` // + 商户门店信息 - H5Info *H5H5Info `json:"h5_info,omitempty"` // + H5场景信息 + PayerClientIP string `json:"payer_client_ip"` // 用户终端IP + DeviceID string `json:"device_id"` // 商户端设备号 + StoreInfo *H5StoreInfo `json:"store_info,omitempty"` // + 商户门店信息 + H5Info *H5H5Info `json:"h5_info,omitempty"` // + H5场景信息 } type H5SettleInfo struct { @@ -47,13 +47,13 @@ type H5SettleInfo struct { type RequestH5Prepay struct { PrepayBase - Description string `json:"description"` // 商品描述 - OutTradeNo string `json:"out_trade_no"` // 商户订单号 - TimeExpire string `json:"time_expire"` // 交易结束时间 - Attach string `json:"attach"` // 附加数据 - GoodsTag string `json:"goods_tag"` // 订单优惠标记 - Amount *H5Amount `json:"amount,omitempty"` // 订单金额 - Detail *H5Detail `json:"detail,omitempty"` // 优惠功能 - SceneInfo *H5SceneInfo `json:"scene_info,omitempty"` // 场景信息 - SettleInfo *H5SettleInfo `json:"settle_info,omitempty"` // 结算信息 -} \ No newline at end of file + Description string `json:"description"` // 商品描述 + OutTradeNo string `json:"out_trade_no"` // 商户订单号 + TimeExpire string `json:"time_expire"` // 交易结束时间 + Attach string `json:"attach"` // 附加数据 + GoodsTag string `json:"goods_tag"` // 订单优惠标记 + Amount *H5Amount `json:"amount,omitempty"` // 订单金额 + Detail *H5Detail `json:"detail,omitempty"` // 优惠功能 + SceneInfo *H5SceneInfo `json:"scene_info,omitempty"` // 场景信息 + SettleInfo *H5SettleInfo `json:"settle_info,omitempty"` // 结算信息 +} diff --git a/src/payment/promotion/request/requestPayTransferToPocket.go b/src/payment/promotion/request/requestPayTransferToPocket.go index e0e99e90..28818666 100644 --- a/src/payment/promotion/request/requestPayTransferToPocket.go +++ b/src/payment/promotion/request/requestPayTransferToPocket.go @@ -1,20 +1,19 @@ package request type RequestPayTransferToPocket struct { - - AppID string `xml:",appid"` - MchID string `xml:"mch_id"` - DeviceInfo string `xml:"device_info"` - NonceStr string `xml:"nonce_str"` - Sign string `xml:"sign"` - PartnerTradeNO string `xml:"partner_trade_no"` - OpenID string `xml:"openid"` - CheckName string `xml:"check_name"` - ReUserName string `xml:"re_user_name"` - Amount string `xml:"amount"` - Desc string `xml:"desc"` - SPBillCreateIP string `xml:"spbill_create_ip"` - WorkWXSign string `xml:"workwx_sign"` - WwMsgType string `xml:"ww_msg_type"` - ActName string `xml:"act_name"` + AppID string `xml:",appid"` + MchID string `xml:"mch_id"` + DeviceInfo string `xml:"device_info"` + NonceStr string `xml:"nonce_str"` + Sign string `xml:"sign"` + PartnerTradeNO string `xml:"partner_trade_no"` + OpenID string `xml:"openid"` + CheckName string `xml:"check_name"` + ReUserName string `xml:"re_user_name"` + Amount string `xml:"amount"` + Desc string `xml:"desc"` + SPBillCreateIP string `xml:"spbill_create_ip"` + WorkWXSign string `xml:"workwx_sign"` + WwMsgType string `xml:"ww_msg_type"` + ActName string `xml:"act_name"` } diff --git a/src/payment/promotion/request/requestQueryTransferToPocket.go b/src/payment/promotion/request/requestQueryTransferToPocket.go index 6e3cfbee..22e1ab2b 100644 --- a/src/payment/promotion/request/requestQueryTransferToPocket.go +++ b/src/payment/promotion/request/requestQueryTransferToPocket.go @@ -1,20 +1,19 @@ package request type RequestQueryTransferToPocket struct { - - AppID string `xml:",appid"` - MchID string `xml:"mch_id"` - DeviceInfo string `xml:"device_info"` - NonceStr string `xml:"nonce_str"` - Sign string `xml:"sign"` - PartnerTradeNO string `xml:"partner_trade_no"` - OpenID string `xml:"openid"` - CheckName string `xml:"check_name"` - ReUserName string `xml:"re_user_name"` - Amount string `xml:"amount"` - Desc string `xml:"desc"` - SPBillCreateIP string `xml:"spbill_create_ip"` - WorkWXSign string `xml:"workwx_sign"` - WwMsgType string `xml:"ww_msg_type"` - ActName string `xml:"act_name"` + AppID string `xml:",appid"` + MchID string `xml:"mch_id"` + DeviceInfo string `xml:"device_info"` + NonceStr string `xml:"nonce_str"` + Sign string `xml:"sign"` + PartnerTradeNO string `xml:"partner_trade_no"` + OpenID string `xml:"openid"` + CheckName string `xml:"check_name"` + ReUserName string `xml:"re_user_name"` + Amount string `xml:"amount"` + Desc string `xml:"desc"` + SPBillCreateIP string `xml:"spbill_create_ip"` + WorkWXSign string `xml:"workwx_sign"` + WwMsgType string `xml:"ww_msg_type"` + ActName string `xml:"act_name"` } diff --git a/src/payment/redpack/request/requestQueryWorkRedPack.go b/src/payment/redpack/request/requestQueryWorkRedPack.go index 1bad1bcc..45105127 100644 --- a/src/payment/redpack/request/requestQueryWorkRedPack.go +++ b/src/payment/redpack/request/requestQueryWorkRedPack.go @@ -1,11 +1,9 @@ package request type RequestQueryWorkRedPack struct { - - NonceStr string `xml:"nonce_str"` - Sign string `xml:"sign"` - MchBillNO string `xml:"mch_billno"` - MchID string `xml:"mch_id"` - Appid string `xml:"appid"` + NonceStr string `xml:"nonce_str"` + Sign string `xml:"sign"` + MchBillNO string `xml:"mch_billno"` + MchID string `xml:"mch_id"` + Appid string `xml:"appid"` } - diff --git a/src/payment/redpack/request/requestQueryWorkWX.go b/src/payment/redpack/request/requestQueryWorkWX.go index 2e78566d..058cb0e6 100644 --- a/src/payment/redpack/request/requestQueryWorkWX.go +++ b/src/payment/redpack/request/requestQueryWorkWX.go @@ -1,10 +1,9 @@ package request type RequestQueryWorkWX struct { - - NonceStr string `xml:"nonce_str"` - Sign string `xml:"sign"` - MchBillNO string `xml:"mch_billno"` - MchID string `xml:"mch_id"` - Appid string `xml:"appid"` + NonceStr string `xml:"nonce_str"` + Sign string `xml:"sign"` + MchBillNO string `xml:"mch_billno"` + MchID string `xml:"mch_id"` + Appid string `xml:"appid"` } diff --git a/src/payment/redpack/request/requestSendGroupRedPack.go b/src/payment/redpack/request/requestSendGroupRedPack.go index d2c453c9..a71911e8 100644 --- a/src/payment/redpack/request/requestSendGroupRedPack.go +++ b/src/payment/redpack/request/requestSendGroupRedPack.go @@ -1,20 +1,19 @@ package request type RequestSendGroupRedPack struct { - - Sign string `xml:"sign"` - MchBillNO string `xml:"mch_billno"` - MchID string `xml:"mch_id"` - WXAppID string `xml:"wxappid"` - SendName string `xml:"send_name"` - ReOpenID string `xml:"re_openid"` - TotalAmount int64 `xml:"total_amount"` - TotalNum int32 `xml:"total_num"` - AmtType string `xml:"amt_type"` - Wishing string `xml:"wishing"` - ActName string `xml:"act_name"` - Remark string `xml:"remark"` - SceneID string `xml:"scene_id"` - NonceStr string `xml:"nonce_str"` - RiskInfo string `xml:"risk_info"` + Sign string `xml:"sign"` + MchBillNO string `xml:"mch_billno"` + MchID string `xml:"mch_id"` + WXAppID string `xml:"wxappid"` + SendName string `xml:"send_name"` + ReOpenID string `xml:"re_openid"` + TotalAmount int64 `xml:"total_amount"` + TotalNum int32 `xml:"total_num"` + AmtType string `xml:"amt_type"` + Wishing string `xml:"wishing"` + ActName string `xml:"act_name"` + Remark string `xml:"remark"` + SceneID string `xml:"scene_id"` + NonceStr string `xml:"nonce_str"` + RiskInfo string `xml:"risk_info"` } diff --git a/src/payment/redpack/request/requestSendWorkWX.go b/src/payment/redpack/request/requestSendWorkWX.go index a3bd60cf..7dc2fff7 100644 --- a/src/payment/redpack/request/requestSendWorkWX.go +++ b/src/payment/redpack/request/requestSendWorkWX.go @@ -1,19 +1,17 @@ package request type RequestSendWorkWX struct { - - NonceStr string `xml:"nonce_str"` - Sign string `xml:"sign"` - MchBillNO string `xml:"mch_billno"` - MchID string `xml:"mch_id"` - WXAppID string `xml:"wxappid"` - SenderName string `xml:"sender_name"` - SenderHeaderMediaID string `xml:"sender_header_media_id"` - ReOpenID string `xml:"re_openid"` - TotalAmount string `xml:"total_amount"` - Wishing string `xml:"wishing"` - ActName string `xml:"act_name"` - Remark string `xml:"remark"` - WorkWXSign string `xml:"workwx_sign"` + NonceStr string `xml:"nonce_str"` + Sign string `xml:"sign"` + MchBillNO string `xml:"mch_billno"` + MchID string `xml:"mch_id"` + WXAppID string `xml:"wxappid"` + SenderName string `xml:"sender_name"` + SenderHeaderMediaID string `xml:"sender_header_media_id"` + ReOpenID string `xml:"re_openid"` + TotalAmount string `xml:"total_amount"` + Wishing string `xml:"wishing"` + ActName string `xml:"act_name"` + Remark string `xml:"remark"` + WorkWXSign string `xml:"workwx_sign"` } - diff --git a/src/payment/redpack/request/requestSendWorkWXRedPack.go b/src/payment/redpack/request/requestSendWorkWXRedPack.go index c159fa76..a361fa97 100644 --- a/src/payment/redpack/request/requestSendWorkWXRedPack.go +++ b/src/payment/redpack/request/requestSendWorkWXRedPack.go @@ -1,18 +1,17 @@ package request type RequestSendWorkWXRedPack struct { - NonceStr string `xml:"nonce_str"` - Sign string `xml:"sign"` - MchBillNO string `xml:"mch_billno"` - MchID string `xml:"mch_id"` - WXAppID string `xml:"wxappid"` - SenderName string `xml:"sender_name"` - SenderHeaderMediaID string `xml:"sender_header_media_id"` - ReOpenID string `xml:"re_openid"` - TotalAmount string `xml:"total_amount"` - Wishing string `xml:"wishing"` - ActName string `xml:"act_name"` - Remark string `xml:"remark"` - WorkWXSign string `xml:"workwx_sign"` + NonceStr string `xml:"nonce_str"` + Sign string `xml:"sign"` + MchBillNO string `xml:"mch_billno"` + MchID string `xml:"mch_id"` + WXAppID string `xml:"wxappid"` + SenderName string `xml:"sender_name"` + SenderHeaderMediaID string `xml:"sender_header_media_id"` + ReOpenID string `xml:"re_openid"` + TotalAmount string `xml:"total_amount"` + Wishing string `xml:"wishing"` + ActName string `xml:"act_name"` + Remark string `xml:"remark"` + WorkWXSign string `xml:"workwx_sign"` } - diff --git a/src/work/agent/request/requestAgentSet.go b/src/work/agent/request/requestAgentSet.go index a20590cb..d3b4b43c 100644 --- a/src/work/agent/request/requestAgentSet.go +++ b/src/work/agent/request/requestAgentSet.go @@ -9,4 +9,4 @@ type RequestAgentSet struct { RedirectDomain string `json:"redirect_domain"` IsReportEnter int `json:"isreportenter"` HomeUrl string `json:"home_url"` -} \ No newline at end of file +} diff --git a/src/work/externalContact/client.go b/src/work/externalContact/client.go index f8f3bfa6..51ff4de7 100644 --- a/src/work/externalContact/client.go +++ b/src/work/externalContact/client.go @@ -30,7 +30,6 @@ func NewClient(app kernel.ApplicationInterface) (*Client, error) { // 获取配置了客户联系功能的成员列表. // https://developer.work.weixin.qq.com/document/path/92571 func (comp *Client) GetFollowUsers(ctx context.Context) (*response.ResponseGetFollowUserList, error) { - result := &response.ResponseGetFollowUserList{} _, err := comp.BaseClient.HttpGet(ctx, "cgi-bin/externalcontact/get_follow_user_list", nil, nil, result) @@ -41,7 +40,6 @@ func (comp *Client) GetFollowUsers(ctx context.Context) (*response.ResponseGetFo // 获取外部联系人列表. // https://developer.work.weixin.qq.com/document/path/92113 func (comp *Client) List(ctx context.Context, userID string) (*response.ResponseGetList, error) { - result := &response.ResponseGetList{} _, err := comp.BaseClient.HttpGet(ctx, "cgi-bin/externalcontact/list", &object.StringMap{ @@ -54,7 +52,6 @@ func (comp *Client) List(ctx context.Context, userID string) (*response.Response // 获取外部联系人详情. // https://developer.work.weixin.qq.com/document/path/92114 func (comp *Client) Get(ctx context.Context, externalUserID string, cursor string) (*weCom.ResponseGetExternalContact, error) { - result := &weCom.ResponseGetExternalContact{} _, err := comp.BaseClient.HttpGet(ctx, "cgi-bin/externalcontact/get", &object.StringMap{ @@ -68,7 +65,6 @@ func (comp *Client) Get(ctx context.Context, externalUserID string, cursor strin // 批量获取客户详情. // https://developer.work.weixin.qq.com/document/path/92994 func (comp *Client) BatchGet(ctx context.Context, userID []string, cursor string, limit int) (*response.ResponseBatchGetByUser, error) { - result := &response.ResponseBatchGetByUser{} options := &object.HashMap{ @@ -85,7 +81,6 @@ func (comp *Client) BatchGet(ctx context.Context, userID []string, cursor string // 修改客户备注信息. // https://developer.work.weixin.qq.com/document/path/92115 func (comp *Client) Remark(ctx context.Context, data *request.RequestExternalContactRemark) (*response2.ResponseWork, error) { - result := &response2.ResponseWork{} _, err := comp.BaseClient.HttpPostJson(ctx, "cgi-bin/externalcontact/remark", data, nil, nil, result) @@ -96,7 +91,6 @@ func (comp *Client) Remark(ctx context.Context, data *request.RequestExternalCon // 获取待分配的离职成员列表 // https://developer.work.weixin.qq.com/document/path/92124 func (comp *Client) GetUnassigned(ctx context.Context, pageID int, pageSize int) (*response.ResponseGetUnassignedList, error) { - result := &response.ResponseGetUnassignedList{} _, err := comp.BaseClient.HttpPostJson(ctx, "cgi-bin/externalcontact/get_unassigned_list", &object.HashMap{ @@ -110,7 +104,6 @@ func (comp *Client) GetUnassigned(ctx context.Context, pageID int, pageSize int) // 分配离职成员的客户 // https://developer.work.weixin.qq.com/document/path/94081 func (comp *Client) Transfer(ctx context.Context, externalUserID []string, handoverUserID string, takeoverUserID string) (*response.ResponseGetTransferedCustomerList, error) { - result := &response.ResponseGetTransferedCustomerList{} _, err := comp.BaseClient.HttpPostJson(ctx, "cgi-bin/externalcontact/transfer_customer", &object.HashMap{ @@ -125,7 +118,6 @@ func (comp *Client) Transfer(ctx context.Context, externalUserID []string, hando // 分配离职成员的客户群 // https://developer.work.weixin.qq.com/document/path/92127 func (comp *Client) TransferGroupChat(ctx context.Context, chatIDs []string, newOwner string) (*response3.ResponseGroupChatTransfer, error) { - result := &response3.ResponseGroupChatTransfer{} _, err := comp.BaseClient.HttpPostJson(ctx, "cgi-bin/externalcontact/groupchat/transfer", &object.HashMap{ @@ -139,7 +131,6 @@ func (comp *Client) TransferGroupChat(ctx context.Context, chatIDs []string, new // 查询客户接替结果. // https://developer.work.weixin.qq.com/document/path/94082 func (comp *Client) GetResignedTransferResult(ctx context.Context, handoverUserID string, takeoverUserID string, cursor string) (*response.ResponseGetTransferedCustomerList, error) { - result := &response.ResponseGetTransferedCustomerList{} _, err := comp.BaseClient.HttpPostJson(ctx, "cgi-bin/externalcontact/resigned/transfer_result?", &object.StringMap{ @@ -154,7 +145,6 @@ func (comp *Client) GetResignedTransferResult(ctx context.Context, handoverUserI // 企业主体unionid转换为第三方external_userid // https://developer.work.weixin.qq.com/document/path/93274 func (comp *Client) UnionIDToExternalUserID(ctx context.Context, unionID string, openID string) (string, error) { - var result struct { response2.ResponseWork // ExternalUserID 该企业的外部联系人ID @@ -172,7 +162,6 @@ func (comp *Client) UnionIDToExternalUserID(ctx context.Context, unionID string, // 转换客户external_userid // https://developer.work.weixin.qq.com/document/path/97063#%E8%BD%AC%E6%8D%A2%E5%AE%A2%E6%88%B7external-userid func (comp *Client) GetNewExternalUserID(ctx context.Context, externalUserIDList []string) ([]response.NewExternalUserID, error) { - result := new(response.ResponseGetNewExternalUserID) req := object.HashMap{ "external_userid_list": externalUserIDList, @@ -186,7 +175,6 @@ func (comp *Client) GetNewExternalUserID(ctx context.Context, externalUserIDList // external_userid转换 // https://developer.work.weixin.qq.com/document/path/95884#external-userid%E8%BD%AC%E6%8D%A2 func (comp *Client) FromServiceExternalUserID(ctx context.Context, agentID int, externalUserID string) (string, error) { - result := new(struct { response2.ResponseWork ExternalUserID string `json:"external_userid,omitempty"` diff --git a/src/work/externalContact/customerStrategy/request/requestCustomerStrategyCreate.go b/src/work/externalContact/customerStrategy/request/requestCustomerStrategyCreate.go index 5ac4e4b9..b3c2b7db 100644 --- a/src/work/externalContact/customerStrategy/request/requestCustomerStrategyCreate.go +++ b/src/work/externalContact/customerStrategy/request/requestCustomerStrategyCreate.go @@ -1,11 +1,11 @@ package request type RequestCustomerStrategyCreate struct { - ParentID int64 `json:"parent_id" ` - StrategyName string `json:"strategy_name"` - AdminList []string `json:"admin_list"` - Privilege RequestCustomerStrategyPrivilege `json:"privilege"` - Range []RequestCustomerStrategyRange `json:"range"` + ParentID int64 `json:"parent_id" ` + StrategyName string `json:"strategy_name"` + AdminList []string `json:"admin_list"` + Privilege RequestCustomerStrategyPrivilege `json:"privilege"` + Range []RequestCustomerStrategyRange `json:"range"` } type RequestCustomerStrategyPrivilege struct { diff --git a/src/work/externalContact/moment/request/requestGetMomentList.go b/src/work/externalContact/moment/request/requestGetMomentList.go index 876efc8e..c8e76c74 100644 --- a/src/work/externalContact/moment/request/requestGetMomentList.go +++ b/src/work/externalContact/moment/request/requestGetMomentList.go @@ -7,5 +7,4 @@ type RequestGetMomentList struct { FilterType int `json:"filter_type"` Cursor string `json:"cursor"` Limit int `json:"limit"` - } diff --git a/src/work/externalContact/tag/request/requestTagGetStrategyTagList.go b/src/work/externalContact/tag/request/requestTagGetStrategyTagList.go index f51bbd61..71f7fc91 100644 --- a/src/work/externalContact/tag/request/requestTagGetStrategyTagList.go +++ b/src/work/externalContact/tag/request/requestTagGetStrategyTagList.go @@ -1,7 +1,7 @@ package request type RequestTagGetStrategyTagList struct { - TagID []string `json:"tag_id"` - GroupID []string `json:"group_id"` + TagID []string `json:"tag_id"` + GroupID []string `json:"group_id"` StrategyID int64 `json:"strategy_id"` } diff --git a/src/work/groupRobot/request/requestGroupRobot.go b/src/work/groupRobot/request/requestGroupRobot.go index 34e16b83..37a0bd77 100644 --- a/src/work/groupRobot/request/requestGroupRobot.go +++ b/src/work/groupRobot/request/requestGroupRobot.go @@ -41,16 +41,16 @@ type GroupRobotMsgFile struct { } type GroupRobotMsgTemplateCard struct { - CardType string `json:"card_type"` - Source TemplateCardSource `json:"source,omitempty"` - MainTitle TemplateCardMainTitle `json:"main_title,omitempty"` - CardImage TemplateCardImage `json:"card_image,omitempty"` - VerticalContentList []TemplateCardVerticalContentListItem `json:"vertical_content_list"` - EmphasisContent TemplateCardEmphasisContent `json:"emphasis_content,omitempty"` - SubTitleText string `json:"sub_title_text"` - HorizontalContentList []TemplateCardHorizontalContentListItem `json:"horizontal_content_list,omitempty"` - JumpList []TemplateCardJumpListItem `json:"jump_list,omitempty"` - CardAction TemplateCardCardAction `json:"card_action,omitempty"` + CardType string `json:"card_type"` + Source TemplateCardSource `json:"source,omitempty"` + MainTitle TemplateCardMainTitle `json:"main_title,omitempty"` + CardImage TemplateCardImage `json:"card_image,omitempty"` + VerticalContentList []TemplateCardVerticalContentListItem `json:"vertical_content_list"` + EmphasisContent TemplateCardEmphasisContent `json:"emphasis_content,omitempty"` + SubTitleText string `json:"sub_title_text"` + HorizontalContentList []TemplateCardHorizontalContentListItem `json:"horizontal_content_list,omitempty"` + JumpList []TemplateCardJumpListItem `json:"jump_list,omitempty"` + CardAction TemplateCardCardAction `json:"card_action,omitempty"` } type TemplateCardSource struct { IconUrl string `json:"icon_url"` diff --git a/src/work/invoice/request/cardInvoice.go b/src/work/invoice/request/cardInvoice.go index 42ced126..256081a5 100644 --- a/src/work/invoice/request/cardInvoice.go +++ b/src/work/invoice/request/cardInvoice.go @@ -3,4 +3,4 @@ package request type RequestCardInvoice struct { CardID string `json:"card_id"` EncryptCode string `json:"encrypt_code"` -} \ No newline at end of file +} diff --git a/src/work/message/appChat/request/requestAppChatCreate.go b/src/work/message/appChat/request/requestAppChatCreate.go index 71469de8..ae3bb8e0 100644 --- a/src/work/message/appChat/request/requestAppChatCreate.go +++ b/src/work/message/appChat/request/requestAppChatCreate.go @@ -1,10 +1,8 @@ package request type RequestAppChatCreate struct { - - Name string `json:"name"` - Owner string `json:"owner"` + Name string `json:"name"` + Owner string `json:"owner"` UserList []string `json:"userlist"` - ChatID string `json:"chatid"` - + ChatID string `json:"chatid"` } diff --git a/src/work/message/appChat/request/requestAppChatUpdate.go b/src/work/message/appChat/request/requestAppChatUpdate.go index 432d5e8e..5d7e44ae 100644 --- a/src/work/message/appChat/request/requestAppChatUpdate.go +++ b/src/work/message/appChat/request/requestAppChatUpdate.go @@ -1,12 +1,9 @@ package request type RequestAppChatUpdate struct { - - ChatID string `json:"chatid"` - Name string `json:"name"` - Owner string `json:"owner"` + ChatID string `json:"chatid"` + Name string `json:"name"` + Owner string `json:"owner"` AddUserList []string `json:"add_user_list"` DelUserList []string `json:"del_user_list"` - - } diff --git a/src/work/oa/webdrive/request/requestWebDriveFileDownload.go b/src/work/oa/webdrive/request/requestWebDriveFileDownload.go index 921553ee..d1d8625e 100644 --- a/src/work/oa/webdrive/request/requestWebDriveFileDownload.go +++ b/src/work/oa/webdrive/request/requestWebDriveFileDownload.go @@ -1,7 +1,6 @@ package request type RequestWebDriveFileDownload struct { - UserID string `json:"userid"` - FileID string `json:"fileid"` - + UserID string `json:"userid"` + FileID string `json:"fileid"` } diff --git a/src/work/oa/webdrive/request/requestWebDriveSpaceShare.go b/src/work/oa/webdrive/request/requestWebDriveSpaceShare.go index 21f36271..f72f0689 100644 --- a/src/work/oa/webdrive/request/requestWebDriveSpaceShare.go +++ b/src/work/oa/webdrive/request/requestWebDriveSpaceShare.go @@ -1,6 +1,6 @@ package request type RequestWebDriveSpaceShare struct { - UserID string `json:"userid"` - SpaceID string `json:"spaceid"` + UserID string `json:"userid"` + SpaceID string `json:"spaceid"` } diff --git a/src/work/oauth/request/requestOAuthCallback.go b/src/work/oauth/request/requestOAuthCallback.go index e38861e8..946bf23e 100644 --- a/src/work/oauth/request/requestOAuthCallback.go +++ b/src/work/oauth/request/requestOAuthCallback.go @@ -3,4 +3,3 @@ package request type ParaOAuthCallback struct { Code string `form:"code" json:"code" xml:"code" binding:"required"` } - diff --git a/src/work/oauth/request/requestOAuthCallbackQRCode.go b/src/work/oauth/request/requestOAuthCallbackQRCode.go index a71f3e64..9026ed92 100644 --- a/src/work/oauth/request/requestOAuthCallbackQRCode.go +++ b/src/work/oauth/request/requestOAuthCallbackQRCode.go @@ -5,4 +5,3 @@ type ParaOAuthCallbackQRCode struct { AppID string `form:"appid" json:"appid" xml:"appid"` State string `form:"state" json:"state" xml:"state"` } - diff --git a/src/work/server/guard.go b/src/work/server/guard.go index 8a874c5f..51f6821c 100644 --- a/src/work/server/guard.go +++ b/src/work/server/guard.go @@ -16,7 +16,7 @@ type Guard struct { } func NewGuard(app *kernel.ApplicationInterface) *Guard { - //config := (*app).GetContainer().GetConfig() + // config := (*app).GetContainer().GetConfig() guard := &Guard{ kernel.NewServerGuard(app), @@ -28,7 +28,6 @@ func NewGuard(app *kernel.ApplicationInterface) *Guard { guard.OverrideToCallbackType() return guard - } // Override Validate @@ -54,7 +53,6 @@ func (guard *Guard) OverrideShouldReturnRawResponse() { } func (guard *Guard) OverrideToCallbackType() { - // switch message type guard.ToCallbackType = func(callbackHeader contract.EventInterface, buf []byte) (decryptMessage interface{}, err error) { switch callbackHeader.GetMsgType() { @@ -107,12 +105,10 @@ func (guard *Guard) OverrideToCallbackType() { return decryptMessage, err } - } // switch event func (guard *Guard) toCallbackEvent(callbackHeader contract.EventInterface, buf []byte) (decryptMessage interface{}, err error) { - switch callbackHeader.GetEvent() { // event is change contact @@ -127,6 +123,12 @@ func (guard *Guard) toCallbackEvent(callbackHeader contract.EventInterface, buf decryptMessage = decryptMsg break + case models2.CALLBACK_EVENT_UNSUBSCRIBE: + decryptMsg := &models2.EventSubscribe{} + err = xml.Unmarshal(buf, decryptMsg) + decryptMessage = decryptMsg + break + case models2.CALLBACK_EVENT_ENTER_AGENT: decryptMsg := &models2.EventEnterAgent{} err = xml.Unmarshal(buf, decryptMsg) @@ -232,7 +234,6 @@ func (guard *Guard) toCallbackEvent(callbackHeader contract.EventInterface, buf // switch event change type func (guard *Guard) toCallbackEventChangeType(callbackHeader contract.EventInterface, buf []byte) (decryptMessage interface{}, err error) { - switch callbackHeader.GetChangeType() { // change type is for user event diff --git a/src/work/server/handlers/models/event.go b/src/work/server/handlers/models/event.go index 38c35f58..08847fe9 100644 --- a/src/work/server/handlers/models/event.go +++ b/src/work/server/handlers/models/event.go @@ -9,6 +9,7 @@ import ( const ( CALLBACK_EVENT_SUBSCRIBE = "subscribe" + CALLBACK_EVENT_UNSUBSCRIBE = "unsubscribe" CALLBACK_EVENT_ENTER_AGENT = "enter_agent" CALLBACK_EVENT_LOCATION = "LOCATION" CALLBACK_EVENT_BATCH_JOB_RESULT = "batch_job_result" @@ -263,7 +264,7 @@ type EventTemplateCardEvent struct { type EventTemplateCardMenuEvent struct { contract.EventInterface models.CallbackMessageHeader - //EventKey string `xml:"EventKey"` + // EventKey string `xml:"EventKey"` TaskID string `xml:"TaskId"` CardType string `xml:"CardType"` ResponseCode string `xml:"ResponseCode"` diff --git a/src/work/server/handlers/models/msgAudit.go b/src/work/server/handlers/models/msgAudit.go index db594146..7598d43e 100644 --- a/src/work/server/handlers/models/msgAudit.go +++ b/src/work/server/handlers/models/msgAudit.go @@ -5,7 +5,10 @@ import ( "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/models" ) -const CALLBACK_EVENT_MSGAUDIT_NOTIFY = "msgaudit_notify" +const ( + CALLBACK_EVENT_MSGAUDIT_NOTIFY = "msgaudit_notify" + CALLBACK_EVENT_UNLICENSED_NOTIFY = "unlicensed_notify" +) type EventMsgAuditNotify struct { contract.EventInterface diff --git a/test/featureUnit/main_test.go b/test/featureUnit/main_test.go index 3e46507e..8c4e080f 100644 --- a/test/featureUnit/main_test.go +++ b/test/featureUnit/main_test.go @@ -1,19 +1,21 @@ package featureUnit import ( - "github.com/ArtisanCloud/PowerWeChat/v3/src/payment" - "github.com/ArtisanCloud/PowerWeChat/v3/src/work" "log" "os" "strconv" "testing" + + "github.com/ArtisanCloud/PowerWeChat/v3/src/payment" + "github.com/ArtisanCloud/PowerWeChat/v3/src/work" ) -var Work *work.Work -var Payment *payment.Payment +var ( + Work *work.Work + Payment *payment.Payment +) func TestMain(m *testing.M) { - log.Println("Before Test: [++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") // init test app @@ -23,7 +25,6 @@ func TestMain(m *testing.M) { log.Println("After Test: ------------------------------------------------------------------]") os.Exit(exitVal) - } func GetWorkConfig() *work.UserConfig { @@ -34,18 +35,12 @@ func GetWorkConfig() *work.UserConfig { Secret: os.Getenv("secret"), ResponseType: os.Getenv("array"), - Log: work.Log{ - "debug", - "./wechat/info.log", - "./wechat/error.log", - "develop", - }, OAuth: work.OAuth{ Callback: os.Getenv("app_oauth_callback_url"), Scopes: []string{}, }, - //HttpDebug: true, + // HttpDebug: true, Debug: true, // server config @@ -83,8 +78,8 @@ func GetPaymentConfig() *payment.UserConfig { //"sandbox": true, // server config - //Token: os.Getenv("token"), - //AESKey: os.Getenv("aes_key"), + // Token: os.Getenv("token"), + // AESKey: os.Getenv("aes_key"), } } @@ -97,8 +92,8 @@ func TestInit(t *testing.T) { func TestInitWork(t *testing.T) { config := GetWorkConfig() Work, _ = work.NewWork(config) - } + func TestInitPayment(t *testing.T) { config := GetPaymentConfig() Payment, _ = payment.NewPayment(config) diff --git a/test/featureUnit/work_externalcontact_del_contact_way_test.go b/test/featureUnit/work_externalcontact_del_contact_way_test.go index daf39ee0..f9040340 100644 --- a/test/featureUnit/work_externalcontact_del_contact_way_test.go +++ b/test/featureUnit/work_externalcontact_del_contact_way_test.go @@ -1,13 +1,14 @@ package featureUnit import ( - "github.com/ArtisanCloud/PowerLibs/v3/fmt" + "context" "testing" + + "github.com/ArtisanCloud/PowerLibs/v3/fmt" ) func Test_ExternalContact_Del_Contact_Way(t *testing.T) { - - response, _ := Work.ExternalContactContactWay.Delete("f3626f74a7f94784115b0b8a729c471f") + response, _ := Work.ExternalContactContactWay.Delete(context.Background(), "f3626f74a7f94784115b0b8a729c471f") if response == nil { t.Error("response nil") @@ -16,5 +17,4 @@ func Test_ExternalContact_Del_Contact_Way(t *testing.T) { } fmt.Dump(response) - } diff --git a/test/featureUnit/work_externalcontact_get_contact_way_test.go b/test/featureUnit/work_externalcontact_get_contact_way_test.go index 9ad633aa..8659bd8f 100644 --- a/test/featureUnit/work_externalcontact_get_contact_way_test.go +++ b/test/featureUnit/work_externalcontact_get_contact_way_test.go @@ -2,12 +2,12 @@ package featureUnit import ( "context" - "github.com/ArtisanCloud/PowerLibs/v3/fmt" "testing" + + "github.com/ArtisanCloud/PowerLibs/v3/fmt" ) func Test_ExternalContact_Get_Contact_Way(t *testing.T) { - response, _ := Work.ExternalContactContactWay.Get(context.Background(), "008dc067bf677e5f03df89ce49bea25a") if response == nil { @@ -17,5 +17,4 @@ func Test_ExternalContact_Get_Contact_Way(t *testing.T) { } fmt.Dump(response) - } diff --git a/test/featureUnit/work_externalcontact_get_group_msg_result_test.go b/test/featureUnit/work_externalcontact_get_group_msg_result_test.go index 3d9b580c..83693d5a 100644 --- a/test/featureUnit/work_externalcontact_get_group_msg_result_test.go +++ b/test/featureUnit/work_externalcontact_get_group_msg_result_test.go @@ -1,15 +1,16 @@ package featureUnit import ( - "github.com/ArtisanCloud/PowerLibs/v3/fmt" + "context" "testing" + + "github.com/ArtisanCloud/PowerLibs/v3/fmt" ) func Test_ExternalContact_Get_Group_MSG_Result(t *testing.T) { - msgID := "msg_ViZBwAA72X9XCh4Cx5ku9OVFb2thQ" // walle - //msgID := "msg_ViZBwAAT_5pzEfUhaT2xbSbFxhTgw" // matt - response, _ := Work.ExternalContactGroupChat.Get(msgID, false) + // msgID := "msg_ViZBwAAT_5pzEfUhaT2xbSbFxhTgw" // matt + response, _ := Work.ExternalContactGroupChat.Get(context.Background(), msgID, 0) if response == nil { t.Error("response nil") @@ -18,5 +19,4 @@ func Test_ExternalContact_Get_Group_MSG_Result(t *testing.T) { } fmt.Dump(response) - } diff --git a/test/featureUnit/work_message_test.go b/test/featureUnit/work_message_test.go index c8a24bfd..ff195abd 100644 --- a/test/featureUnit/work_message_test.go +++ b/test/featureUnit/work_message_test.go @@ -1,12 +1,13 @@ package featureUnit import ( - "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/power" + "context" "testing" + + "github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/power" ) func Test_Message_Send_Text(t *testing.T) { - //para := &request.RequestMessageSendText{ // &request.RequestMessageSend{ // ToUser: "michael", @@ -34,17 +35,12 @@ func Test_Message_Send_Text(t *testing.T) { "enable_duplicate_check": 0, "duplicate_check_interval": 1800, } - - response, err := Work.Message.Send(powerPara) - + response, err := Work.Message.Send(context.Background(), powerPara) if err != nil { t.Error("uniformMessage send err is ", err) } - if response == nil || response.ResponseWork == nil { - t.Error("response nil") - } else if response.ErrCode != 0 { + if response == nil && response.ErrCode != 0 { t.Error("response error uniformMessage as :", response.ErrMsg) } - }