Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录
切换导航
L
library
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
stbz
library
Commits
39fd6e02
提交
39fd6e02
authored
1年前
作者:
limeng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
有赞
上级
5b2717f4
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
457 行增加
和
0 行删除
+457
-0
base.go
supplier/yz/base.go
+180
-0
goods.go
supplier/yz/goods.go
+169
-0
token.go
supplier/yz/token.go
+108
-0
没有找到文件。
supplier/yz/base.go
0 → 100644
浏览文件 @
39fd6e02
package
yz
import
(
"context"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/gtime"
"github.com/gogf/gf/util/gconv"
"time"
"fmt"
"bytes"
"net/http"
"log"
"io"
"os"
"io/ioutil"
"mime/multipart"
)
type
Config
struct
{
ApiUrl
string
GetTokenUrl
string
AppKey
string
AppSecret
string
GrantId
string
}
type
CommonRes
struct
{
Success
bool
`json:"success"`
Code
string
`json:"code"`
Message
string
`json:"message"`
TraceId
string
`json:"trace_id"`
}
type
client
struct
{
*
Config
AccessToken
string
}
var
server
*
client
const
CacheKey
=
"yz:token"
const
pkgName
=
"yz"
const
authorizeType
=
"silent"
func
New
(
config
*
Config
)
{
_
=
gconv
.
Scan
(
config
,
&
server
)
return
}
//post 请求
func
(
s
*
client
)
post
(
ctx
context
.
Context
,
method
string
,
params
g
.
Map
)
(
str
string
,
err
error
)
{
Start
:=
gtime
.
TimestampMilli
()
Request
:=
g
.
Client
()
Request
.
SetHeader
(
"Content-Type"
,
"application/json"
)
url
:=
method
+
"?access_token="
+
server
.
AccessToken
resp
,
err
:=
Request
.
Timeout
(
time
.
Second
*
5
)
.
Post
(
url
,
params
)
fmt
.
Println
(
url
)
defer
func
()
{
_
=
resp
.
Close
()
paramStr
:=
gjson
.
New
(
params
)
.
MustToJsonString
()
ctx
=
context
.
WithValue
(
ctx
,
"Method"
,
"POST"
)
ctx
=
context
.
WithValue
(
ctx
,
"URI"
,
url
)
if
err
!=
nil
{
g
.
Log
()
.
Ctx
(
ctx
)
.
Cat
(
pkgName
)
.
Cat
(
"error"
)
.
Infof
(
"参数【%v】错误【%v】响应时间【%v ms】"
,
paramStr
,
err
.
Error
(),
gtime
.
TimestampMilli
()
-
Start
)
}
else
{
g
.
Log
()
.
Ctx
(
ctx
)
.
Cat
(
pkgName
)
.
Infof
(
"参数【%v】响应【%v】响应时间【%v ms】"
,
paramStr
,
str
,
gtime
.
TimestampMilli
()
-
Start
)
}
}()
if
err
!=
nil
{
return
}
str
=
resp
.
ReadAllString
()
return
}
//post 请求
func
(
s
*
client
)
postImg
(
ctx
context
.
Context
,
method
string
,
params
string
)
(
str
string
,
err
error
)
{
g
.
Dump
(
89876
)
Start
:=
gtime
.
TimestampMilli
()
url
:=
method
+
"?access_token="
+
server
.
AccessToken
client
:=
http
.
Client
{}
bodyBuf
:=
&
bytes
.
Buffer
{}
bodyWrite
:=
multipart
.
NewWriter
(
bodyBuf
)
g
.
Dump
(
898761
)
file
,
err
:=
os
.
Open
(
params
)
g
.
Dump
(
8987612
)
defer
file
.
Close
()
if
err
!=
nil
{
g
.
Dump
(
66666
)
log
.
Println
(
"err"
)
}
// file 为key
g
.
Dump
(
89876123
)
fileWrite
,
err
:=
bodyWrite
.
CreateFormFile
(
"image"
,
params
)
_
,
err
=
io
.
Copy
(
fileWrite
,
file
)
g
.
Dump
(
898761234
)
if
err
!=
nil
{
g
.
Dump
(
777777
)
log
.
Println
(
"err"
)
}
bodyWrite
.
Close
()
//要关闭,会将w.w.boundary刷写到w.writer中
// 创建请求
g
.
Dump
(
8987612345
)
contentType
:=
bodyWrite
.
FormDataContentType
()
req
,
err
:=
http
.
NewRequest
(
http
.
MethodPost
,
url
,
bodyBuf
)
if
err
!=
nil
{
g
.
Dump
(
888888
)
log
.
Println
(
"err"
)
}
// 设置头
g
.
Dump
(
8987612346
)
req
.
Header
.
Set
(
"Content-Type"
,
contentType
)
resp
,
err
:=
client
.
Do
(
req
)
if
err
!=
nil
{
g
.
Dump
(
99999
)
log
.
Println
(
"err"
)
}
g
.
Dump
(
8987612347
)
defer
func
()
{
_
=
resp
.
Body
.
Close
()
paramStr
:=
gjson
.
New
(
params
)
.
MustToJsonString
()
ctx
=
context
.
WithValue
(
ctx
,
"Method"
,
"POST"
)
ctx
=
context
.
WithValue
(
ctx
,
"URI"
,
url
)
if
err
!=
nil
{
g
.
Dump
(
123456
)
g
.
Log
()
.
Ctx
(
ctx
)
.
Cat
(
pkgName
)
.
Cat
(
"error"
)
.
Infof
(
"参数【%v】错误【%v】响应时间【%v ms】"
,
paramStr
,
err
.
Error
(),
gtime
.
TimestampMilli
()
-
Start
)
}
else
{
g
.
Log
()
.
Ctx
(
ctx
)
.
Cat
(
pkgName
)
.
Infof
(
"参数【%v】响应【%v】响应时间【%v ms】"
,
paramStr
,
str
,
gtime
.
TimestampMilli
()
-
Start
)
}
}()
g
.
Dump
(
89876123478
)
b
,
err
:=
ioutil
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
g
.
Dump
(
999999888
)
log
.
Println
(
"err"
)
}
g
.
Dump
(
8987612347889
)
str
=
string
(
b
)
return
}
// requestApi 请求
func
(
s
*
client
)
requestApi
(
ctx
context
.
Context
,
method
string
,
businessParams
g
.
Map
)
(
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
}
// requestApi 请求
func
(
s
*
client
)
requestApiImg
(
ctx
context
.
Context
,
method
string
,
businessParams
string
)
(
str
string
,
err
error
)
{
_
,
err
=
s
.
createPostRequest
(
ctx
,
nil
)
if
err
!=
nil
{
return
}
urlMethod
:=
s
.
ApiUrl
+
method
str
,
err
=
s
.
postImg
(
ctx
,
urlMethod
,
businessParams
)
return
}
func
(
s
*
client
)
createPostRequest
(
ctx
context
.
Context
,
businessParams
g
.
Map
)
(
res
g
.
Map
,
err
error
)
{
err
=
s
.
getAccessToken
(
ctx
)
if
err
!=
nil
{
return
}
res
=
g
.
Map
{
"token"
:
s
.
AccessToken
,
}
if
businessParams
!=
nil
{
for
k
,
v
:=
range
businessParams
{
res
[
k
]
=
v
}
}
return
}
This diff is collapsed.
Click to expand it.
supplier/yz/goods.go
0 → 100644
浏览文件 @
39fd6e02
package
yz
import
(
"context"
"encoding/json"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/util/gconv"
"github.com/gogf/gf/frame/g"
)
type
goodsJD
struct
{
}
var
Goods
=
goodsJD
{}
type
AddGoodsReq
struct
{
Param
AddGoodsParam
`json:"param"`
}
type
ItemDeliveryParam
struct
{
Postage
int
`json:"postage"`
DeliverySetting
DeliverySetting
`json:"delivery_setting"`
}
type
DeliverySetting
struct
{
Express
bool
`json:"express"`
}
type
SkuList
struct
{
SkuProps
[]
SkuProps
`json:"sku_props"`
Price
int
`json:"price"`
MaxGuidePrice
int
`json:"max_guide_price"`
CostPrice
int
`json:"cost_price"`
SkuNo
int
`json:"sku_no"`
StockNum
int
`json:"stock_num"`
}
type
SkuProps
struct
{
PropValueName
string
`json:"prop_value_name"`
PropName
string
`json:"prop_name"`
PropNameId
int
`json:"prop_name_id"`
PropValueId
int
`json:"prop_value_id"`
}
type
SkuValueProps
struct
{
Name
string
`json:"name"`
ImgId
int
`json:"img_id"`
Id
int
`json:"id"`
}
type
ItemPriceParam
struct
{
Origin
int
`json:"origin"`
CostPrice
int
`json:"cost_price"`
Price
int
`json:"price"`
}
type
AddGoodsParam
struct
{
ItemId
int
`json:"item_id"`
NodeKdtId
int
`json:"node_kdt_id"`
ItemDeliveryParam
ItemDeliveryParam
`json:"item_delivery_param"`
ItemWeight
int
`json:"item_weight"`
ItemNo
int
`json:"item_no"`
SkuList
[]
SkuList
`json:"sku_list"`
Desc
string
`json:"desc"`
ImageIds
[]
int64
`json:"image_ids"`
SkuValueProps
[]
SkuValueProps
`json:"sku_value_props"`
ItemType
int
`json:"item_type"`
ItemPriceParam
ItemPriceParam
`json:"item_price_param"`
Title
string
`json:"title"`
IsDisplay
int
`json:"is_display"`
Quantity
int
`json:"quantity"`
HideStock
int
`json:"hide_stock"`
}
type
AddGoodsRes
struct
{
CommonRes
Data
struct
{
ItemId
int
`json:"item_id"`
Alias
string
`json:"alias"`
}
`json:"data"`
}
type
UplpadImgReq
struct
{
Image
string
`json:"image"`
}
// type UplpadImgRes struct {
// CommonRes
// Data struct {
// ImageId int64 `json:"image_id"`
// } `json:"data"`
// }
type
UplpadImgRes
struct
{
TraceId
string
`json:"trace_id"`
Code
int
`json:"code"`
Data
struct
{
KdtId
int
`json:"kdt_id"`
ImageUrl
string
`json:"image_url"`
Width
int
`json:"width"`
ImageId
int64
`json:"image_id"`
Height
int
`json:"height"`
}
`json:"data"`
Success
bool
`json:"success"`
Message
string
`json:"message"`
}
// 添加商品
func
(
*
goodsJD
)
AddGoods
(
ctx
context
.
Context
,
req
*
AddGoodsReq
)
(
res
*
AddGoodsRes
,
err
error
)
{
// g.Dump(11111111,req)
// return
method
:=
"youzan.item.add/1.0.1"
param
:=
gconv
.
Map
(
req
)
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
gjson
.
New
(
result
)
.
Scan
(
&
res
)
return
}
// 编辑商品
func
(
*
goodsJD
)
UpdateGoods
(
ctx
context
.
Context
,
req
*
AddGoodsReq
)
(
res
*
AddGoodsRes
,
err
error
)
{
method
:=
"youzan.item.incremental.update/1.0.1"
param
:=
gconv
.
Map
(
req
)
result
,
err
:=
server
.
requestApi
(
ctx
,
method
,
param
)
if
err
!=
nil
{
return
}
err
=
json
.
Unmarshal
([]
byte
(
result
),
&
res
)
return
}
// 图片上传
func
(
*
goodsJD
)
UploadImg
(
ctx
context
.
Context
,
req
*
UplpadImgReq
)
(
res
*
UplpadImgRes
,
err
error
)
{
method
:=
"youzan.materials.storage.platform.img.upload/3.0.0"
//param := gconv.Map(req)
//param = map[string]interface{}{
// "image" : req.Image,
//}
result
,
err
:=
server
.
requestApiImg
(
ctx
,
method
,
req
.
Image
)
if
err
!=
nil
{
g
.
Dump
(
"111111123"
,
err
)
return
}
err
=
json
.
Unmarshal
([]
byte
(
result
),
&
res
)
g
.
Dump
(
"11111112344444"
,
err
)
return
}
//type UpDateStockReq struct {
// Quantity string `json:"quantity"`
// ItemId string `json:"item_id"`
// SkuId string `json:"sku_id"`
// Type string `json:"type"`
//}
//type UpDateStockRes struct {
// Code int `json:"code"`
// Data struct {
// IsSuccess bool `json:"is_success"`
// } `json:"data"`
// Success bool `json:"success"`
// Message string `json:"message"`
//}
//// 图片上传
//func (*goodsJD) UpDateStock(ctx context.Context, req *UpDateStockReq) (res *UpDateStockRes, err error) {
// method := "youzan.item.quantity.update/3.0.0"
// param := gconv.Map(req)
// result, err := server.requestApi(ctx, method, param)
// if err != nil {
// return
// }
// err = json.Unmarshal([]byte(result), &res)
// return
//}1
\ No newline at end of file
This diff is collapsed.
Click to expand it.
supplier/yz/token.go
0 → 100644
浏览文件 @
39fd6e02
package
yz
import
(
"context"
"errors"
"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
Data
*
accessToken
`json:"data"`
}
type
accessToken
struct
{
Expires
int64
`json:"expires"`
Scope
string
`json:"scope"`
AccessToken
string
`json:"access_token"`
AuthorityId
string
`json:"authority_id"`
}
//getAccessToken 获取token
func
(
s
*
client
)
getAccessToken
(
ctx
context
.
Context
)
(
err
error
)
{
var
token
*
accessToken
conn
:=
g
.
Redis
()
.
Ctx
(
ctx
)
.
Conn
()
defer
func
()
{
_
=
conn
.
Close
()
}()
_
,
_
=
conn
.
DoVar
(
"SELECT"
,
10
)
cache
,
_
:=
conn
.
DoVar
(
"HGETALL"
,
CacheKey
)
if
!
cache
.
IsEmpty
()
{
_
=
cache
.
Scan
(
&
token
)
if
token
.
Expires
>
gtime
.
TimestampMilli
()
{
s
.
AccessToken
=
token
.
AccessToken
return
}
return
s
.
refreshToken
(
ctx
,
token
)
}
var
params
=
g
.
Map
{
"client_id"
:
s
.
AppKey
,
"client_secret"
:
s
.
AppSecret
,
"authorize_type"
:
authorizeType
,
"grant_id"
:
s
.
GrantId
,
"refresh"
:
false
,
}
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
.
Message
)
return
}
_
,
_
=
conn
.
Do
(
"HMSET"
,
append
(
g
.
Slice
{
CacheKey
},
gutil
.
MapToSlice
(
gconv
.
Map
(
jdRes
.
Data
))
...
)
...
)
s
.
AccessToken
=
jdRes
.
Data
.
AccessToken
return
}
//refreshToken 刷新token
func
(
s
*
client
)
refreshToken
(
ctx
context
.
Context
,
req
*
accessToken
)
(
err
error
)
{
_
,
err
=
g
.
Redis
()
.
DoVar
(
"DEL"
,
CacheKey
)
var
params
=
g
.
Map
{
"client_id"
:
s
.
AppKey
,
"client_secret"
:
s
.
AppSecret
,
"authorize_type"
:
"silent"
,
"grant_id"
:
s
.
ApiUrl
,
"refresh"
:
true
,
}
result
,
err
:=
s
.
post
(
ctx
,
s
.
GetTokenUrl
,
params
)
if
err
!=
nil
{
return
}
var
jdRes
*
getAccessTokenRes
err
=
gjson
.
New
(
result
)
.
Scan
(
&
jdRes
)
if
err
!=
nil
{
return
}
if
jdRes
==
nil
{
return
}
if
!
jdRes
.
Success
{
err
=
errors
.
New
(
jdRes
.
Message
)
return
}
conn
:=
g
.
Redis
()
.
Ctx
(
ctx
)
.
Conn
()
defer
func
()
{
_
=
conn
.
Close
()
}()
_
,
_
=
conn
.
DoVar
(
"SELECT"
,
10
)
_
,
_
=
conn
.
Do
(
"HMSET"
,
append
(
g
.
Slice
{
CacheKey
},
gutil
.
MapToSlice
(
gconv
.
Map
(
jdRes
.
Data
))
...
)
...
)
s
.
AccessToken
=
jdRes
.
Data
.
AccessToken
return
}
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论