package fnpsapi import ( "encoding/json" "fmt" "net/http" "strings" "git.rosy.net.cn/baseapi/utils" ) const ( StoreNotExist = "门店不存在" StoreExist = "门店名称已存在" ) const ( // 创建状态 ShopCreateStatusAuditRejected = 10 // 上架审核中 ShopCreateStatusAuditPassed = 20 // 正常(已上架) ShopCreateStatusAuditCreated = 30 // 上架审核失败 ShopCreateStatusAuditOnline = 40 // 已冻结 ShopCreateStatusAuditUpdateRejected = 50 // 已下架 // 修改状态 ShopUpdateStatusAuditRejected = 0 // 无修改 ShopUpdateStatusAuditPassed = 10 // 资料修改审核中 ShopUpdateStatusAuditCreated = 20 // 审核通过 ShopUpdateStatusAuditOnline = 30 // 审核驳回 ) type CreateStoreStruct struct { Sign string `json:"sign"` //返回值签名,详见开放平台侧返回值签名算法 Code string `json:"code"` //错误码,详见开放平台侧错误码映射表 Msg string `json:"msg"` //错误信息 BusinessData string `json:"business_data"` // string ApiCode string `json:"api_code"` // string } func (a *API) CreateStore(createStoreParam *CreateStoreBaseInfo) (result1 string, err error) { requestHead := a.MakeFnRequestHead() storeByte, err := json.Marshal(createStoreParam) if err != nil { return "", err } requestHead["business_data"] = string(storeByte) result, err := a.AccessAPI(ApiURL, "chainstoreCreate", RequestPost, requestHead) if err != nil { return "", err } createData := &CreateStoreStruct{} if err := utils.Map2StructByJson(result, createData, false); err != nil { return "", err } defaultResult := struct { ChainStoreId int64 `json:"chain_store_id"` }{} if err := json.Unmarshal([]byte(createData.BusinessData), &defaultResult); err != nil { return "", err } return utils.Int64ToStr(defaultResult.ChainStoreId), err } func (a *API) UpdateStore(updateStore *UpdateStoreParam) (err error) { requestHead := a.MakeFnRequestHead() storeByte, err := json.Marshal(updateStore) if err != nil { return err } requestHead["business_data"] = string(storeByte) _, err = a.AccessAPI(ApiURL, "chainstoreUpdate", RequestPost, requestHead) return } func (a *API) GetStore(storeID string) (getStoreResult *GetOneStoreRespData, err error) { params := GetOneStoreParam{ BaseInfo: BaseInfo{ AccessToken: a.accessToken, Signature: a.signature, MerchantID: a.merchantId, Version: a.version, AppID: a.appID, Timestamp: a.timestamp, }, BusinessData: "", } // 序列化请求参数 data, err := json.Marshal(GetOneStore{MerchantID: a.merchantId, OutShopCode: storeID}) if err != nil { return nil, err } params.BusinessData = string(data) paramsMap := utils.Struct2FlatMap(params) result, err := a.AccessAPI(ApiURL, "chainstoreQuery", RequestPost, paramsMap) if err != nil { return nil, err } if result["code"].(string) != "200" { return nil, fmt.Errorf("%s", result["msg"]) } fnResult := &GetOneStoreRespData{} if storeData, ok := result["business_data"]; ok { if err := json.Unmarshal([]byte(utils.Interface2String(storeData)), fnResult); err != nil { return nil, err } } else { return nil, fmt.Errorf("%s", result["msg"]) } return fnResult, err } func IsErrShopNotExist(err error) bool { if err != nil { if strings.Contains(err.Error(), StoreNotExist) { return true } } return false } func IsErrShopExist(err error) bool { if err != nil { if strings.Contains(err.Error(), StoreExist) { return true } } return false } const ( FengNiaoCallbackTypeOrder = "order" // 订单 FengNiaoCallbackTypeStore = "store" // 门店 FengNiaoCallbackTypeAbnormal = "abnormal" // 异常 FengNiaoCallbackTypeToken = "token" // token更新 ) // HttpToGuoYuanFN 订单消息推送果园 func HttpToGuoYuanFN(param map[string]interface{}, requestType string) (*http.Response, error) { var paramData []byte var err error //if requestType == "order" || requestType == "waybill" { // param["data"] = utils.Format4Output(param["data"], false) // paramData, err = json.Marshal([]interface{}{param}) // if err != nil { // return nil, err // } //} else { // paramData, err = json.Marshal(param) // if err != nil { // return nil, err // } //} paramData, err = json.Marshal(param) if err != nil { return nil, err } body := strings.NewReader(string(paramData)) url := "" switch requestType { case FengNiaoCallbackTypeStore: url = "http://callback-jxgy.jxc4.com/fn/fnStore" case FengNiaoCallbackTypeOrder: url = "http://callback-jxgy.jxc4.com/fn/fnOrder" case FengNiaoCallbackTypeAbnormal: url = "http://callback-jxgy.jxc4.com/fn/fnAbnormal" case FengNiaoCallbackTypeToken: url = "http://callback-jxgy.jxc4.com/fn/fnToken" } httpReq, err := http.NewRequest(http.MethodPost, url, body) if err != nil { return nil, err } httpReq.Header.Set("Content-Type", "application/json") httpRes, err := http.DefaultClient.Do(httpReq) return httpRes, err }