From 6f26f64dc385762a1d92a2e7fbca0d0f2d10d24a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=85=89=E6=98=A5?= Date: Fri, 17 Jun 2022 11:53:50 +0800 Subject: [PATCH] - init --- .drone.yml | 17 +++ .gitignore | 9 ++ README.md | 25 ++++ const.go | 5 + go.mod | 31 ++++ go.sum | 274 ++++++++++++++++++++++++++++++++++++ params.go | 27 ++++ pgsql.go | 26 ++++ rest.oil.add_card.go | 10 ++ rest.oil.card_info.go | 10 ++ rest.oil.del_card.go | 10 ++ rest.oil.push_order.go | 10 ++ rest.oil.query.go | 10 ++ rest.oiledit_card.go | 10 ++ rest.power.add_card.go | 47 +++++++ rest.power.cancel.go | 38 +++++ rest.power.card_info.go | 11 ++ rest.power.del_card.go | 39 +++++ rest.power.edit_card.go | 11 ++ rest.power.push_order.go | 40 ++++++ rest.power.query.go | 48 +++++++ rest.recharge.cancel.go | 38 +++++ rest.recharge.mobileInfo.go | 58 ++++++++ rest.recharge.push_order.go | 39 +++++ rest.recharge.query.go | 48 +++++++ rest.user.query.go | 39 +++++ sign.go | 76 ++++++++++ version.go | 3 + wikeyun.go | 73 ++++++++++ 29 files changed, 1082 insertions(+) create mode 100644 .drone.yml create mode 100644 .gitignore create mode 100644 README.md create mode 100644 const.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 params.go create mode 100644 pgsql.go create mode 100644 rest.oil.add_card.go create mode 100644 rest.oil.card_info.go create mode 100644 rest.oil.del_card.go create mode 100644 rest.oil.push_order.go create mode 100644 rest.oil.query.go create mode 100644 rest.oiledit_card.go create mode 100644 rest.power.add_card.go create mode 100644 rest.power.cancel.go create mode 100644 rest.power.card_info.go create mode 100644 rest.power.del_card.go create mode 100644 rest.power.edit_card.go create mode 100644 rest.power.push_order.go create mode 100644 rest.power.query.go create mode 100644 rest.recharge.cancel.go create mode 100644 rest.recharge.mobileInfo.go create mode 100644 rest.recharge.push_order.go create mode 100644 rest.recharge.query.go create mode 100644 rest.user.query.go create mode 100644 sign.go create mode 100644 version.go create mode 100644 wikeyun.go diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..c56c479 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,17 @@ +kind: pipeline +type: docker +name: clone + +steps: + - name: Test + image: golang:1.18 + commands: + - go env -w GO111MODULE=on + - go env -w GOPROXY=https://goproxy.cn,direct + - go test -v ./... + - name: Benchmark + image: golang:1.18 + commands: + - go env -w GO111MODULE=on + - go env -w GOPROXY=https://goproxy.cn,direct + - go test -bench=. -benchmem \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a9ea21f --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.env +.git +.svn +.idea +.vscode +*.log +goinit.sh +gomod.sh +*_test.go \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..fa3721b --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +

+Golang wikeyun +

