|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- package weapp
-
- import (
- "encoding/json"
- "fmt"
- )
-
- // apis
- const (
- apiAddNearbyPoi = "/wxa/addnearbypoi"
- apiDeleteNearbyPoi = "/wxa/delnearbypoi"
- apiGetNearbyPoiList = "/wxa/getnearbypoilist"
- apiSetNearbyPoiShowStatus = "/wxa/setnearbypoishowstatus"
- )
-
- // NearbyPoi 附近地点
- type NearbyPoi struct {
- PicList PicList `json:"pic_list"` // 门店图片,最多9张,最少1张,上传门店图片如门店外景、环境设施、商品服务等,图片将展示在微信客户端的门店页。图片链接通过文档https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738729中的《上传图文消息内的图片获取URL》接口获取。必填,文件格式为bmp、png、jpeg、jpg或gif,大小不超过5M pic_list是字符串,内容是一个json!
- ServiceInfos ServiceInfos `json:"service_infos"` // 必服务标签列表 选填,需要填写服务标签ID、APPID、对应服务落地页的path路径,详细字段格式见下方示例
- StoreName string `json:"store_name"` // 门店名字 必填,门店名称需按照所选地理位置自动拉取腾讯地图门店名称,不可修改,如需修改请重现选择地图地点或重新创建地点
- Hour string `json:"hour"` // 营业时间,格式11:11-12:12 必填
- Credential string `json:"credential"` // 资质号 必填, 15位营业执照注册号或9位组织机构代码
- Address string `json:"address"` // 地址 必填
- CompanyName string `json:"company_name"` // 主体名字 必填
- QualificationList string `json:"qualification_list"` // 证明材料 必填 如果company_name和该小程序主体不一致,需要填qualification_list,详细规则见附近的小程序使用指南-如何证明门店的经营主体跟公众号或小程序帐号主体相关http://kf.qq.com/faq/170401MbUnim17040122m2qY.html
- KFInfo KFInfo `json:"kf_info"` // 客服信息 选填,可自定义服务头像与昵称,具体填写字段见下方示例kf_info pic_list是字符串,内容是一个json!
- PoiID string `json:"poi_id"` // 如果创建新的门店,poi_id字段为空 如果更新门店,poi_id参数则填对应门店的poi_id 选填
- }
-
- // PicList 门店图片
- type PicList struct {
- List []string `json:"list"`
- }
-
- // ServiceInfos 必服务标签列表
- type ServiceInfos struct {
- ServiceInfos []ServiceInfo `json:"service_infos"`
- }
-
- // ServiceInfo 必服务标签
- type ServiceInfo struct {
- ID uint `json:"id"`
- Type uint8 `json:"type"`
- Name string `json:"name"`
- AppID string `json:"appid"`
- Path string `json:"path"`
- }
-
- // KFInfo // 客服信息
- type KFInfo struct {
- OpenKF bool `json:"open_kf"`
- KFHeading string `json:"kf_headimg"`
- KFName string `json:"kf_name"`
- }
-
- // AddNearbyPoiResponse response of add position.
- type AddNearbyPoiResponse struct {
- CommonError
- Data struct {
- AuditID string `json:"audit_id"` // 审核单 ID
- PoiID string `json:"poi_id"` // 附近地点 ID
- RelatedCredential string `json:"related_credential"` // 经营资质证件号
- } `json:"data"`
- }
-
- // Add 添加地点
- // token 接口调用凭证
- func (p *NearbyPoi) Add(token string) (*AddNearbyPoiResponse, error) {
- api := baseURL + apiAddNearbyPoi
- return p.add(api, token)
- }
-
- func (p *NearbyPoi) add(api, token string) (*AddNearbyPoiResponse, error) {
-
- pisList, err := json.Marshal(p.PicList)
- if err != nil {
- return nil, fmt.Errorf("failed to marshal picture list to json: %v", err)
- }
-
- serviceInfos, err := json.Marshal(p.ServiceInfos)
- if err != nil {
- return nil, fmt.Errorf("failed to marshal service info list to json: %v", err)
- }
-
- kfInfo, err := json.Marshal(p.KFInfo)
- if err != nil {
- return nil, fmt.Errorf("failed to marshal customer service staff info list to json: %v", err)
- }
-
- url, err := tokenAPI(api, token)
- if err != nil {
- return nil, err
- }
-
- params := requestParams{
- "is_comm_nearby": "1",
- "pic_list": string(pisList),
- "service_infos": string(serviceInfos),
- "store_name": p.StoreName,
- "hour": p.Hour,
- "credential": p.Credential,
- "address": p.Address,
- "company_name": p.CompanyName,
- "qualification_list": p.QualificationList,
- "kf_info": string(kfInfo),
- "poi_id": p.PoiID,
- }
-
- res := new(AddNearbyPoiResponse)
- if err := postJSON(url, params, res); err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // DeleteNearbyPoi 删除地点
- // token 接口调用凭证
- // id 附近地点 ID
- func DeleteNearbyPoi(token, id string) (*CommonError, error) {
- api := baseURL + apiDeleteNearbyPoi
- return deleteNearbyPoi(api, token, id)
- }
-
- func deleteNearbyPoi(api, token, id string) (*CommonError, error) {
- url, err := tokenAPI(api, token)
- if err != nil {
- return nil, err
- }
-
- params := requestParams{
- "poi_id": id,
- }
-
- res := new(CommonError)
- if err := postJSON(url, params, res); err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // PositionList 地点列表
- type PositionList struct {
- CommonError
- Data struct {
- LeftApplyNum uint `json:"left_apply_num"` // 剩余可添加地点个数
- MaxApplyNum uint `json:"max_apply_num"` // 最大可添加地点个数
- Data struct {
- List []struct {
- PoiID string `json:"poi_id"` // 附近地点 ID
- QualificationAddress string `json:"qualification_address"` // 资质证件地址
- QualificationNum string `json:"qualification_num"` // 资质证件证件号
- AuditStatus int `json:"audit_status"` // 地点审核状态
- DisplayStatus int `json:"display_status"` // 地点展示在附近状态
- RefuseReason string `json:"refuse_reason"` // 审核失败原因,audit_status=4 时返回
- } `json:"poi_list"` // 地址列表
- } `json:"-"`
- RawData string `json:"data"` // 地址列表的 JSON 格式字符串
- } `json:"data"` // 返回数据
- }
-
- // GetNearbyPoiList 查看地点列表
- // token 接口调用凭证
- // page 起始页id(从1开始计数)
- // rows 每页展示个数(最多1000个)
- func GetNearbyPoiList(token string, page, rows uint) (*PositionList, error) {
- api := baseURL + apiGetNearbyPoiList
- return getNearbyPoiList(api, token, page, rows)
- }
-
- func getNearbyPoiList(api, token string, page, rows uint) (*PositionList, error) {
- url, err := tokenAPI(api, token)
- if err != nil {
- return nil, err
- }
-
- params := requestParams{
- "page": page,
- "page_rows": rows,
- }
-
- res := new(PositionList)
- if err := postJSON(url, params, res); err != nil {
- return nil, err
- }
-
- err = json.Unmarshal([]byte(res.Data.RawData), &res.Data.Data)
- if err != nil {
- return nil, err
- }
-
- return res, nil
- }
-
- // NearbyPoiShowStatus 展示状态
- type NearbyPoiShowStatus int8
-
- // 所有展示状态
- const (
- HideNearbyPoi NearbyPoiShowStatus = iota // 不展示
- ShowNearbyPoi // 展示
- )
-
- // SetNearbyPoiShowStatus 展示/取消展示附近小程序
- // token 接口调用凭证
- // poiID 附近地点 ID
- // status 是否展示
- func SetNearbyPoiShowStatus(token, poiID string, status NearbyPoiShowStatus) (*CommonError, error) {
- api := baseURL + apiSetNearbyPoiShowStatus
- return setNearbyPoiShowStatus(api, token, poiID, status)
- }
-
- func setNearbyPoiShowStatus(api, token, poiID string, status NearbyPoiShowStatus) (*CommonError, error) {
- url, err := tokenAPI(api, token)
- if err != nil {
- return nil, err
- }
-
- params := requestParams{
- "poi_id": poiID,
- "status": status,
- }
-
- res := new(CommonError)
- if err := postJSON(url, params, res); err != nil {
- return nil, err
- }
-
- return res, nil
- }
|