Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录
切换导航
L
library
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
stbz
library
Commits
4d821348
提交
4d821348
authored
1月 25, 2022
作者:
zhanglibo
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
京东
上级
92bdace8
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
1038 行增加
和
170 行删除
+1038
-170
.gitignore
.gitignore
+2
-0
go.mod
go.mod
+1
-0
go.sum
go.sum
+0
-161
logs.go
logs/logs.go
+18
-9
jingdong.go
upstream/jingdong/jingdong.go
+112
-0
jingdong_address.go
upstream/jingdong/jingdong_address.go
+80
-0
jingdong_goods.go
upstream/jingdong/jingdong_goods.go
+148
-0
jingdong_msg.go
upstream/jingdong/jingdong_msg.go
+53
-0
jingdong_order.go
upstream/jingdong/jingdong_order.go
+242
-0
jingdong_refund.go
upstream/jingdong/jingdong_refund.go
+275
-0
jingdong_token.go
upstream/jingdong/jingdong_token.go
+107
-0
没有找到文件。
.gitignore
0 → 100644
浏览文件 @
4d821348
/go.sum
/.idea
go.mod
浏览文件 @
4d821348
...
@@ -5,6 +5,7 @@ go 1.16
...
@@ -5,6 +5,7 @@ go 1.16
require (
require (
github.com/gogf/gf v1.16.6
github.com/gogf/gf v1.16.6
github.com/kjk/betterguid v0.0.0-20170621091430-c442874ba63a
github.com/kjk/betterguid v0.0.0-20170621091430-c442874ba63a
github.com/nsqio/go-nsq v1.1.0
github.com/olivere/elastic/v7 v7.0.30
github.com/olivere/elastic/v7 v7.0.30
)
)
go.sum
deleted
100644 → 0
浏览文件 @
92bdace8
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/aws/aws-sdk-go v1.42.23/go.mod h1:gyRszuZ/icHmHAVE4gc/r+cfCmhA1AD+vqfWbgI+eHs=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/clbanning/mxj v1.8.5-0.20200714211355-ff02cfb8ea28 h1:LdXxtjzvZYhhUaonAaAKArG3pyC67kGL3YY+6hGG8G4=
github.com/clbanning/mxj v1.8.5-0.20200714211355-ff02cfb8ea28/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fatih/color v1.12.0 h1:mRhaKNwANqRgUBGKmnI5ZxEk7QXmjQeCcuYFMX2bfcc=
github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/gogf/gf v1.16.6 h1:Yp5YfwnGz41d1tiVqxcWXiPXyuzjTb7ax4SnPSXxDE8=
github.com/gogf/gf v1.16.6/go.mod h1:4LoHfEBl2jbVmZpVx+qk2La3zWr1V315FtF2PVZuyQ8=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/gomodule/redigo v1.8.5 h1:nRAxCa+SVsyjSBrtZmG/cqb6VbTmuRzpg/PoTFlpumc=
github.com/gomodule/redigo v1.8.5/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grokify/html-strip-tags-go v0.0.0-20190921062105-daaa06bf1aaf h1:wIOAyJMMen0ELGiFzlmqxdcV1yGbkyHBAB6PolcNbLA=
github.com/grokify/html-strip-tags-go v0.0.0-20190921062105-daaa06bf1aaf/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/kjk/betterguid v0.0.0-20170621091430-c442874ba63a h1:b+Gt8sQs//Sl5Dcem5zP9Qc2FgEUAygREa2AAa2Vmcw=
github.com/kjk/betterguid v0.0.0-20170621091430-c442874ba63a/go.mod h1:uxRAhHE1nl34DpWgfe0CYbNYbCnYplaB6rZH9ReWtUk=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/olivere/elastic/v7 v7.0.30 h1:MyDWv+ZSn+56AOmqr69Sg4EFaBdGMpWFEK5zuqaL8AM=
github.com/olivere/elastic/v7 v7.0.30/go.mod h1:idEQxe7Es+Wr4XAuNnJdKeMZufkA9vQprOIFck061vg=
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak=
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.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.opentelemetry.io/otel v1.0.0-RC2 h1:SHhxSjB+omnGZPgGlKe+QMp3MyazcOHdQ8qwo89oKbg=
go.opentelemetry.io/otel v1.0.0-RC2/go.mod h1:w1thVQ7qbAy8MHb0IFj8a5Q2QU0l2ksf8u/CN8m3NOM=
go.opentelemetry.io/otel/oteltest v1.0.0-RC2 h1:xNKqMhlZYkASSyvF4JwObZFMq0jhFN3c3SP+2rCzVPk=
go.opentelemetry.io/otel/oteltest v1.0.0-RC2/go.mod h1:kiQ4tw5tAL4JLTbcOYwK1CWI1HkT5aiLzHovgOVnz/A=
go.opentelemetry.io/otel/trace v1.0.0-RC2 h1:dunAP0qDULMIT82atj34m5RgvsIK6LcsXf1c/MsYg1w=
go.opentelemetry.io/otel/trace v1.0.0-RC2/go.mod h1:JPQ+z6nNw9mqEGT8o3eoPTdnNI+Aj5JcxEsVGREIAy4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
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-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY=
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
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-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
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/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/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-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
logs/logs.go
浏览文件 @
4d821348
package
logs
package
logs
import
(
import
(
"context"
"fmt"
"fmt"
"github.com/gogf/gf/errors/gerror"
"github.com/gogf/gf/errors/gerror"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/glog"
"github.com/gogf/gf/os/glog"
)
)
type
RequestLogReq
struct
{
type
RequestLogReq
struct
{
Path
string
//存储路径
Path
string
//存储路径
RequestURI
string
//请求URI
RequestURI
string
//请求URI
...
@@ -20,13 +20,14 @@ type RequestLogReq struct {
...
@@ -20,13 +20,14 @@ type RequestLogReq struct {
ResponseTime
int64
//响应时间 毫秒级
ResponseTime
int64
//响应时间 毫秒级
}
}
const
FormatErr
=
"参数【%v】错误【%v】响应时间【%v】"
const
FormatSuc
=
"参数【%v】响应【%v】响应时间【%v】"
//统一请求日志 20211208 gk
//统一请求日志 20211208 gk
func
RequestLog
(
req
RequestLogReq
){
func
RequestLog
(
req
RequestLogReq
)
{
Info
(
req
.
Path
,
"请求ID:【%v】 服务名称: 【%v】 请求路径:【%v】 请求方法: 【%v】 请求参数: 【%v】 响应参数: 【%v】 响应时间:【%v ms】error:【%v】"
,
Info
(
req
.
Path
,
"请求ID:【%v】 服务名称: 【%v】 请求路径:【%v】 请求方法: 【%v】 请求参数: 【%v】 响应参数: 【%v】 响应时间:【%v ms】error:【%v】"
,
req
.
RequestID
,
req
.
ServerName
,
req
.
RequestURI
,
req
.
Method
,
req
.
Params
,
req
.
Response
,
req
.
ResponseTime
,
nil
)
req
.
RequestID
,
req
.
ServerName
,
req
.
RequestURI
,
req
.
Method
,
req
.
Params
,
req
.
Response
,
req
.
ResponseTime
,
nil
)
if
req
.
Err
!=
nil
{
if
req
.
Err
!=
nil
{
Error
(
"%+v"
,
gerror
.
Wrap
(
req
.
Err
,
req
.
RequestID
))
Error
(
"%+v"
,
gerror
.
Wrap
(
req
.
Err
,
req
.
RequestID
))
...
@@ -35,9 +36,9 @@ func RequestLog(req RequestLogReq){
...
@@ -35,9 +36,9 @@ func RequestLog(req RequestLogReq){
}
}
//记录info日志 20211208 gk
//记录info日志 20211208 gk
func
Info
(
path
string
,
format
string
,
v
...
interface
{})
{
func
Info
(
path
string
,
format
string
,
v
...
interface
{})
{
newPath
:=
g
.
Log
()
.
GetPath
()
+
"/"
+
path
newPath
:=
g
.
Log
()
.
GetPath
()
+
"/"
+
path
glog
.
Path
(
newPath
)
.
File
(
"info-{Ymd}.log"
)
.
Println
(
fmt
.
Sprintf
(
format
,
v
...
))
glog
.
Path
(
newPath
)
.
File
(
"info-{Ymd}.log"
)
.
Println
(
fmt
.
Sprintf
(
format
,
v
...
))
}
}
//记录error日志 20211208 gk
//记录error日志 20211208 gk
...
@@ -49,8 +50,16 @@ func Error(format string, v ...interface{}) {
...
@@ -49,8 +50,16 @@ func Error(format string, v ...interface{}) {
//检查错误 20211208 gk
//检查错误 20211208 gk
func
CheckErr
(
err
error
,
extra
string
)
bool
{
func
CheckErr
(
err
error
,
extra
string
)
bool
{
if
err
!=
nil
{
if
err
!=
nil
{
Error
(
"%+v"
,
gerror
.
Wrap
(
err
,
extra
))
Error
(
"%+v"
,
gerror
.
Wrap
(
err
,
extra
))
return
true
return
true
}
}
return
false
return
false
}
}
\ No newline at end of file
func
Infof
(
ctx
context
.
Context
,
path
string
,
format
string
,
v
...
interface
{})
{
g
.
Log
()
.
Ctx
(
ctx
)
.
Cat
(
path
)
.
Infof
(
format
,
v
...
)
}
func
Errorf
(
ctx
context
.
Context
,
format
string
,
v
...
interface
{})
{
g
.
Log
()
.
Ctx
(
ctx
)
.
Cat
(
"error"
)
.
Infof
(
format
,
v
...
)
}
upstream/jingdong/jingdong.go
0 → 100644
浏览文件 @
4d821348
package
jingdong
import
(
"context"
"github.com/gogf/gf/crypto/gmd5"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/gtime"
"github.com/gogf/gf/util/gconv"
"gitlab.jxhh.com/stbz/library.git/logs"
"net/url"
"strings"
"time"
)
type
Config
struct
{
ApiUrl
string
BasePathUrl
string
GetTokenUrl
string
RefreshTokenUrl
string
AppKey
string
AppSecret
string
UserName
string
PassWord
string
Mobile
string
Email
string
SubmitState
string
CompanyName
string
}
type
CommonRes
struct
{
Success
bool
`json:"success"`
ResultCode
string
`json:"resultCode"`
ResultMessage
string
`json:"resultMessage"`
}
type
client
struct
{
*
Config
AccessToken
string
}
var
server
*
client
const
CacheKey
=
"jingdong:token"
const
pkgName
=
"jingdong"
func
New
(
config
*
Config
)
{
_
=
gconv
.
Scan
(
config
,
&
server
)
return
}
//post 请求
func
(
s
*
client
)
post
(
ctx
context
.
Context
,
method
string
,
params
g
.
MapStrStr
)
(
str
string
,
err
error
)
{
Start
:=
gtime
.
TimestampMilli
()
postValues
:=
url
.
Values
{}
for
k
,
v
:=
range
params
{
postValues
.
Add
(
k
,
v
)
}
postString
:=
postValues
.
Encode
()
Request
:=
g
.
Client
()
Request
.
SetHeader
(
"Content-Type"
,
"application/x-www-form-urlencoded"
)
resp
,
err
:=
Request
.
Timeout
(
time
.
Second
*
5
)
.
Post
(
method
,
postString
)
defer
func
()
{
_
=
resp
.
Body
.
Close
()
paramStr
:=
gjson
.
New
(
params
)
.
MustToJsonString
()
ctx
=
context
.
WithValue
(
ctx
,
"Method"
,
"POST"
)
ctx
=
context
.
WithValue
(
ctx
,
"URI"
,
method
)
if
err
!=
nil
{
logs
.
Errorf
(
ctx
,
logs
.
FormatErr
,
paramStr
,
err
.
Error
(),
gtime
.
TimestampMilli
()
-
Start
)
}
else
{
logs
.
Infof
(
ctx
,
pkgName
,
logs
.
FormatSuc
,
paramStr
,
str
,
gtime
.
TimestampMilli
()
-
Start
)
}
}()
if
err
!=
nil
{
return
}
str
=
resp
.
ReadAllString
()
return
}
//getSign 签名
func
(
s
*
client
)
getSign
(
timeStamp
string
)
string
{
var
str
=
s
.
AppSecret
+
timeStamp
+
s
.
AppKey
+
s
.
UserName
return
strings
.
ToUpper
(
gmd5
.
MustEncrypt
(
str
+
gmd5
.
MustEncrypt
(
s
.
PassWord
)
+
"access_token"
+
s
.
AppSecret
))
}
// requestApi 请求
func
(
s
*
client
)
requestApi
(
ctx
context
.
Context
,
method
string
,
businessParams
g
.
MapStrStr
)
(
str
string
,
err
error
)
{
params
,
err
:=
s
.
createPostRequest
(
ctx
,
businessParams
)
if
err
!=
nil
{
return
}
urlMethod
:=
s
.
ApiUrl
+
method
str
,
err
=
s
.
post
(
ctx
,
urlMethod
,
params
)
return
}
func
(
s
*
client
)
createPostRequest
(
ctx
context
.
Context
,
businessParams
g
.
MapStrStr
)
(
res
g
.
MapStrStr
,
err
error
)
{
err
=
s
.
getAccessToken
(
ctx
)
if
err
!=
nil
{
return
}
res
=
g
.
MapStrStr
{
"token"
:
s
.
AccessToken
,
}
if
businessParams
!=
nil
{
for
k
,
v
:=
range
businessParams
{
res
[
k
]
=
v
}
}
return
}
upstream/jingdong/jingdong_address.go
0 → 100644
浏览文件 @
4d821348
package
jingdong
import
(
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/util/gconv"
)
type
addressJD
struct
{
}
var
Address
=
addressJD
{}
type
ParseRes
struct
{
*
CommonRes
Result
struct
{
NationId
string
`json:"nationId"`
//国家ID
Nation
string
`json:"nation"`
//国家名称
ProvinceId
int
`json:"provinceId"`
//一级地址ID
Province
string
`json:"province"`
//一级地址名称
CityId
int
`json:"cityId"`
//二级地址ID
City
string
`json:"city"`
//二级地址名称
CountyId
int
`json:"countyId"`
//三级地址ID
County
string
`json:"county"`
//三级地址名称
TownId
int
`json:"townId"`
//四级地址ID
Town
string
`json:"town"`
//四级地址名称
}
`json:"result"`
}
type
GetTownRes
struct
{
*
CommonRes
Result
map
[
string
]
int
`json:"result"`
}
//Parse 地址详情转换京东地址编码
func
(
addressJD
)
Parse
(
ctx
context
.
Context
,
address
string
)
(
res
*
ParseRes
,
err
error
)
{
method
:=
"area/getJDAddressFromAddress"
param
:=
map
[
string
]
string
{
"address"
:
address
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// CheckArea 验证地址有效性
func
(
addressJD
)
CheckArea
(
ctx
context
.
Context
,
provinceId
,
cityId
,
countyId
,
townId
interface
{})
(
res
*
CommonRes
,
err
error
)
{
method
:=
"area/checkArea"
param
:=
map
[
string
]
string
{
"provinceId"
:
gconv
.
String
(
provinceId
),
"cityId"
:
gconv
.
String
(
cityId
),
"countyId"
:
gconv
.
String
(
countyId
),
"townId"
:
gconv
.
String
(
townId
),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// GetTown 查询四级地址
func
(
addressJD
)
GetTown
(
ctx
context
.
Context
,
id
interface
{})
(
res
*
GetTownRes
,
err
error
)
{
method
:=
"area/getTown"
param
:=
map
[
string
]
string
{
"id"
:
gconv
.
String
(
id
),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
upstream/jingdong/jingdong_goods.go
0 → 100644
浏览文件 @
4d821348
package
jingdong
import
(
"context"
"github.com/gogf/gf/container/garray"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/util/gconv"
)
type
goodsJD
struct
{
}
var
Goods
=
goodsJD
{}
type
CheckSaleRes
struct
{
*
CommonRes
Result
[]
struct
{
SkuId
int
`json:"skuid"`
//商品编号
Name
string
`json:"name"`
//销售名称
SaleState
int
`json:"saleState"`
//是否可售 1:是,0:否
IsCanVAT
int
`json:"isCanVAT"`
//是否可开增票,1:支持,0:不支持
Is7ToReturn
int
`json:"is7ToReturn"`
//是否支持7天退货,1:是,0:不支持
}
`json:"result"`
}
type
CheckOnSaleRes
struct
{
*
CommonRes
Result
[]
struct
{
Sku
int
`json:"sku"`
//商品编号
State
int
`json:"state"`
//1:上架,0:下架
}
`json:"result"`
}
type
GetStockRes
struct
{
*
CommonRes
Result
[]
struct
{
SkuID
int
`json:"skuId"`
//商品编号
AreaID
string
`json:"areaId"`
//入参时传入的区域码area。因京东目前是3、4级地址均支持,存在areaId在传入的3级地址后填充4级地址“_0“后返回的情况。
StockStateID
int
`json:"stockStateId"`
//存状态编号。 参考枚举值: 33,39,40,36,34,99
StockStateDesc
string
`json:"StockStateDesc"`
//库存状态描述。以下为stockStateId不同时,此字段不同的返回值:
}
`json:"result"`
}
type
CheckAreaLimitRes
struct
{
*
CommonRes
Result
[]
struct
{
SkuID
int
`json:"skuId"`
//商品编码
IsAreaRestrict
bool
`json:"isAreaRestrict"`
//true 代表区域受限 false 区域不受限
}
`json:"result"`
}
type
GetUnionBalanceRes
struct
{
*
CommonRes
Result
struct
{
Balance
struct
{
Pin
string
`json:"pin"`
RemainLimit
float64
`json:"remainLimit"`
}
`json:"balance"`
}
}
type
GetProductsPriceRes
struct
{
*
CommonRes
Result
[]
struct
{
SkuID
int
`json:"skuId"`
Price
float64
`json:"price"`
JdPrice
float64
`json:"jdPrice"`
MarketPrice
float64
`json:"marketPrice"`
}
`json:"result"`
}
// CheckSale 商品可售验证接口
func
(
goodsJD
)
CheckSale
(
ctx
context
.
Context
,
req
*
garray
.
Array
)
(
res
*
CheckSaleRes
,
err
error
)
{
method
:=
"product/check"
param
:=
map
[
string
]
string
{
"skuIds"
:
req
.
Join
(
","
),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// CheckOnSale 查询商品上下架状态
func
(
goodsJD
)
CheckOnSale
(
ctx
context
.
Context
,
req
*
garray
.
Array
)
(
res
*
CheckOnSaleRes
,
err
error
)
{
method
:=
"product/skuState"
param
:=
map
[
string
]
string
{
"sku"
:
req
.
Join
(
","
),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
//GetStock 查询商品库存
func
(
goodsJD
)
GetStock
(
ctx
context
.
Context
,
req
*
garray
.
Array
,
area
string
)
(
res
*
GetStockRes
,
err
error
)
{
method
:=
"stock/getNewStockById"
param
:=
map
[
string
]
string
{
"skuNums"
:
req
.
Join
(
","
),
"area"
:
area
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// CheckAreaLimit 查询商品区域购买限制
func
(
goodsJD
)
CheckAreaLimit
(
ctx
context
.
Context
,
skuIds
*
garray
.
Array
,
provinceID
,
cityID
,
countyID
,
townID
interface
{})
(
res
*
CheckAreaLimitRes
,
err
error
)
{
method
:=
"product/checkAreaLimit"
param
:=
map
[
string
]
string
{
"skuIds"
:
skuIds
.
Join
(
","
),
"province"
:
gconv
.
String
(
provinceID
),
"city"
:
gconv
.
String
(
cityID
),
"county"
:
gconv
.
String
(
countyID
),
"town"
:
gconv
.
String
(
townID
),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
//GetProductsPrice 商品价格
func
(
goodsJD
)
GetProductsPrice
(
ctx
context
.
Context
,
skus
*
garray
.
Array
)
(
res
*
GetProductsPriceRes
,
err
error
)
{
method
:=
"price/getSellPrice"
param
:=
map
[
string
]
string
{
"sku"
:
skus
.
Join
(
","
),
"queryExts"
:
"marketPrice"
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
upstream/jingdong/jingdong_msg.go
0 → 100644
浏览文件 @
4d821348
package
jingdong
import
(
"context"
"github.com/gogf/gf/container/garray"
"github.com/gogf/gf/encoding/gjson"
)
type
msgJD
struct
{
}
var
Msg
=
msgJD
{}
type
GetPushMessages
struct
{
*
CommonRes
Result
[]
struct
{
Id
int
`json:"id"`
Type
int
`json:"type"`
Time
string
`json:"time"`
Result
interface
{}
`json:"result"`
}
`json:"result"`
}
type
DelPushMessages
struct
{
*
CommonRes
Result
bool
`json:"result"`
}
func
(
msgJD
)
GetPushMessages
(
ctx
context
.
Context
,
id
*
garray
.
Array
)
(
res
*
GetPushMessages
,
err
error
)
{
method
:=
"message/get"
param
:=
map
[
string
]
string
{
"type"
:
id
.
Join
(
","
),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
func
(
msgJD
)
DeletePushMessage
(
ctx
context
.
Context
,
id
*
garray
.
Array
)
(
res
*
DelPushMessages
,
err
error
)
{
method
:=
"message/del"
param
:=
map
[
string
]
string
{
"id"
:
id
.
Join
(
","
),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
upstream/jingdong/jingdong_order.go
0 → 100644
浏览文件 @
4d821348
package
jingdong
import
(
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
)
type
orderJD
struct
{
}
//Order 订单
var
Order
=
orderJD
{}
//GetDeliveryRes 物流轨迹
type
GetDeliveryRes
struct
{
*
CommonRes
Result
struct
{
OrderTrack
[]
struct
{
Content
string
`json:"content"`
MsgTime
string
`json:"msgTime"`
Operator
string
`json:"operator"`
}
`json:"orderTrack"`
WaybillCode
[]
struct
{
OrderID
string
`json:"orderId"`
ParentID
string
`json:"parentId"`
Carrier
string
`json:"carrier"`
DeliveryOrderID
string
`json:"deliveryOrderId"`
}
`json:"waybillCode"`
JdOrderID
int
`json:"jdOrderId"`
}
`json:"result"`
}
//PriceSnap 商品价格
type
PriceSnap
struct
{
SkuID
int
`json:"skuId"`
Price
int
`json:"price"`
}
//PlaceOrderReq 下单
type
PlaceOrderReq
struct
{
OrderSn
string
SkuNums
[]
*
SkuNums
Consignee
string
Phone
string
Address
*
PlaceOrderAddress
PriceSnap
[]
*
PriceSnap
}
//PlaceOrderAddress 下单地址
type
PlaceOrderAddress
struct
{
Province
string
City
string
County
string
Town
string
Desc
string
}
//PlaceOrderRes 下单
type
PlaceOrderRes
struct
{
*
CommonRes
Result
struct
{
JdOrderID
int64
`json:"jdOrderId"`
OrderPrice
float64
`json:"orderPrice"`
OrderNakedPrice
float64
`json:"orderNakedPrice"`
OrderTaxPrice
float64
`json:"orderTaxPrice"`
Sku
[]
*
OrderSkuItem
`json:"sku"`
}
`json:"result"`
}
//OrderSkuItem 订单商品
type
OrderSkuItem
struct
{
SkuID
int
`json:"skuId"`
Num
int
`json:"num"`
Price
float64
`json:"price"`
Name
string
`json:"name"`
NakedPrice
float64
`json:"nakedPrice"`
}
//ReflectOrderRes 反查订单
type
ReflectOrderRes
struct
{
*
CommonRes
Result
string
`json:"result"`
}
//GetOrderRes 订单详情
type
GetOrderRes
struct
{
*
CommonRes
Result
struct
{
JdOrderID
int64
`json:"jdOrderId"`
Type
int
`json:"type"`
Freight
float64
`json:"freight"`
OrderPrice
float64
`json:"orderPrice"`
OrderNakedPrice
float64
`json:"orderNakedPrice"`
OrderTaxPrice
float64
`json:"orderTaxPrice"`
Sku
[]
*
OrderSkuItem
`json:"sku"`
OrderState
int
`json:"orderState"`
State
int
`json:"state"`
POrder
struct
{
JdOrderID
int64
`json:"jdOrderId"`
Freight
float64
`json:"freight"`
OrderPrice
float64
`json:"orderPrice"`
OrderNakedPrice
float64
`json:"orderNakedPrice"`
Sku
[]
*
OrderSkuItem
`json:"sku"`
}
`json:"pOrder"`
COrder
[]
struct
{
POrder
string
`json:"pOrder"`
JdOrderID
int
`json:"jdOrderId"`
Freight
float64
`json:"freight"`
OrderPrice
float64
`json:"orderPrice"`
OrderNakedPrice
float64
`json:"orderNakedPrice"`
Sku
[]
OrderSkuItem
`json:"sku"`
}
`json:"cOrder"`
}
`json:"result"`
}
//GetFreightRes 运费
type
GetFreightRes
struct
{
*
CommonRes
Result
struct
{
Freight
float64
`json:"freight"`
BaseFreight
float64
`json:"baseFreight"`
RemoteRegionFreight
float64
`json:"remoteRegionFreight"`
}
`json:"result"`
}
//SkuNums 商品数量
type
SkuNums
struct
{
SkuID
int
`json:"skuId"`
Num
int
`json:"num"`
}
// GetDelivery 物流信息
func
(
*
orderJD
)
GetDelivery
(
ctx
context
.
Context
,
OrderID
string
)
(
res
*
GetDeliveryRes
,
err
error
)
{
method
:=
"order/orderTrack"
param
:=
g
.
MapStrStr
{
"jdOrderId"
:
OrderID
,
"waybillCode"
:
"1"
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// PlaceOrder 下单
func
(
orderJD
)
PlaceOrder
(
ctx
context
.
Context
,
req
*
PlaceOrderReq
)
(
res
*
PlaceOrderRes
,
err
error
)
{
method
:=
"order/submitOrder"
var
param
=
g
.
MapStrStr
{
"thirdOrder"
:
req
.
OrderSn
,
"sku"
:
gjson
.
New
(
req
.
SkuNums
)
.
MustToJsonString
(),
"orderPriceSnap"
:
gjson
.
New
(
req
.
PriceSnap
)
.
MustToJsonString
(),
"name"
:
req
.
Consignee
,
"mobile"
:
req
.
Phone
,
"province"
:
req
.
Address
.
Province
,
"city"
:
req
.
Address
.
City
,
"county"
:
req
.
Address
.
County
,
"town"
:
req
.
Address
.
Town
,
"address"
:
req
.
Address
.
Desc
,
"email"
:
server
.
Email
,
"companyName"
:
server
.
CompanyName
,
"submitState"
:
server
.
SubmitState
,
"invoicePhone"
:
server
.
Mobile
,
"invoiceState"
:
"2"
,
"invoiceType"
:
"4"
,
"selectedInvoiceTitle"
:
"5"
,
"invoiceContent"
:
"1"
,
"paymentType"
:
"4"
,
"isUseBalance"
:
"1"
,
"doOrderPriceMode"
:
"1"
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// ReflectOrder 反查订单
func
(
orderJD
)
ReflectOrder
(
ctx
context
.
Context
,
thirdOrder
string
)
(
res
*
ReflectOrderRes
,
err
error
)
{
method
:=
"order/selectJdOrderIdByThirdOrder"
param
:=
g
.
MapStrStr
{
"thirdOrder"
:
thirdOrder
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// GetOrderInfo 订单详情
func
(
orderJD
)
GetOrderInfo
(
ctx
context
.
Context
,
OrderID
string
)
(
res
*
GetOrderRes
,
err
error
)
{
method
:=
"order/selectJdOrder"
param
:=
g
.
MapStrStr
{
"jdOrderId"
:
OrderID
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
_
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// GetFreight 查询运费
func
(
orderJD
)
GetFreight
(
ctx
context
.
Context
,
sku
[]
*
SkuNums
,
province
,
city
,
county
,
town
string
)
(
res
*
GetFreightRes
,
err
error
)
{
method
:=
"order/getFreight"
param
:=
g
.
MapStrStr
{
"sku"
:
gjson
.
New
(
sku
)
.
MustToJsonString
(),
"province"
:
province
,
"city"
:
city
,
"county"
:
county
,
"town"
:
town
,
"paymentType"
:
"4"
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// ConfirmReceived 确认收货
func
(
orderJD
)
ConfirmReceived
(
ctx
context
.
Context
,
OrderID
string
)
(
res
*
CommonRes
,
err
error
)
{
method
:=
"order/confirmReceived"
param
:=
g
.
MapStrStr
{
"jdOrderId"
:
OrderID
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
upstream/jingdong/jingdong_refund.go
0 → 100644
浏览文件 @
4d821348
package
jingdong
import
(
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/util/gconv"
)
type
refundJD
struct
{
}
var
Refund
=
refundJD
{}
type
RefundCancelRes
struct
{
*
CommonRes
Result
bool
`json:"result"`
}
type
ApplyReq
struct
{
JdOrderId
uint
`json:"jdOrderId"`
CustomerExpect
uint
`json:"customerExpect"`
QuestionDesc
string
`json:"questionDesc"`
IsNeedDetectionReport
bool
`json:"isNeedDetectionReport"`
IsHasPackage
bool
`json:"isHasPackage"`
QuestionPic
string
`json:"questionPic"`
PackageDesc
int
`json:"packageDesc"`
UserInfoDto
*
AfterSaleCustomerDto
`json:"asCustomerDto"`
PickDto
*
AfterSalePickwareDto
`json:"asPickwareDto"`
ReturnDto
*
AfterSaleReturnwareDto
`json:"asReturnwareDto"`
DetailDto
*
AfterSaleDetailDto
`json:"asDetailDto"`
}
type
AfterSaleCustomerDto
struct
{
Name
string
`json:"customerContactName"`
//联系人,最多50字符,
Tel
string
`json:"customerTel"`
//联系电话,最多50字符
Phone
string
`json:"customerMobilePhone"`
//手机号,最多50字符
}
type
AfterSalePickwareDto
struct
{
Type
int
`json:"pickwareType"`
//取件方式:4上门取件; 7 客户送货;40客户发货
Province
int
`json:"pickwareProvince"`
//取件省,必填
City
int
`json:"pickwareCity"`
//取件市,必填
County
int
`json:"pickwareCounty"`
//取件县,必填
Village
int
`json:"pickwareVillage"`
//取件乡镇
Address
string
`json:"pickwareAddress"`
//取件街道地址,取件方式为4(上门取件)时必填,最多500字符
}
type
AfterSaleReturnwareDto
struct
{
Type
int
`json:"returnwareType"`
//返件方式:自营配送(10),第三方配送(20);
Province
int
`json:"returnwareProvince"`
//返件省
City
int
`json:"returnwareCity"`
//返件市
County
int
`json:"returnwareCounty"`
//返件县
Village
int
`json:"returnwareVillage"`
//返件乡镇
Address
string
`json:"returnwareAddress"`
//返件街道地址,最多500字符
}
type
AfterSaleDetailDto
struct
{
Id
int
`json:"skuId"`
//商品编号
Num
uint
`json:"skuNum"`
//商品申请数量
}
type
GetServiceListReq
struct
{
JdOrderID
string
`json:"jdOrderId"`
PageIndex
int
`json:"pageIndex"`
PageSize
int
`json:"pageSize"`
}
type
GetServiceListRes
struct
{
*
CommonRes
Result
struct
{
TotalNum
int
`json:"totalNum"`
PageSize
int
`json:"pageSize"`
PageNum
int
`json:"pageNum"`
PageIndex
int
`json:"pageIndex"`
ServiceInfoList
[]
struct
{
AfsServiceId
int
`json:"afsServiceId"`
WareId
int
`json:"wareId"`
Cancel
int
`json:"cancel"`
}
`json:"serviceInfoList"`
}
`json:"result"`
}
type
GetServiceDetailRes
struct
{
*
CommonRes
Result
struct
{
AfsServiceId
int
`json:"afsServiceId"`
CustomerExpect
int
`json:"customerExpect"`
AfsApplyTime
string
`json:"afsApplyTime"`
OrderId
int
`json:"orderId"`
ApproveNotes
string
`json:"approveNotes"`
ApprovedResult
int
`json:"approvedResult"`
AfsServiceStep
int
`json:"afsServiceStep"`
ProcessResult
int
`json:"processResult"`
ServiceAftersalesAddressInfoDTO
struct
{
Address
string
`json:"address"`
Tel
string
`json:"tel"`
LinkMan
string
`json:"linkMan"`
PostCode
string
`json:"postCode"`
}
`json:"serviceAftersalesAddressInfoDto"`
ServiceFinanceDetailInfoDTOs
[]
struct
{
ServiceFinanceDetailInfoDTO
RefundPrice
float64
`json:"refundPrice"`
}
`json:"serviceFinanceDetailInfoDTOs"`
}
`json:"result"`
}
type
ServiceFinanceDetailInfoDTO
struct
{
RefundWay
int
`json:"refundWay"`
RefundWayName
string
`json:"refundWayName"`
Status
int
`json:"status"`
StatusName
string
`json:"statusName"`
WareName
string
`json:"wareName"`
WareId
int
`json:"wareId"`
}
type
RefundCommonReq
struct
{
OrderID
string
`json:"jdOrderId"`
SkuID
string
`json:"skuId"`
}
type
CheckIsSupportRes
struct
{
*
CommonRes
Result
int
`json:"result"`
}
type
GetSupportTypeRes
struct
{
*
CommonRes
Result
[]
*
CodeItem
`json:"result"`
}
type
CodeItem
struct
{
Code
string
`json:"code"`
Name
string
`json:"name"`
}
type
GetReturnTypeRes
struct
{
*
CommonRes
Result
[]
*
CodeItem
`json:"result"`
}
// UpdateSendSku 根据填写单号
func
(
refundJD
)
UpdateSendSku
(
ctx
context
.
Context
,
postData
string
)
(
res
*
CommonRes
,
err
error
)
{
method
:=
"afterSale/updateSendSku"
param
:=
g
.
MapStrStr
{
"param"
:
postData
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
_
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
//AuditCancel 取消服务单
func
(
refundJD
)
AuditCancel
(
ctx
context
.
Context
,
postData
string
)
(
res
*
CommonRes
,
err
error
)
{
method
:=
"afterSale/auditCancel"
param
:=
g
.
MapStrStr
{
"param"
:
postData
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
_
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
//RefundCancel 取消售后
func
(
refundJD
)
RefundCancel
(
ctx
context
.
Context
,
id
interface
{})
(
res
*
RefundCancelRes
,
err
error
)
{
method
:=
"afterSale/auditCancel"
req
:=
g
.
Map
{
"serviceIdList"
:
gconv
.
Ints
(
id
),
"approveNotes"
:
"取消售后"
,
}
param
:=
g
.
MapStrStr
{
"param"
:
gjson
.
New
(
req
)
.
MustToJsonString
(),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
_
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// Apply 申请售后服务(退货、换货、维修)
func
(
refundJD
)
Apply
(
ctx
context
.
Context
,
req
*
ApplyReq
)
(
res
*
CommonRes
,
err
error
)
{
method
:=
"afterSale/createAfsApply"
param
:=
g
.
MapStrStr
{
"param"
:
gjson
.
New
(
req
)
.
MustToJsonString
(),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
_
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// GetServiceList 查询服务单根据客户账号和订单号分页查询服务单概要信息
func
(
refundJD
)
GetServiceList
(
ctx
context
.
Context
,
req
string
)
(
res
*
GetServiceListRes
,
err
error
)
{
method
:=
"afterSale/getServiceListPage"
param
:=
g
.
MapStrStr
{
"param"
:
gjson
.
New
(
&
GetServiceListReq
{
JdOrderID
:
req
,
PageIndex
:
1
,
PageSize
:
100
,
})
.
MustToJsonString
(),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
_
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// GetServiceDetail 根据服务单号查询服务单明细信息
func
(
refundJD
)
GetServiceDetail
(
ctx
context
.
Context
,
req
string
)
(
res
*
GetServiceDetailRes
,
err
error
)
{
method
:=
"afterSale/getServiceDetailInfo"
param
:=
g
.
MapStrStr
{
"param"
:
req
,
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
_
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// CheckIsSupport 查询订单商品是否允许售后
func
(
refundJD
)
CheckIsSupport
(
ctx
context
.
Context
,
req
*
RefundCommonReq
)
(
res
*
CheckIsSupportRes
,
err
error
)
{
method
:=
"afterSale/getAvailableNumberComp"
param
:=
g
.
MapStrStr
{
"param"
:
gjson
.
New
(
req
)
.
MustToJsonString
(),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
_
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// GetSupportType 查询订单商品售后类型
func
(
refundJD
)
GetSupportType
(
ctx
context
.
Context
,
req
*
RefundCommonReq
)
(
res
*
GetSupportTypeRes
,
err
error
)
{
method
:=
"afterSale/getCustomerExpectComp"
param
:=
g
.
MapStrStr
{
"param"
:
gjson
.
New
(
req
)
.
MustToJsonString
(),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
_
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// GetReturnType 查询支持的商品返回京东方式
func
(
refundJD
)
GetReturnType
(
ctx
context
.
Context
,
req
*
RefundCommonReq
)
(
res
*
GetReturnTypeRes
,
err
error
)
{
method
:=
"afterSale/getWareReturnJdComp"
param
:=
g
.
MapStrStr
{
"param"
:
gjson
.
New
(
req
)
.
MustToJsonString
(),
}
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
_
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
upstream/jingdong/jingdong_token.go
0 → 100644
浏览文件 @
4d821348
package
jingdong
import
(
"context"
"errors"
"github.com/gogf/gf/crypto/gmd5"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/gtime"
"github.com/gogf/gf/util/gconv"
"github.com/gogf/gf/util/gutil"
)
type
getAccessTokenRes
struct
{
*
CommonRes
Result
*
accessToken
`json:"result"`
}
type
refreshTokenRes
struct
{
*
CommonRes
Result
*
accessToken
`json:"result"`
}
type
accessToken
struct
{
Uid
string
`json:"uid"`
AccessToken
string
`json:"access_token"`
RefreshToken
string
`json:"refresh_token"`
Time
int64
`json:"time"`
ExpiresIn
int64
`json:"expires_in"`
RefreshTokenExpires
int64
`json:"refresh_token_expires"`
}
//getAccessToken 获取token
func
(
s
*
client
)
getAccessToken
(
ctx
context
.
Context
)
(
err
error
)
{
var
token
*
accessToken
cache
,
_
:=
g
.
Redis
()
.
DoVar
(
"HGETALL"
,
CacheKey
)
if
!
cache
.
IsEmpty
()
{
_
=
cache
.
Scan
(
&
token
)
if
token
.
Time
+
token
.
ExpiresIn
*
1000
>
gtime
.
TimestampMilli
()
{
s
.
AccessToken
=
token
.
AccessToken
return
}
return
s
.
refreshToken
(
ctx
,
token
)
}
timeStamp
:=
gtime
.
Now
()
.
String
()
sign
:=
s
.
getSign
(
timeStamp
)
var
params
=
g
.
MapStrStr
{
"grant_type"
:
"access_token"
,
"client_id"
:
s
.
AppKey
,
"timestamp"
:
timeStamp
,
"username"
:
server
.
UserName
,
"password"
:
gmd5
.
MustEncrypt
(
s
.
PassWord
),
"sign"
:
sign
,
}
result
,
err
:=
s
.
post
(
ctx
,
server
.
GetTokenUrl
,
params
)
if
err
!=
nil
{
return
}
var
jdRes
*
getAccessTokenRes
_
=
gjson
.
New
(
result
)
.
Scan
(
&
jdRes
)
if
jdRes
==
nil
{
err
=
errors
.
New
(
"authorize failed,empty response"
)
return
}
if
!
jdRes
.
Success
{
err
=
errors
.
New
(
jdRes
.
ResultMessage
)
return
}
_
,
_
=
g
.
Redis
()
.
Do
(
"HMSET"
,
append
(
g
.
Slice
{
CacheKey
},
gutil
.
MapToSlice
(
gconv
.
Map
(
jdRes
.
Result
))
...
)
...
)
s
.
AccessToken
=
jdRes
.
Result
.
AccessToken
return
}
//refreshToken 刷新token
func
(
s
*
client
)
refreshToken
(
ctx
context
.
Context
,
req
*
accessToken
)
(
err
error
)
{
if
req
.
RefreshTokenExpires
<
gtime
.
Timestamp
()
{
_
,
err
=
g
.
Redis
()
.
DoVar
(
"DEL"
,
CacheKey
)
return
s
.
getAccessToken
(
ctx
)
}
var
params
=
g
.
MapStrStr
{
"refresh_token"
:
req
.
RefreshToken
,
"client_id"
:
s
.
AppKey
,
"client_secret"
:
s
.
AppSecret
,
}
result
,
err
:=
s
.
post
(
ctx
,
s
.
RefreshTokenUrl
,
params
)
if
err
!=
nil
{
return
}
var
jdRes
*
refreshTokenRes
err
=
gjson
.
New
(
result
)
.
Scan
(
&
jdRes
)
if
err
!=
nil
{
return
}
if
jdRes
==
nil
{
return
}
if
!
jdRes
.
Success
{
err
=
errors
.
New
(
jdRes
.
ResultMessage
)
return
}
_
,
_
=
g
.
Redis
()
.
Do
(
"HMSET"
,
append
(
g
.
Slice
{
CacheKey
},
gutil
.
MapToSlice
(
gconv
.
Map
(
jdRes
.
Result
))
...
)
...
)
s
.
AccessToken
=
jdRes
.
Result
.
AccessToken
return
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论