+ +📦 Golang wikeyun + +[comment]: <> (go) +[![godoc](https://pkg.go.dev/badge/go.dtapp.net/wikeyun?status.svg)](https://pkg.go.dev/go.dtapp.net/wikeyun) +[![goproxy.cn](https://goproxy.cn/stats/go.dtapp.net/wikeyun/badges/download-count.svg)](https://goproxy.cn/stats/go.dtapp.net/wikeyun) +[![goreportcard.com](https://goreportcard.com/badge/go.dtapp.net/wikeyun)](https://goreportcard.com/report/go.dtapp.net/wikeyun) +[![deps.dev](https://img.shields.io/badge/deps-go-red.svg)](https://deps.dev/go/go.dtapp.net/wikeyun) + +#### 安装使用 + +```go +go get -v -u go.dtapp.net/wikeyun +``` + +#### 导入 + +```go +import ( + "go.dtapp.net/wikeyun" +) +``` \ No newline at end of file diff --git a/const.go b/const.go new file mode 100644 index 0000000..a9722c8 --- /dev/null +++ b/const.go @@ -0,0 +1,5 @@ +package wikeyun + +const ( + CodeSuccess = "0000" +) diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..0ecf04a --- /dev/null +++ b/go.mod @@ -0,0 +1,31 @@ +module go.dtapp.net/wikeyun + +go 1.18 + +require ( + go.dtapp.net/goip v1.0.18 + go.dtapp.net/gojson v1.0.0 + go.dtapp.net/golog v1.0.14 + go.dtapp.net/gorequest v1.0.20 + go.dtapp.net/gostring v1.0.3 + gorm.io/datatypes v1.0.6 + gorm.io/gorm v1.23.6 +) + +require ( + github.com/go-sql-driver/mysql v1.6.0 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/natefinch/lumberjack v2.0.0+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/saracen/go7z v0.0.0-20191010121135-9c09b6bd7fda // indirect + github.com/saracen/solidblock v0.0.0-20190426153529-45df20abab6f // indirect + github.com/ulikunitz/xz v0.5.10 // indirect + go.dtapp.net/gotime v1.0.2 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.8.0 // indirect + go.uber.org/zap v1.21.0 // indirect + golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d // indirect + golang.org/x/text v0.3.7 // indirect + gorm.io/driver/mysql v1.3.4 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..bee227a --- /dev/null +++ b/go.sum @@ -0,0 +1,274 @@ +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +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/denisenkom/go-mssqldb v0.12.0 h1:VtrkII767ttSPNRfFekePK3sctr+joXgO58stqQbtUA= +github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +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/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= +github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188 h1:+eHOFJl1BaXrQxKX+T06f78590z4qA2ZzBTqahsKSE4= +github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= +github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= +github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= +github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= +github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= +github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= +github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= +github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= +github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= +github.com/jackc/pgconn v1.10.1/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= +github.com/jackc/pgconn v1.11.0/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= +github.com/jackc/pgconn v1.12.1 h1:rsDFzIpRk7xT4B8FufgpCCeyjdNpKyghZeSefViE5W8= +github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= +github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= +github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= +github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= +github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.2.0/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.3.0 h1:brH0pCGBDkBW07HWlN/oSBXrmo3WB0UvZd1pIuDcL8Y= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= +github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= +github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= +github.com/jackc/pgtype v1.9.1/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= +github.com/jackc/pgtype v1.10.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= +github.com/jackc/pgtype v1.11.0 h1:u4uiGPz/1hryuXzyaBhSk6dnIyyG2683olG2OV+UUgs= +github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= +github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= +github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= +github.com/jackc/pgx/v4 v4.14.1/go.mod h1:RgDuE4Z34o7XE92RpLsvFiOEfrAUT0Xt2KxvX73W06M= +github.com/jackc/pgx/v4 v4.15.0/go.mod h1:D/zyOyXiaM1TmVWnOM18p0xdDtdakRBa0RsVGI3U3bw= +github.com/jackc/pgx/v4 v4.16.1 h1:JzTglcal01DrghUqt+PmzWsZx/Yh7SC/CTQmSBMTd0Y= +github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.2.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.2.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.12 h1:TJ1bhYJPV44phC+IMu1u2K/i5RriLTPe+yc68XDJ1Z0= +github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= +github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= +github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +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/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= +github.com/saracen/go7z v0.0.0-20191010121135-9c09b6bd7fda h1:h+YpzUB/bGVJcLqW+d5GghcCmE/A25KbzjXvWJQi/+o= +github.com/saracen/go7z v0.0.0-20191010121135-9c09b6bd7fda/go.mod h1:MSotTrCv1PwoR8QgU1JurEx+lNNbtr25I+m0zbLyAGw= +github.com/saracen/go7z-fixtures v0.0.0-20190623165746-aa6b8fba1d2f h1:PF9WV5j/x6MT+x/sauUHd4objCvJbZb0wdxZkHSdd5A= +github.com/saracen/solidblock v0.0.0-20190426153529-45df20abab6f h1:1cJITU3JUI8qNS5T0BlXwANsVdyoJQHQ4hvOxbunPCw= +github.com/saracen/solidblock v0.0.0-20190426153529-45df20abab6f/go.mod h1:LyBTue+RWeyIfN3ZJ4wVxvDuvlGJtDgCLgCb6HCPgps= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +go.dtapp.net/goip v1.0.18 h1:wm+6Agx9LeChtUS44gLsYWVOYTReKxni53m6jgzTstI= +go.dtapp.net/goip v1.0.18/go.mod h1:Y2KCQK4NW0cDJyynSCG/Yj4yHugH+Ayu0KNjdl43wYc= +go.dtapp.net/gojson v1.0.0 h1:jmRjeWChRyv2tKEByHvnW3kXh1jUcL8B7VurV0Zbygc= +go.dtapp.net/gojson v1.0.0/go.mod h1:TkkpTNxHBKxul0e7gC5MrL1K4ICFB9mQ7wHzjBah3/k= +go.dtapp.net/golog v1.0.14 h1:LlJyb/wfCZUoDevzBvymuCp8ympuGJxybjeRb8f3EGU= +go.dtapp.net/golog v1.0.14/go.mod h1:gTt8U/iiZuZ0BhV7Ic84U0Phep6OOYCnVGL7DE1dOo4= +go.dtapp.net/gorequest v1.0.20 h1:rddlXqcabDQNUb+iBvJthpNyD0Bv1yLbYftK+CSwSMA= +go.dtapp.net/gorequest v1.0.20/go.mod h1:EwOfdfxsWPszOWrphCWHTN4DbYtU6fyQ/fuWQyQwSnk= +go.dtapp.net/gostring v1.0.3 h1:KSOq4D77/g5yZN/bqWfZ0kOOaPr/P1240vg03+XdENI= +go.dtapp.net/gostring v1.0.3/go.mod h1:+ggrOvgQDQturi1QGsXEpyRN/ZPoRDaqhMujIk5lrgQ= +go.dtapp.net/gotime v1.0.2 h1:CFIJHQXC/4t9bsJhk2cLhjHd6rpdPcJXr8BcHKHDuQo= +go.dtapp.net/gotime v1.0.2/go.mod h1:Gq7eNLr2iMLP18UNWONRq4V3Uhf/ADp4bIrS+Tc6ktY= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.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.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +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-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= +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-20190813141303-74dc4d7220e7/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/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +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-20180905080454-ebe1bf3edb33/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/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-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-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d h1:Zu/JngovGLVi6t2J3nmAf3AoTDwuzw85YZ3b9o4yU7s= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +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.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +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-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.11 h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY= +golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +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-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +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.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 h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/datatypes v1.0.6 h1:3cqbakp1DIgC+P7wyODb5k+lSjW8g3mjkg/BIsmhjlE= +gorm.io/datatypes v1.0.6/go.mod h1:Gh/Xd/iUWWybMEk8CzYCK/swqlni2r+ROeM1HGIM0ck= +gorm.io/driver/mysql v1.3.2/go.mod h1:ChK6AHbHgDCFZyJp0F+BmVGb06PSIoh9uVYKAlRbb2U= +gorm.io/driver/mysql v1.3.4 h1:/KoBMgsUHC3bExsekDcmNYaBnfH2WNeFuXqqrqMc98Q= +gorm.io/driver/mysql v1.3.4/go.mod h1:s4Tq0KmD0yhPGHbZEwg1VPlH0vT/GBHJZorPzhcxBUE= +gorm.io/driver/postgres v1.3.1/go.mod h1:WwvWOuR9unCLpGWCL6Y3JOeBWvbKi6JLhayiVclSZZU= +gorm.io/driver/postgres v1.3.7 h1:FKF6sIMDHDEvvMF/XJvbnCl0nu6KSKUaPXevJ4r+VYQ= +gorm.io/driver/sqlite v1.3.1 h1:bwfE+zTEWklBYoEodIOIBwuWHpnx52Z9zJFW5F33WLk= +gorm.io/driver/sqlite v1.3.1/go.mod h1:wJx0hJspfycZ6myN38x1O/AqLtNS6c5o9TndewFbELg= +gorm.io/driver/sqlserver v1.3.1 h1:F5t6ScMzOgy1zukRTIZgLZwKahgt3q1woAILVolKpOI= +gorm.io/driver/sqlserver v1.3.1/go.mod h1:w25Vrx2BG+CJNUu/xKbFhaKlGxT/nzRkhWCCoptX8tQ= +gorm.io/gorm v1.23.1/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.23.2/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.23.4/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.23.6 h1:KFLdNgri4ExFFGTRGGFWON2P1ZN28+9SJRN8voOoYe0= +gorm.io/gorm v1.23.6/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/params.go b/params.go new file mode 100644 index 0000000..4d772cc --- /dev/null +++ b/params.go @@ -0,0 +1,27 @@ +package wikeyun + +// Params 请求参数 +type Params map[string]interface{} + +func NewParams() Params { + p := make(Params) + return p +} + +func (app *App) NewParamsWith(params ...Params) Params { + p := make(Params) + for _, v := range params { + p.SetParams(v) + } + return p +} + +func (p Params) Set(key string, value interface{}) { + p[key] = value +} + +func (p Params) SetParams(params Params) { + for key, value := range params { + p[key] = value + } +} diff --git a/pgsql.go b/pgsql.go new file mode 100644 index 0000000..d72c531 --- /dev/null +++ b/pgsql.go @@ -0,0 +1,26 @@ +package wikeyun + +import ( + "go.dtapp.net/gojson" + "go.dtapp.net/golog" + "go.dtapp.net/gorequest" + "gorm.io/datatypes" +) + +// 记录日志 +func (app *App) postgresqlLog(request gorequest.Response) { + app.log.Record(golog.ApiPostgresqlLog{ + RequestTime: golog.TimeString{Time: request.RequestTime}, //【请求】时间 + RequestUri: request.RequestUri, //【请求】链接 + RequestUrl: gorequest.UriParse(request.RequestUri).Url, //【请求】链接 + RequestApi: gorequest.UriParse(request.RequestUri).Path, //【请求】接口 + RequestMethod: request.RequestMethod, //【请求】方式 + RequestParams: datatypes.JSON(gojson.JsonEncodeNoError(request.RequestParams)), //【请求】参数 + RequestHeader: datatypes.JSON(gojson.JsonEncodeNoError(request.RequestHeader)), //【返回】头部 + ResponseHeader: datatypes.JSON(gojson.JsonEncodeNoError(request.ResponseHeader)), //【返回】头部 + ResponseStatusCode: request.ResponseStatusCode, //【返回】状态码 + ResponseBody: request.ResponseBody, //【返回】内容 + ResponseContentLength: request.ResponseContentLength, //【返回】大小 + ResponseTime: golog.TimeString{Time: request.ResponseTime}, //【返回】时间 + }) +} diff --git a/rest.oil.add_card.go b/rest.oil.add_card.go new file mode 100644 index 0000000..aeabc0a --- /dev/null +++ b/rest.oil.add_card.go @@ -0,0 +1,10 @@ +package wikeyun + +// RestOilCardAdd 添加充值卡 +func (app *App) RestOilCardAdd(notMustParams ...Params) (body []byte, err error) { + // 参数 + params := app.NewParamsWith(notMustParams...) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Oil/addCard", params) + return request.ResponseBody, err +} diff --git a/rest.oil.card_info.go b/rest.oil.card_info.go new file mode 100644 index 0000000..418906c --- /dev/null +++ b/rest.oil.card_info.go @@ -0,0 +1,10 @@ +package wikeyun + +// RestOilCardInfo 油卡详情 +func (app *App) RestOilCardInfo(notMustParams ...Params) (body []byte, err error) { + // 参数 + params := app.NewParamsWith(notMustParams...) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Oil/cardInfo", params) + return request.ResponseBody, err +} diff --git a/rest.oil.del_card.go b/rest.oil.del_card.go new file mode 100644 index 0000000..5c985a8 --- /dev/null +++ b/rest.oil.del_card.go @@ -0,0 +1,10 @@ +package wikeyun + +// RestOilCardDel 油卡删除 +func (app *App) RestOilCardDel(notMustParams ...Params) (body []byte, err error) { + // 参数 + params := app.NewParamsWith(notMustParams...) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Oil/delCard", params) + return request.ResponseBody, err +} diff --git a/rest.oil.push_order.go b/rest.oil.push_order.go new file mode 100644 index 0000000..c0a2dfb --- /dev/null +++ b/rest.oil.push_order.go @@ -0,0 +1,10 @@ +package wikeyun + +// RestOilOrderPush 充值下单 +func (app *App) RestOilOrderPush(notMustParams ...Params) (body []byte, err error) { + // 参数 + params := app.NewParamsWith(notMustParams...) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Oil/pushOrder", params) + return request.ResponseBody, err +} diff --git a/rest.oil.query.go b/rest.oil.query.go new file mode 100644 index 0000000..c62c16b --- /dev/null +++ b/rest.oil.query.go @@ -0,0 +1,10 @@ +package wikeyun + +// RestOilOrderQuery 订单查询 +func (app *App) RestOilOrderQuery(notMustParams ...Params) (body []byte, err error) { + // 参数 + params := app.NewParamsWith(notMustParams...) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Oil/query", params) + return request.ResponseBody, err +} diff --git a/rest.oiledit_card.go b/rest.oiledit_card.go new file mode 100644 index 0000000..93d4da2 --- /dev/null +++ b/rest.oiledit_card.go @@ -0,0 +1,10 @@ +package wikeyun + +// RestOilCardEdit 编辑充值卡 +func (app *App) RestOilCardEdit(notMustParams ...Params) (body []byte, err error) { + // 参数 + params := app.NewParamsWith(notMustParams...) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Oil/editCard", params) + return request.ResponseBody, err +} diff --git a/rest.power.add_card.go b/rest.power.add_card.go new file mode 100644 index 0000000..78b1419 --- /dev/null +++ b/rest.power.add_card.go @@ -0,0 +1,47 @@ +package wikeyun + +import ( + "encoding/json" + "go.dtapp.net/gorequest" +) + +type RestPowerAddCardResponse struct { + Code string `json:"code"` + Msg string `json:"msg"` + Time string `json:"time"` + Data struct { + CardNum string `json:"card_num"` + StoreId string `json:"store_id"` + CreateTime int `json:"create_time"` + Type int `json:"type"` // 缴费单位 + CmsUid int `json:"cms_uid"` + Province string `json:"province"` // 缴费省份 + City string `json:"city"` // 缴费城市 + Id string `json:"id"` // 缴费卡编号 + } `json:"data"` +} + +type RestPowerAddCardResult struct { + Result RestPowerAddCardResponse // 结果 + Body []byte // 内容 + Http gorequest.Response // 请求 + Err error // 错误 +} + +func NewRestPowerAddCardResult(result RestPowerAddCardResponse, body []byte, http gorequest.Response, err error) *RestPowerAddCardResult { + return &RestPowerAddCardResult{Result: result, Body: body, Http: http, Err: err} +} + +// RestPowerAddCard 添加电费充值卡 +// https://open.wikeyun.cn/#/apiDocument/9/document/326 +func (app *App) RestPowerAddCard(notMustParams ...Params) *RestPowerAddCardResult { + // 参数 + params := app.NewParamsWith(notMustParams...) + params.Set("store_id", app.storeId) // 店铺ID + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Power/addCard", params) + // 定义 + var response RestPowerAddCardResponse + err = json.Unmarshal(request.ResponseBody, &response) + return NewRestPowerAddCardResult(response, request.ResponseBody, request, err) +} diff --git a/rest.power.cancel.go b/rest.power.cancel.go new file mode 100644 index 0000000..fd13214 --- /dev/null +++ b/rest.power.cancel.go @@ -0,0 +1,38 @@ +package wikeyun + +import ( + "encoding/json" + "go.dtapp.net/gorequest" +) + +type RestPowerCancelResponse struct { + Code string `json:"code"` + Msg string `json:"msg"` + Data string `json:"data"` +} + +type RestPowerCancelResult struct { + Result RestPowerCancelResponse // 结果 + Body []byte // 内容 + Http gorequest.Response // 请求 + Err error // 错误 +} + +func NewRestPowerCancelResult(result RestPowerCancelResponse, body []byte, http gorequest.Response, err error) *RestPowerCancelResult { + return &RestPowerCancelResult{Result: result, Body: body, Http: http, Err: err} +} + +// RestPowerCancel 电费订单取消 +// https://open.wikeyun.cn/#/apiDocument/9/document/323 +func (app *App) RestPowerCancel(orderNumber string) *RestPowerCancelResult { + // 参数 + param := NewParams() + param.Set("order_number", orderNumber) // 取消的单号,多个用英文逗号隔开 + params := app.NewParamsWith(param) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Power/cancel", params) + // 定义 + var response RestPowerCancelResponse + err = json.Unmarshal(request.ResponseBody, &response) + return NewRestPowerCancelResult(response, request.ResponseBody, request, err) +} diff --git a/rest.power.card_info.go b/rest.power.card_info.go new file mode 100644 index 0000000..b94c558 --- /dev/null +++ b/rest.power.card_info.go @@ -0,0 +1,11 @@ +package wikeyun + +// PowerCardInfo 电费充值卡详情 +// https://open.wikeyun.cn/#/apiDocument/9/document/333 +func (app *App) PowerCardInfo(notMustParams ...Params) (body []byte, err error) { + // 参数 + params := app.NewParamsWith(notMustParams...) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Power/cardInfo", params) + return request.ResponseBody, err +} diff --git a/rest.power.del_card.go b/rest.power.del_card.go new file mode 100644 index 0000000..d021c0c --- /dev/null +++ b/rest.power.del_card.go @@ -0,0 +1,39 @@ +package wikeyun + +import ( + "encoding/json" + "go.dtapp.net/gorequest" +) + +type RestPowerDelCardResponse struct { + Data string `json:"data"` + Code string `json:"code"` + Msg string `json:"msg"` + Time string `json:"time"` +} + +type RestPowerDelCardResult struct { + Result RestPowerDelCardResponse // 结果 + Body []byte // 内容 + Http gorequest.Response // 请求 + Err error // 错误 +} + +func NewRestPowerDelCardResult(result RestPowerDelCardResponse, body []byte, http gorequest.Response, err error) *RestPowerDelCardResult { + return &RestPowerDelCardResult{Result: result, Body: body, Http: http, Err: err} +} + +// RestPowerDelCard 删除电费充值卡 +// https://open.wikeyun.cn/#/apiDocument/9/document/330 +func (app *App) RestPowerDelCard(cardId string) *RestPowerDelCardResult { + // 参数 + param := NewParams() + param.Set("card_id", cardId) + params := app.NewParamsWith(param) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Power/delCard", params) + // 定义 + var response RestPowerDelCardResponse + err = json.Unmarshal(request.ResponseBody, &response) + return NewRestPowerDelCardResult(response, request.ResponseBody, request, err) +} diff --git a/rest.power.edit_card.go b/rest.power.edit_card.go new file mode 100644 index 0000000..80f4a01 --- /dev/null +++ b/rest.power.edit_card.go @@ -0,0 +1,11 @@ +package wikeyun + +// RestPowerEditCard 编辑电费充值卡 +// https://open.wikeyun.cn/#/apiDocument/9/document/329 +func (app *App) RestPowerEditCard(notMustParams ...Params) (body []byte, err error) { + // 参数 + params := app.NewParamsWith(notMustParams...) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Power/editCard", params) + return request.ResponseBody, err +} diff --git a/rest.power.push_order.go b/rest.power.push_order.go new file mode 100644 index 0000000..0349769 --- /dev/null +++ b/rest.power.push_order.go @@ -0,0 +1,40 @@ +package wikeyun + +import ( + "encoding/json" + "go.dtapp.net/gorequest" +) + +type RestPowerPushOrderResponse struct { + Code string `json:"code"` + Msg string `json:"msg"` + Time string `json:"time"` + Data struct { + OrderNumber string `json:"order_number"` + } `json:"data"` +} + +type RestPowerPushOrderResult struct { + Result RestPowerPushOrderResponse // 结果 + Body []byte // 内容 + Http gorequest.Response // 请求 + Err error // 错误 +} + +func NewRestPowerPushOrderResult(result RestPowerPushOrderResponse, body []byte, http gorequest.Response, err error) *RestPowerPushOrderResult { + return &RestPowerPushOrderResult{Result: result, Body: body, Http: http, Err: err} +} + +// RestPowerPushOrder 电费充值API +// https://open.wikeyun.cn/#/apiDocument/9/document/311 +func (app *App) RestPowerPushOrder(notMustParams ...Params) *RestPowerPushOrderResult { + // 参数 + params := app.NewParamsWith(notMustParams...) + params.Set("store_id", app.storeId) // 店铺ID + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Power/pushOrder", params) + // 定义 + var response RestPowerPushOrderResponse + err = json.Unmarshal(request.ResponseBody, &response) + return NewRestPowerPushOrderResult(response, request.ResponseBody, request, err) +} diff --git a/rest.power.query.go b/rest.power.query.go new file mode 100644 index 0000000..77a3e2e --- /dev/null +++ b/rest.power.query.go @@ -0,0 +1,48 @@ +package wikeyun + +import ( + "encoding/json" + "go.dtapp.net/gorequest" +) + +type RestPowerQueryResponse struct { + Code string `json:"code"` + Msg string `json:"msg"` + Time string `json:"time"` + Data struct { + OrderNumber string `json:"order_number"` + OrderNo string `json:"order_no"` + CardId string `json:"card_id"` + Amount int `json:"amount"` + CostPrice string `json:"cost_price"` + Fanli string `json:"fanli"` + Status int `json:"status"` + ArrivedAmount int64 `json:"arrived_amount"` + } `json:"data"` +} + +type RestPowerQueryResult struct { + Result RestPowerQueryResponse // 结果 + Body []byte // 内容 + Http gorequest.Response // 请求 + Err error // 错误 +} + +func NewRestPowerQueryResult(result RestPowerQueryResponse, body []byte, http gorequest.Response, err error) *RestPowerQueryResult { + return &RestPowerQueryResult{Result: result, Body: body, Http: http, Err: err} +} + +// RestPowerQuery 电费订单查询 +// https://open.wikeyun.cn/#/apiDocument/9/document/313 +func (app *App) RestPowerQuery(orderNumber string) *RestPowerQueryResult { + // 参数 + param := NewParams() + param.Set("order_number", orderNumber) // 平台单号 + params := app.NewParamsWith(param) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Power/query", params) + // 定义 + var response RestPowerQueryResponse + err = json.Unmarshal(request.ResponseBody, &response) + return NewRestPowerQueryResult(response, request.ResponseBody, request, err) +} diff --git a/rest.recharge.cancel.go b/rest.recharge.cancel.go new file mode 100644 index 0000000..2ed05f3 --- /dev/null +++ b/rest.recharge.cancel.go @@ -0,0 +1,38 @@ +package wikeyun + +import ( + "encoding/json" + "go.dtapp.net/gorequest" +) + +type RestRechargeCancelResponse struct { + Code string `json:"code"` + Msg string `json:"msg"` + Data string `json:"data"` +} + +type RestRechargeCancelResult struct { + Result RestRechargeCancelResponse // 结果 + Body []byte // 内容 + Http gorequest.Response // 请求 + Err error // 错误 +} + +func NewRestRechargeCancelResult(result RestRechargeCancelResponse, body []byte, http gorequest.Response, err error) *RestRechargeCancelResult { + return &RestRechargeCancelResult{Result: result, Body: body, Http: http, Err: err} +} + +// RestRechargeCancel 话费订单取消 +// https://open.wikeyun.cn/#/apiDocument/9/document/300 +func (app *App) RestRechargeCancel(orderNumber string) *RestRechargeCancelResult { + // 参数 + param := NewParams() + param.Set("order_number", orderNumber) // 取消的单号,多个用英文逗号隔开 + params := app.NewParamsWith(param) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Recharge/cancel", params) + // 定义 + var response RestRechargeCancelResponse + err = json.Unmarshal(request.ResponseBody, &response) + return NewRestRechargeCancelResult(response, request.ResponseBody, request, err) +} diff --git a/rest.recharge.mobileInfo.go b/rest.recharge.mobileInfo.go new file mode 100644 index 0000000..b5f17f7 --- /dev/null +++ b/rest.recharge.mobileInfo.go @@ -0,0 +1,58 @@ +package wikeyun + +import ( + "encoding/json" + "go.dtapp.net/gorequest" +) + +type RestRechargeMobileInfoResponse struct { + Code string `json:"code"` + Msg string `json:"msg"` + Time string `json:"time"` + Data struct { + Status string `json:"status"` + Oisp string `json:"oisp"` + Nisp string `json:"nisp"` + Number string `json:"number"` + Extend struct { + AreaNum string `json:"area_num"` + Isp string `json:"isp"` + Prov string `json:"prov"` + City string `json:"city"` + PostCode string `json:"post_code"` + AreaCode string `json:"area_code"` + CardProvCode string `json:"card_prov_code"` + CardCityCode string `json:"card_city_code"` + Lng string `json:"lng"` + Lat string `json:"lat"` + CityCode string `json:"city_code"` + CityShortCode string `json:"city_short_code"` + } `json:"extend"` + } `json:"data"` +} + +type RestRechargeMobileInfoResult struct { + Result RestRechargeMobileInfoResponse // 结果 + Body []byte // 内容 + Http gorequest.Response // 请求 + Err error // 错误 +} + +func NewRestRechargeMobileInfoResult(result RestRechargeMobileInfoResponse, body []byte, http gorequest.Response, err error) *RestRechargeMobileInfoResult { + return &RestRechargeMobileInfoResult{Result: result, Body: body, Http: http, Err: err} +} + +// RestRechargeMobileInfo 查询手机归属地信息以及是否携号转网 +// https://open.wikeyun.cn/#/apiDocument/9/document/374 +func (app *App) RestRechargeMobileInfo(orderNumber string) *RestRechargeMobileInfoResult { + // 参数 + param := NewParams() + param.Set("order_number", orderNumber) // 平台单号 + params := app.NewParamsWith(param) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Recharge/mobileInfo", params) + // 定义 + var response RestRechargeMobileInfoResponse + err = json.Unmarshal(request.ResponseBody, &response) + return NewRestRechargeMobileInfoResult(response, request.ResponseBody, request, err) +} diff --git a/rest.recharge.push_order.go b/rest.recharge.push_order.go new file mode 100644 index 0000000..a841868 --- /dev/null +++ b/rest.recharge.push_order.go @@ -0,0 +1,39 @@ +package wikeyun + +import ( + "encoding/json" + "go.dtapp.net/gorequest" +) + +type RestRechargePushOrderResponse struct { + Code string `json:"code"` + Msg string `json:"msg"` + Data struct { + OrderNumber string `json:"order_number"` + } `json:"data"` +} + +type RestRechargePushOrderResult struct { + Result RestRechargePushOrderResponse // 结果 + Body []byte // 内容 + Http gorequest.Response // 请求 + Err error // 错误 +} + +func NewRestRechargePushOrderResult(result RestRechargePushOrderResponse, body []byte, http gorequest.Response, err error) *RestRechargePushOrderResult { + return &RestRechargePushOrderResult{Result: result, Body: body, Http: http, Err: err} +} + +// RestRechargePushOrder 话费充值推送 +// https://open.wikeyun.cn/#/apiDocument/9/document/298 +func (app *App) RestRechargePushOrder(notMustParams ...Params) *RestRechargePushOrderResult { + // 参数 + params := app.NewParamsWith(notMustParams...) + params.Set("store_id", app.storeId) // 店铺ID + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Recharge/pushOrder", params) + // 定义 + var response RestRechargePushOrderResponse + err = json.Unmarshal(request.ResponseBody, &response) + return NewRestRechargePushOrderResult(response, request.ResponseBody, request, err) +} diff --git a/rest.recharge.query.go b/rest.recharge.query.go new file mode 100644 index 0000000..e609798 --- /dev/null +++ b/rest.recharge.query.go @@ -0,0 +1,48 @@ +package wikeyun + +import ( + "encoding/json" + "go.dtapp.net/gorequest" +) + +type RestRechargeQueryResponse struct { + Code string `json:"code"` + Msg string `json:"msg"` + Time string `json:"time"` + Data struct { + OrderNumber string `json:"order_number"` + OrderNo string `json:"order_no"` + Mobile string `json:"mobile"` + Amount int `json:"amount"` + CostPrice string `json:"cost_price"` + Fanli string `json:"fanli"` + Status int `json:"status"` + OrgOrderNumber string `json:"org_order_number"` + } `json:"data"` +} + +type RestRechargeQueryResult struct { + Result RestRechargeQueryResponse // 结果 + Body []byte // 内容 + Http gorequest.Response // 请求 + Err error // 错误 +} + +func NewRestRechargeQueryResult(result RestRechargeQueryResponse, body []byte, http gorequest.Response, err error) *RestRechargeQueryResult { + return &RestRechargeQueryResult{Result: result, Body: body, Http: http, Err: err} +} + +// RestRechargeQuery 话费订单查询 +// https://open.wikeyun.cn/#/apiDocument/9/document/299 +func (app *App) RestRechargeQuery(orderNumber string) *RestRechargeQueryResult { + // 参数 + param := NewParams() + param.Set("order_number", orderNumber) // 平台订单号 + params := app.NewParamsWith(param) + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/Recharge/query", params) + // 定义 + var response RestRechargeQueryResponse + err = json.Unmarshal(request.ResponseBody, &response) + return NewRestRechargeQueryResult(response, request.ResponseBody, request, err) +} diff --git a/rest.user.query.go b/rest.user.query.go new file mode 100644 index 0000000..45a2fa6 --- /dev/null +++ b/rest.user.query.go @@ -0,0 +1,39 @@ +package wikeyun + +import ( + "encoding/json" + "go.dtapp.net/gorequest" +) + +type RestUserQueryResponse struct { + Code string `json:"code"` + Msg string `json:"msg"` + Data struct { + Id string `json:"id"` + Avatar string `json:"avatar"` + Money string `json:"money"` + Mobile string `json:"mobile"` + } `json:"data"` +} + +type RestUserQueryResult struct { + Result RestUserQueryResponse // 结果 + Body []byte // 内容 + Http gorequest.Response // 请求 + Err error // 错误 +} + +func NewRestUserQueryResult(result RestUserQueryResponse, body []byte, http gorequest.Response, err error) *RestUserQueryResult { + return &RestUserQueryResult{Result: result, Body: body, Http: http, Err: err} +} + +// RestUserQuery 用户信息 +// https://open.wikeyun.cn/#/apiDocument/10/document/336 +func (app *App) RestUserQuery() *RestUserQueryResult { + // 请求 + request, err := app.request("https://router.wikeyun.cn/rest/User/query", map[string]interface{}{}) + // 定义 + var response RestUserQueryResponse + err = json.Unmarshal(request.ResponseBody, &response) + return NewRestUserQueryResult(response, request.ResponseBody, request, err) +} diff --git a/sign.go b/sign.go new file mode 100644 index 0000000..4d4a65f --- /dev/null +++ b/sign.go @@ -0,0 +1,76 @@ +package wikeyun + +import ( + "crypto/md5" + "encoding/hex" + "encoding/json" + "sort" + "strconv" + "strings" + "time" +) + +type respSign struct { + AppKey int + Timestamp string + Client string + V string + Format string + Sign string +} + +// 签名 +func (app *App) sign(params map[string]interface{}) respSign { + // 默认参数 + v := "1.0" + format := "json" + timestamp := strconv.FormatInt(time.Now().Unix(), 10) + params["v"] = v // 客户端接口版本,目前是1.0 + params["format"] = format // 默认json + params["app_key"] = app.appKey // 应用唯一表示 + params["client"] = app.clientIp // 客户端请求ip + params["timestamp"] = timestamp // unix时间戳(秒单位) + // 排序所有的 key + var keys []string + for key := range params { + keys = append(keys, key) + } + sort.Strings(keys) + signStr := app.appSecret + for _, key := range keys { + signStr += key + getString(params[key]) + } + signStr += app.appSecret + return respSign{ + AppKey: app.appKey, + Timestamp: timestamp, + Client: app.clientIp, + V: v, + Format: format, + Sign: app.createSign(signStr), + } +} + +// 签名 +func (app *App) createSign(signStr string) string { + h := md5.New() + h.Write([]byte(signStr)) + cipherStr := h.Sum(nil) + return strings.ToUpper(hex.EncodeToString(cipherStr)) +} + +func getString(i interface{}) string { + switch v := i.(type) { + case string: + return v + case []byte: + return string(v) + case int: + return strconv.Itoa(v) + case bool: + return strconv.FormatBool(v) + default: + bytes, _ := json.Marshal(v) + return string(bytes) + } +} diff --git a/version.go b/version.go new file mode 100644 index 0000000..c695edc --- /dev/null +++ b/version.go @@ -0,0 +1,3 @@ +package wikeyun + +const Version = "1.0.0" diff --git a/wikeyun.go b/wikeyun.go new file mode 100644 index 0000000..05544d3 --- /dev/null +++ b/wikeyun.go @@ -0,0 +1,73 @@ +package wikeyun + +import ( + "fmt" + "go.dtapp.net/goip" + "go.dtapp.net/golog" + "go.dtapp.net/gorequest" + "gorm.io/gorm" +) + +type App struct { + storeId int // 店铺ID + appKey int // key + appSecret string // secret + clientIp string // Ip + pgsql *gorm.DB // pgsql数据库 + client *gorequest.App // 请求客户端 + log *golog.Api // 日志服务 + logTableName string // 日志表名 + logStatus bool // 日志状态 +} + +// NewApp 创建实例 +func NewApp(storeId, appKey int, appSecret string, pgsql *gorm.DB) *App { + app := &App{storeId: storeId, appKey: appKey, appSecret: appSecret} + app.client = gorequest.NewHttp() + if pgsql != nil { + app.pgsql = pgsql + app.logStatus = true + app.logTableName = "wikeyun" + app.log = golog.NewApi(&golog.ApiConfig{ + Db: pgsql, + TableName: app.logTableName, + }) + } + xip := goip.GetOutsideIp() + if xip != "" && xip != "0.0.0.0" { + app.clientIp = xip + } + return app +} + +// 请求接口 +func (app *App) request(url string, params map[string]interface{}) (resp gorequest.Response, err error) { + + // 签名 + sign := app.sign(params) + + // 创建请求 + client := app.client + + // 设置请求地址 + client.SetUri(fmt.Sprintf("%s?app_key=%d×tamp=%s&client=%s&format=%s&v=%s&sign=%s", url, app.appKey, sign.Timestamp, sign.Client, sign.Format, sign.V, sign.Sign)) + + // 设置FORM格式 + client.SetContentTypeForm() + + // 设置参数 + client.SetParams(params) + + // 发起请求 + request, err := client.Post() + if err != nil { + return gorequest.Response{}, err + } + + // 日志 + if app.logStatus == true { + go app.postgresqlLog(request) + } + + return request, err +}