This commit is contained in:
richboo111
2023-07-06 15:03:48 +08:00
8 changed files with 116 additions and 49 deletions

View File

@@ -70,7 +70,7 @@ func TestCancel(t *testing.T) {
// //
func TestQueryOrderInfo(t *testing.T) { func TestQueryOrderInfo(t *testing.T) {
dadaapi = New("dada154e2a41fd6cef3", "7f97d8f258b70b450f04e7ab274ed8f8", "6660", "http://callback.jxc4.com/dadadelivery/msg", true) dadaapi = New("dada154e2a41fd6cef3", "7f97d8f258b70b450f04e7ab274ed8f8", "6660", "http://callback.jxc4.com/dadadelivery/msg", true)
result, err := dadaapi.QueryOrderInfo("1100599580388710489") result, err := dadaapi.QueryOrderInfo("1100618462495865287")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View File

@@ -0,0 +1,36 @@
package tao_vegetable
import (
domain2 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/domain"
request2 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/request"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/globals"
"testing"
)
func TestAgreeUserCancel(t *testing.T) {
param := &request2.AlibabaTclsAelophyRefundAgreeRequest{
StoreId: utils.String2Pointer("JX668594"),
OutOrderId: utils.String2Pointer("1927716386361804887"),
RefundId: utils.String2Pointer("1000010813678250044"),
AuditMemo: utils.String2Pointer("商户同意退款"),
SubRefundList: &[]domain2.AlibabaTclsAelophyRefundAgreeSubrefundlist{
{OutSubOrderId: utils.String2Pointer("1927716386361804887"), RefundFee: utils.Int64ToPointer(300)},
},
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(TaoVegetableChannelCode)),
}
err := apiTao.AgreeUserCancel(param)
globals.SugarLogger.Debugf("%v", err)
}
func TestDiseAgreeCancel(t *testing.T) {
param := &request2.AlibabaTclsAelophyRefundDisagreeRequest{
RefundId: utils.String2Pointer("1000010805204700044"),
RejectReason: utils.String2Pointer("就不给你退"),
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(TaoVegetableChannelCode)),
}
err := apiTao.DisAgreeUserCancel(param)
globals.SugarLogger.Debugf("err := %v", err)
}

View File

@@ -19,7 +19,7 @@ import (
// AgreeUserCancel 同意用户售后申请 // AgreeUserCancel 同意用户售后申请
func (a *API) AgreeUserCancel(req *request2.AlibabaTclsAelophyRefundAgreeRequest) error { func (a *API) AgreeUserCancel(req *request2.AlibabaTclsAelophyRefundAgreeRequest) error {
globals.SugarLogger.Debugf("进入AgreeUserCancel") globals.SugarLogger.Debugf("进入AgreeUserCancel := %s", utils.Format4Output(req, false))
client := ability3156.NewAbility3156(&a.client) client := ability3156.NewAbility3156(&a.client)
data, _ := client.AlibabaTclsAelophyRefundAgree(req, a.token) data, _ := client.AlibabaTclsAelophyRefundAgree(req, a.token)
@@ -49,7 +49,7 @@ func (a *API) DisAgreeUserCancel(req *request2.AlibabaTclsAelophyRefundDisagreeR
// PartialRefundReason 商户逆向取消订单数据渲染(获取订单商品列表已经取消原因:部分退款) // PartialRefundReason 商户逆向取消订单数据渲染(获取订单商品列表已经取消原因:部分退款)
func (a *API) PartialRefundReason(req *request2.AlibabaTclsAelophyRefundCsapplyrenderRequest) (*domain.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderResponseDto, error) { func (a *API) PartialRefundReason(req *request2.AlibabaTclsAelophyRefundCsapplyrenderRequest) (*domain.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderResponseDto, error) {
globals.SugarLogger.Debugf("进入 PartialRefundReason") globals.SugarLogger.Debugf("进入 PartialRefundReason: %s", utils.Format4Output(req, false))
client := ability3156.NewAbility3156(&a.client) client := ability3156.NewAbility3156(&a.client)
data, _ := client.AlibabaTclsAelophyRefundCsapplyrender(req, a.token) data, _ := client.AlibabaTclsAelophyRefundCsapplyrender(req, a.token)
@@ -78,77 +78,77 @@ func (a *API) PartialRefund(req *request2.AlibabaTclsAelophyRefundCsapplyRequest
} }
// UserApplyRefund 用户申请售后单消息通知 // UserApplyRefund 用户申请售后单消息通知
func (a *API) UserApplyRefund(c *http.Request) (*UserApplyRefundCallBack, error) { func (a *API) UserApplyRefund(c *http.Request) (*UserApplyRefundCallBack, string, error) {
globals.SugarLogger.Debugf("进入 UserApplyRefund") globals.SugarLogger.Debugf("进入 UserApplyRefund")
data, err := ioutil.ReadAll(c.Body) data, err := ioutil.ReadAll(c.Body)
if err != nil { if err != nil {
return nil, err return nil, "", err
} }
if len(data) == 0 { if len(data) == 0 {
return nil, err return nil, "", err
} }
var result *UserApplyRefundCallBack var result *UserApplyRefundCallBack
if err := json.Unmarshal(data, &result); err != nil { if err := json.Unmarshal(data, &result); err != nil {
return nil, err return nil, "", err
} }
return result, nil return result, string(data), nil
} }
// UserCancelRefundApply 用户取消售后申请 // UserCancelRefundApply 用户取消售后申请
func (a *API) UserCancelRefundApply(c *http.Request) (*UserCancelRefundApply, error) { func (a *API) UserCancelRefundApply(c *http.Request) (*UserCancelRefundApply, string, error) {
globals.SugarLogger.Debugf("进入 UserCancelRefundApply") globals.SugarLogger.Debugf("进入 UserCancelRefundApply")
data, err := ioutil.ReadAll(c.Body) data, err := ioutil.ReadAll(c.Body)
if err != nil { if err != nil {
return nil, err return nil, "", err
} }
if len(data) == 0 { if len(data) == 0 {
return nil, err return nil, "", err
} }
var result *UserCancelRefundApply var result *UserCancelRefundApply
if err := json.Unmarshal(data, &result); err != nil { if err := json.Unmarshal(data, &result); err != nil {
return nil, err return nil, "", err
} }
return result, nil return result, string(data), nil
} }
// OnSaleRefundOrder 用户售中取消 // OnSaleRefundOrder 用户售中取消
func (a *API) OnSaleRefundOrder(c *http.Request) (*OnSaleCancel, error) { func (a *API) OnSaleRefundOrder(c *http.Request) (*OnSaleCancel, string, error) {
globals.SugarLogger.Debugf("进入 OnSaleRefundOrder") globals.SugarLogger.Debugf("进入 OnSaleRefundOrder")
body, _ := ioutil.ReadAll(c.Body) body, _ := ioutil.ReadAll(c.Body)
if len(body) == 0 { if len(body) == 0 {
return nil, nil return nil, "", nil
} }
var onSaleOrder *OnSaleCancel var onSaleOrder *OnSaleCancel
if err := json.Unmarshal(body, &onSaleOrder); err != nil { if err := json.Unmarshal(body, &onSaleOrder); err != nil {
return nil, err return nil, "", err
} }
return onSaleOrder, nil return onSaleOrder, string(body), nil
} }
// RefundOrderFinish 同城零售逆向订单状态完成接口(退款完成) // RefundOrderFinish 同城零售逆向订单状态完成接口(退款完成)
func (a *API) RefundOrderFinish(c *http.Request) (*RefundOrderFinish, error) { func (a *API) RefundOrderFinish(c *http.Request) (*RefundOrderFinish, string, error) {
globals.SugarLogger.Debugf("进入 RefundOrderFinish") globals.SugarLogger.Debugf("进入 RefundOrderFinish")
data, err := ioutil.ReadAll(c.Body) data, err := ioutil.ReadAll(c.Body)
if err != nil { if err != nil {
return nil, err return nil, "", err
} }
if len(data) == 0 { if len(data) == 0 {
return nil, nil return nil, "", nil
} }
var result *RefundOrderFinish var result *RefundOrderFinish
if err := json.Unmarshal(data, &result); err != nil { if err := json.Unmarshal(data, &result); err != nil {
return nil, err return nil, "", err
} }
return result, nil return result, string(data), nil
} }
// QueryAfsOrderDetail 获取订单退款详情 // QueryAfsOrderDetail 获取订单退款详情
func (a *API) QueryAfsOrderDetail(req *request591.AlibabaWdkOrderRefundGetRequest) (*domain591.AlibabaWdkOrderRefundGetOrderSyncRefundListResult, error) { func (a *API) QueryAfsOrderDetail(req *request591.AlibabaWdkOrderRefundGetRequest) (*domain591.AlibabaWdkOrderRefundGetOrderSyncRefundListResult, error) {
globals.SugarLogger.Debugf("进入 QueryAfsOrderDetail") globals.SugarLogger.Debugf("进入 QueryAfsOrderDetail : %s", utils.Format4Output(req, false))
client := ability591.NewAbility591(&a.client) client := ability591.NewAbility591(&a.client)
data, _ := client.AlibabaWdkOrderRefundGet(req, a.token) data, _ := client.AlibabaWdkOrderRefundGet(req, a.token)

View File

@@ -13,18 +13,18 @@ import (
) )
// ReaderOrderInfo 获取订单状态回调 // ReaderOrderInfo 获取订单状态回调
func (a *API) ReaderOrderInfo(c *http.Request) (*CallbackOrder, error) { func (a *API) ReaderOrderInfo(c *http.Request) (*CallbackOrder, string, error) {
body, _ := ioutil.ReadAll(c.Body) body, _ := ioutil.ReadAll(c.Body)
if len(body) == 0 { if len(body) == 0 {
return nil, nil return nil, "", nil
} }
var callbackOrder *CallbackOrder var callbackOrder *CallbackOrder
if err := json.Unmarshal(body, &callbackOrder); err != nil { if err := json.Unmarshal(body, &callbackOrder); err != nil {
return nil, err return nil, "", err
} }
return callbackOrder, nil return callbackOrder, string(body), nil
} }
// QueryOrderDetail 自配送查询订单详情 // QueryOrderDetail 自配送查询订单详情
@@ -44,7 +44,7 @@ func (a *API) QueryOrderDetail(req *request2.AlibabaAelophyOrderGetRequest) (*do
// DeliveryFinish 订单一下的没一个状态通知接口 // DeliveryFinish 订单一下的没一个状态通知接口
// ACCEPTED = 商户接单 REJECTED = 商户取消订单 PICKED = 拣货完成 PACKAGED = 打包出库 SHIPPING = 开始配送 SIGN = 用户签收 REFUSED = 用户拒收 // ACCEPTED = 商户接单 REJECTED = 商户取消订单 PICKED = 拣货完成 PACKAGED = 打包出库 SHIPPING = 开始配送 SIGN = 用户签收 REFUSED = 用户拒收
func (a *API) DeliveryFinish(req *request2.AlibabaAelophyOrderWorkCallbackRequest) error { func (a *API) DeliveryFinish(req *request2.AlibabaAelophyOrderWorkCallbackRequest) error {
globals.SugarLogger.Debugf("进入 DeliveryFinish") globals.SugarLogger.Debugf("进入 DeliveryFinish: %s", utils.Format4Output(req, false))
client := ability591.NewAbility591(&a.client) client := ability591.NewAbility591(&a.client)
globals.SugarLogger.Debugf("param := %s", utils.Format4Output(req, false)) globals.SugarLogger.Debugf("param := %s", utils.Format4Output(req, false))

View File

@@ -42,6 +42,24 @@ type CancelSubOrder struct {
BizSubOrderId int64 `json:"bizSubOrderId"` // 要取消的子订单号 BizSubOrderId int64 `json:"bizSubOrderId"` // 要取消的子订单号
CancelStockQuantity string `json:"cancelStockQuantity"` // 库存单位取消数量 CancelStockQuantity string `json:"cancelStockQuantity"` // 库存单位取消数量
} }
type T struct {
RefundFee int `json:"refundFee"`
MerchantCode string `json:"merchantCode"`
RefundReason string `json:"refundReason"`
BizRefundId string `json:"bizRefundId"`
OutOrderId string `json:"outOrderId"`
RefundPackageFee int `json:"refundPackageFee"`
OrderFrom int `json:"orderFrom"`
SubRefundOrders []struct {
RefundFee int `json:"refundFee"`
MaxRefundFee int `json:"maxRefundFee"`
OutSubOrderId string `json:"outSubOrderId"`
RefundAmount int `json:"refundAmount"`
} `json:"subRefundOrders"`
StoreId string `json:"storeId"`
RefundDeliveryFee int `json:"refundDeliveryFee"`
RefundId string `json:"refundId"`
}
// UserApplyRefundCallBack 用户申请售后消息通知 // UserApplyRefundCallBack 用户申请售后消息通知
type UserApplyRefundCallBack struct { type UserApplyRefundCallBack struct {

View File

@@ -2,6 +2,8 @@ package tao_vegetable
import ( import (
"fmt" "fmt"
domain3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/domain"
request3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/request"
domain591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/domain" domain591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/domain"
request591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/request" request591 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability591/request"
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/util" "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/util"
@@ -17,13 +19,38 @@ func TestName(t *testing.T) {
func TestGetOrderDetail(t *testing.T) { func TestGetOrderDetail(t *testing.T) {
requestParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{ requestParam := &request591.AlibabaAelophyOrderGetRequest{OrderGetRequest: &domain591.AlibabaAelophyOrderGetOrderGetRequest{
StoreId: utils.String2Pointer("JX668594"), StoreId: utils.String2Pointer("JX668594"),
BizOrderId: utils.Int64ToPointer(5000894677248980922), BizOrderId: utils.Int64ToPointer(5000897680290460922),
}} }}
data, err := apiTao.QueryOrderDetail(requestParam) data, err := apiTao.QueryOrderDetail(requestParam)
globals.SugarLogger.Debugf("data := %s", utils.Format4Output(data, false)) globals.SugarLogger.Debugf("data := %s", utils.Format4Output(data, false))
globals.SugarLogger.Debugf("err := %s", utils.Format4Output(err, false)) globals.SugarLogger.Debugf("err := %s", utils.Format4Output(err, false))
} }
func TestPartialRefundReason(t *testing.T) {
param := &request3156.AlibabaTclsAelophyRefundCsapplyrenderRequest{
RefundCsApplyRenderDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderDto{
OutOrderId: utils.String2Pointer("1927937966433804887"),
StoreId: utils.String2Pointer("JX668998"),
OutSubOrderIds: &[]string{"1927937966433804887"},
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(TaoVegetableChannelCode)),
},
}
apiTao.PartialRefundReason(param)
}
func TestQueryAfsOrderDetail(t *testing.T) {
param := &request591.AlibabaWdkOrderRefundGetRequest{
BizOrderIds: &[]int64{1924482145266804887},
RefundIds: &[]int64{1000010803420790044},
OrderFrom: utils.Int64ToPointer(31),
ShopId: nil,
StoreId: utils.String2Pointer("JX668594"),
}
data, err := apiTao.QueryAfsOrderDetail(param)
globals.SugarLogger.Debugf("data := %s", utils.Format4Output(data, false))
globals.SugarLogger.Debugf("err := %s", utils.Format4Output(err, false))
}
// 接单 // 接单
func TestDeliveryFinishACCEPTED(t *testing.T) { func TestDeliveryFinishACCEPTED(t *testing.T) {
param := &request591.AlibabaAelophyOrderWorkCallbackRequest{} param := &request591.AlibabaAelophyOrderWorkCallbackRequest{}
@@ -48,7 +75,7 @@ func TestDeliveryFinishREJECTED(t *testing.T) {
err := apiTao.DeliveryFinish(&request591.AlibabaAelophyOrderWorkCallbackRequest{ err := apiTao.DeliveryFinish(&request591.AlibabaAelophyOrderWorkCallbackRequest{
WorkCallbackRequest: &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{ WorkCallbackRequest: &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{
StoreId: utils.String2Pointer("JX668594"), StoreId: utils.String2Pointer("JX668594"),
BizOrderId: utils.Int64ToPointer(5000894665550700922), BizOrderId: utils.Int64ToPointer(5000897098078620922),
Status: utils.String2Pointer("REJECTED"), Status: utils.String2Pointer("REJECTED"),
}, },
}) })
@@ -57,7 +84,7 @@ func TestDeliveryFinishREJECTED(t *testing.T) {
} }
func TestGetTransactionOrderList(t *testing.T) { func TestGetTransactionOrderList(t *testing.T) {
queryData := time.Now() queryData := time.Now().AddDate(0, 0, 6)
create := time.Date(queryData.Year(), queryData.Month(), queryData.Day(), 0, 0, 0, 0, queryData.Location()) create := time.Date(queryData.Year(), queryData.Month(), queryData.Day(), 0, 0, 0, 0, queryData.Location())
end := time.Date(queryData.Year(), queryData.Month(), queryData.Day(), 23, 59, 59, 59, queryData.Location()) end := time.Date(queryData.Year(), queryData.Month(), queryData.Day(), 23, 59, 59, 59, queryData.Location())
createTime := util.LocalTime(create) createTime := util.LocalTime(create)
@@ -103,13 +130,13 @@ func TestPickUp(t *testing.T) {
param := &request591.AlibabaAelophyOrderWorkCallbackRequest{} param := &request591.AlibabaAelophyOrderWorkCallbackRequest{}
param.WorkCallbackRequest = &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{ param.WorkCallbackRequest = &domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackRequest{
StoreId: utils.String2Pointer("JX668594"), StoreId: utils.String2Pointer("JX668594"),
BizOrderId: utils.Int64ToPointer(5000894677248980922), BizOrderId: utils.Int64ToPointer(5000897449678380922),
Status: utils.String2Pointer(OrderStatusPickedUp), Status: utils.String2Pointer(OrderStatusPickedUp),
} }
workCallbackSubOrderInfoList := make([]domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo, 0, 0) workCallbackSubOrderInfoList := make([]domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo, 0, 0)
workCallbackSubOrderInfo := domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo{ workCallbackSubOrderInfo := domain591.AlibabaAelophyOrderWorkCallbackWorkCallbackSubOrderInfo{
BizSubOrderId: utils.Int64ToPointer(5000894677248980922), BizSubOrderId: utils.Int64ToPointer(3422286108419706112),
SkuCode: utils.String2Pointer("19930827"), SkuCode: utils.String2Pointer("19930827"),
PickSaleQuantity: utils.String2Pointer("3"), PickSaleQuantity: utils.String2Pointer("3"),
PickStockQuantity: utils.String2Pointer("3"), PickStockQuantity: utils.String2Pointer("3"),

View File

@@ -58,7 +58,7 @@ func (a *API) UpdateStoreSku(param *request.AlibabaWdkSkuUpdateRequest) (*[]Vege
client := ability585.NewAbility585(&a.client) client := ability585.NewAbility585(&a.client)
data, _ := client.AlibabaWdkSkuUpdate(param, a.token) data, _ := client.AlibabaWdkSkuUpdate(param, a.token)
globals.SugarLogger.Debugf("UpdateStoreSku := %s", utils.Format4Output(data, false))
if !*data.Result.Success { if !*data.Result.Success {
globals.SugarLogger.Debugf("requestId[%s],err[%s]", data.RequestId, utils.Format4Output(data.Result, false)) globals.SugarLogger.Debugf("requestId[%s],err[%s]", data.RequestId, utils.Format4Output(data.Result, false))
return nil, fmt.Errorf(*data.Result.ErrMsg) return nil, fmt.Errorf(*data.Result.ErrMsg)

View File

@@ -3,8 +3,6 @@ package tao_vegetable
import ( import (
"fmt" "fmt"
request1475 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability1475/request" request1475 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability1475/request"
domain3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/domain"
request3156 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability3156/request"
domain585 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability585/domain" domain585 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability585/domain"
request585 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability585/request" request585 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability585/request"
domain587 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability587/domain" domain587 "git.rosy.net.cn/baseapi/platformapi/tao_vegetable/sdk/ability587/domain"
@@ -171,7 +169,7 @@ func TestStoreSkuStock(t *testing.T) {
} }
stockPublishDtos := make([]domain589.AlibabaWdkStockPublishStockPublishDto, 0, 0) stockPublishDtos := make([]domain589.AlibabaWdkStockPublishStockPublishDto, 0, 0)
stockPublishDtos = append(stockPublishDtos, domain589.AlibabaWdkStockPublishStockPublishDto{ stockPublishDtos = append(stockPublishDtos, domain589.AlibabaWdkStockPublishStockPublishDto{
SkuCode: utils.String2Pointer("19930827"), SkuCode: utils.String2Pointer("22640"),
Quantity: utils.String2Pointer("99"), Quantity: utils.String2Pointer("99"),
OrderNo: utils.String2Pointer(fmt.Sprintf("%s_%d_%d", "JX668594", time.Now().UnixNano(), 84671)), OrderNo: utils.String2Pointer(fmt.Sprintf("%s_%d_%d", "JX668594", time.Now().UnixNano(), 84671)),
OrderType: utils.String2Pointer("10006800"), OrderType: utils.String2Pointer("10006800"),
@@ -193,18 +191,6 @@ func TestGetSkuDetaul(t *testing.T) {
globals.SugarLogger.Debugf("result := %s ", utils.Format4Output(result, false)) globals.SugarLogger.Debugf("result := %s ", utils.Format4Output(result, false))
} }
func TestPartialRefundReason(t *testing.T) {
param := &request3156.AlibabaTclsAelophyRefundCsapplyrenderRequest{
RefundCsApplyRenderDTO: &domain3156.AlibabaTclsAelophyRefundCsapplyrenderRefundCsApplyRenderDto{
OutOrderId: nil,
StoreId: utils.String2Pointer("JX668998"),
OutSubOrderIds: nil,
OrderFrom: utils.Int64ToPointer(utils.Str2Int64(TaoVegetableChannelCode)),
},
}
apiTao.PartialRefundReason(param)
}
func uploadImg(api *API, imgs []string) *string { func uploadImg(api *API, imgs []string) *string {
result := make([]string, 0, 0) result := make([]string, 0, 0)
for _, v := range imgs { for _, v := range imgs {