offiaccount

package
v0.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 9, 2021 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ClearQuotaUrl       = "/cgi-bin/clear_quota?access_token="
	ApiDomainIpUrl      = "/cgi-bin/get_api_domain_ip?access_token="
	CheckNetworkUrl     = "/cgi-bin/callback/check?access_token="
	UserInfoUrl         = "/cgi-bin/user/info?access_token="
	UserInfoBatchGetUrl = "/cgi-bin/user/info/batchget?access_token="

	SnsUserinfoUrl        = "/sns/userinfo"
	SnsAccessTokenUrl     = "/sns/oauth2/access_token?appid=%s&grant_type=authorization_code"
	OpenSnsAccessTokenUrl = "/sns/oauth2/component/access_token?appid=%s&grant_type=authorization_code"
	QrcodeUrl             = "/cgi-bin/qrcode/create?access_token="
)

此项目所有开发接口文档来源于:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

Variables

This section is empty.

Functions

func EventLocationMessageAdapter

func EventLocationMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter

EventLocationMessageAdapter 上报地理位置事件处理适配器

func EventMessageAdapter

func EventMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter

EventMessageAdapter 相关事件处理适配器

func EventSubscribeMessageAdapter

func EventSubscribeMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter

EventSubscribeMessageAdapter 用户相关关注事件处理适配器

func ImageMessageAdapter

func ImageMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter

ImageMessageAdapter 图片消息处理适配器

func LinkMessageAdapter

func LinkMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter

LinkMessageAdapter 链接消息处理适配器

func LocationMessageAdapter

func LocationMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter

LocationMessageAdapter 地理位置消息处理适配器

func TextMessageAdapter

func TextMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter

TextMessageAdapter 文本消息处理适配器

func VideoMessageAdapter

func VideoMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter

VideoMessageAdapter 视频消息/小视频消息处理适配器

func VoiceMessageAdapter

func VoiceMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter

VoiceMessageAdapter 语音消息处理适配器

Types

type ActionType

type ActionType string

ActionType 检测动作

const (
	DnsActionType  ActionType = "dns"  // dns(做域名解析)
	PingActionType ActionType = "ping" // ping(做ping检测
	AllActionType  ActionType = "all"  // all(dns和ping都做)
)

type Article

type Article struct {
	Title       string `xml:"Title,omitempty"`       // 图文消息标题
	Description string `xml:"Description,omitempty"` // 图文消息描述
	PicURL      string `xml:"PicUrl,omitempty"`      // 图片链接, 支持JPG, PNG格式, 较好的效果为大图360*200, 小图200*200
	URL         string `xml:"Url,omitempty"`         // 点击图文消息跳转链接
}

Article 回复图文消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>1</ArticleCount>
<Articles>
  <item>
    <Title><![CDATA[title1]]></Title>
    <Description><![CDATA[description1]]></Description>
    <PicUrl><![CDATA[picurl]]></PicUrl>
    <Url><![CDATA[url]]></Url>
  </item>
</Articles>

</xml>

参数 是否必须 说明 ToUserName 是 接收方帐号(收到的OpenID) FromUserName 是 开发者微信号 CreateTime 是 消息创建时间 (整型) MsgType 是 消息类型,图文为news ArticleCount 是 图文消息个数;当用户发送文本、图片、语音、视频、图文、地理位置这六种消息时,开发者只能回复1条图文消息;其余场景最多可回复8条图文消息 Articles 是 图文消息信息,注意,如果图文数超过限制,则将只发限制内的条数 Title 是 图文消息标题 Description 是 图文消息描述 PicUrl 是 图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200 Url 是 点击图文消息跳转链接 图文消息里的 Article

type BaseEventMessage

type BaseEventMessage struct {
	MessageHeader
	Event string `xml:"Event"` // 事件类型,subscribe(订阅)、unsubscribe(取消订阅)、SCAN(扫码)、LOCATION(地理位置上报)、CLICK(自定义菜单)、VIEW(点击菜单跳转链接时)
}

type BaseUserInfo

type BaseUserInfo struct {
	Openid     string   `json:"openid"`     // 用户的标识,对当前公众号唯一
	Nickname   string   `json:"nickname"`   // 用户的昵称
	Sex        int      `json:"sex"`        // 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
	Province   string   `json:"province"`   // 用户所在省份
	City       string   `json:"city"`       // 用户所在城市
	Country    string   `json:"country"`    // 用户所在国家
	HeadImgUrl string   `json:"headimgurl"` // 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
	Language   string   `json:"language"`   // 用户的语言,简体中文为zh_CN
	Unionid    string   `json:"unionid"`    // 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
	Privilege  []string `json:"privilege"`  //用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
}

type BaseUserInfoModel

type BaseUserInfoModel struct {
	common.ErrorModel
	BaseUserInfo
}

type CheckNetworkModel

type CheckNetworkModel struct {
	common.ErrorModel
	Dns []struct {
		Ip           string `json:"ip"`
		RealOperator string `json:"real_operator"`
	} `json:"dns"`
	Ping []struct {
		Ip           string `json:"ip"`
		FromOperator string `json:"from_operator"`
		PackageLoss  string `json:"package_loss"`
		Time         string `json:"time"`
	} `json:"ping"`
}

CheckNetworkModel 网络检测返回Json格式

{ "dns": [

      {
"ip":"111.161.64.40",
"real_operator":"UNICOM"
      },
      {
"ip":"111.161.64.48",
"real_operator":"UNICOM"
      }
  ],

"ping": [

       {
 "ip":"111.161.64.40",
 "from_operator":"UNICOM",

 "package_loss":"0%",
 "time":"23.079ms"
       },
       {
 "ip":"111.161.64.48",
 "from_operator":"UNICOM",
 "package_loss":"0%",
 "time":"21.434ms"
       }
   ]
}

参数说明

参数 说明 dns dns结果列表 dns.ip 解析出来的ip dns.real_operator ip对应的运营商 ping ping结果列表 ping.ip ping的ip,执行命令为ping ip –c 1-w 1 -q ping.from_operator ping的源头的运营商,由请求中的check_operator控制 ping.package_loss ping的丢包率,0%表示无丢包,100%表示全部丢包。因为目前仅发送一个ping包,因此取值仅有0%或者100%两种可能。 ping.time ping的耗时,取ping结果的avg耗时。

type CheckOperator

type CheckOperator string

CheckOperator 指定平台从某个运营商进行检测,允许的值:CHINANET(电信出口)、UNICOM(联通出口)、CAP(腾讯自建出口)、DEFAULT(根据ip来选择运营商)

const (
	ChinanetCheckOperator CheckOperator = "CHINANET" // dns(做域名解析)
	UnicomCheckOperator   CheckOperator = "UNICOM"   // ping(做ping检测
	CapCheckOperator      CheckOperator = "CAP"      // all(dns和ping都做)
	DefaultCheckOperator  CheckOperator = "DEFAULT"  // all(dns和ping都做)
)

type EventLocationMessage

type EventLocationMessage struct {
	BaseEventMessage
	Latitude  float64 `xml:"Latitude"`  // 地理位置纬度
	Longitude float64 `xml:"Longitude"` // 地理位置经度
	Precision float64 `xml:"Precision"` // 地理位置精度
}

EventLocationMessage 上报地理位置事件 用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,或在进入会话后每5秒上报一次地理位置,公众号可以在公众平台网站中修改以上设置。上报地理位置时,微信会将上报地理位置事件推送到开发者填写的URL。 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[LOCATION]]></Event>
<Latitude>23.137466</Latitude>
<Longitude>113.352425</Longitude>
<Precision>119.385040</Precision>

</xml>

type EventMessage

type EventMessage struct {
	BaseEventMessage
	EventKey string `xml:"EventKey"` // 事件KEY值,qrscene_为前缀,后面为二维码的参数值
}

EventMessage 自定义菜单事件 用户点击自定义菜单后,微信会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报。 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[EVENTKEY]]></EventKey>

</xml> 点击菜单跳转链接时的事件推送 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[VIEW]]></Event>
<EventKey><![CDATA[www.qq.com]]></EventKey>

</xml>

type EventSubscribeMessage

type EventSubscribeMessage struct {
	EventMessage
	Ticket string `xml:"Ticket"` // 二维码的ticket,可用来换取二维码图片
}

EventSubscribeMessage 事件消息 关注/取消关注/扫描带参数二维码事件(消息类型,event) <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>

</xml> 扫描带参数二维码事件 1.用户未关注时,进行关注后的事件推送 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[qrscene_123123]]></EventKey>
<Ticket><![CDATA[TICKET]]></Ticket>

</xml> 2. 用户已关注时的事件推送 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[SCENE_VALUE]]></EventKey>
<Ticket><![CDATA[TICKET]]></Ticket>

</xml>

type ImageMessage

type ImageMessage struct {
	MessageHeader
	MsgId   int64  `xml:"MsgId"`   // 消息id,64位整型
	MediaId string `xml:"MediaId"` // 消息媒体id
	PicUrl  string `xml:"PicUrl"`  // 图片链接(由系统生成)
}

ImageMessage 图片消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<PicUrl><![CDATA[this is a url]]></PicUrl>
<MediaId><![CDATA[media_id]]></MediaId>
<MsgId>1234567890123456</MsgId>

</xml>

type ImageResponse

type ImageResponse struct {
	XMLName struct{} `xml:"xml"`
	MessageHeader
	Image struct {
		MediaId string `xml:"MediaId"` // 通过素材管理接口上传多媒体文件得到 MediaId
	} `xml:"Image"`
}

ImageResponse 回复图片消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
  <MediaId><![CDATA[media_id]]></MediaId>
</Image>

</xml>

参数 是否必须 说明 ToUserName 是 接收方帐号(收到的OpenID) FromUserName 是 开发者微信号 CreateTime 是 消息创建时间 (整型) MsgType 是 消息类型,图片为image MediaId 是 通过素材管理中的接口上传多媒体文件,得到的id。

func NewImageResponse

func NewImageResponse(to, from, mediaId string) *ImageResponse

type IpListModel

type IpListModel struct {
	common.ErrorModel
	IpList []string `json:"ip_list"`
}

IpListModel 获取微信服务器IP地址返回说明

正常情况下,微信会返回下述JSON数据包给公众号:

{"ip_list": ["127.0.0.1","127.0.0.2","101.226.103.0/25" ]} 参数 说明 ip_list 微信服务器IP地址列表

type JsApiTicketModel

type JsApiTicketModel struct {
	common.ErrorModel
	Ticket  string `json:"ticket"`
	Expires int    `json:"expires_in"`
}

JsApiTicketModel 获取jsApiTicket返回信息

type LinkMessage

type LinkMessage struct {
	MessageHeader
	MsgId       int64  `xml:"MsgId"`       // 消息id,64位整型
	Title       string `xml:"Title"`       // 消息标题
	Description string `xml:"Description"` // 消息描述
	Url         string `xml:"Url"`         // 消息链接
}

LinkMessage 链接消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType><![CDATA[link]]></MsgType>
<Title><![CDATA[公众平台官网链接]]></Title>
<Description><![CDATA[公众平台官网链接]]></Description>
<Url><![CDATA[url]]></Url>
<MsgId>1234567890123456</MsgId>

</xml>

type LocationMessage

type LocationMessage struct {
	MessageHeader
	MsgId     int64   `xml:"MsgId"`      // 消息id,64位整型
	Latitude  float64 `xml:"Location_X"` // 地理位置纬度
	Longitude float64 `xml:"Location_Y"` // 地理位置经度
	Scale     float64 `xml:"Scale"`      // 地图缩放大小
	Label     float64 `xml:"Label"`      // 地理位置信息
}

LocationMessage 地理位置消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>23.134521</Location_X>
<Location_Y>113.358803</Location_Y>
<Scale>20</Scale>
<Label><![CDATA[位置信息]]></Label>
<MsgId>1234567890123456</MsgId>

</xml>

type MessageHeader

type MessageHeader struct {
	ToUserName   string         `xml:"ToUserName"`   // 开发者微信号
	FromUserName string         `xml:"FromUserName"` // 发送方帐号 (OpenID)
	CreateTime   int64          `xml:"CreateTime"`   // 消息创建时间
	MsgType      common.MsgType `xml:"MsgType"`      // 消息类型
}

MessageHeader 公众号消息 See also https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html

func NewMessageHeader

func NewMessageHeader(to, from string, msgType common.MsgType) MessageHeader

type MusicResponse

type MusicResponse struct {
	XMLName struct{} `xml:"xml"`
	MessageHeader
	Music struct {
		Title        string `xml:"Title,omitempty"        json:"Title,omitempty"`       // 音乐标题
		Description  string `xml:"Description,omitempty"  json:"Description,omitempty"` // 音乐描述
		MusicURL     string `xml:"MusicUrl"               json:"MusicUrl"`              // 音乐链接
		HQMusicURL   string `xml:"HQMusicUrl"             json:"HQMusicUrl"`            // 高质量音乐链接, WIFI环境优先使用该链接播放音乐
		ThumbMediaId string `xml:"ThumbMediaId"           json:"ThumbMediaId"`          // 通过素材管理接口上传多媒体文件得到 ThumbMediaId
	} `xml:"Music"`
}

MusicResponse 回复音乐消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
<Music>
  <Title><![CDATA[TITLE]]></Title>
  <Description><![CDATA[DESCRIPTION]]></Description>
  <MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl>
  <HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl>
  <ThumbMediaId><![CDATA[media_id]]></ThumbMediaId>
</Music>

</xml>

参数 是否必须 说明 ToUserName 是 接收方帐号(收到的OpenID) FromUserName 是 开发者微信号 CreateTime 是 消息创建时间 (整型) MsgType 是 消息类型,音乐为music Title 否 音乐标题 Description 否 音乐描述 MusicURL 否 音乐链接 HQMusicUrl 否 高质量音乐链接,WIFI环境优先使用该链接播放音乐 ThumbMediaId 是 缩略图的媒体id,通过素材管理中的接口上传多媒体文件,得到的id

func NewMusicResponse

func NewMusicResponse(to, from, title, description, musicURL, hqMusicURL, mediaId string) *MusicResponse

type NewsResponse

type NewsResponse struct {
	XMLName struct{} `xml:"xml"`
	MessageHeader
	ArticleCount int       `xml:"ArticleCount"`            // 图文消息个数, 限制为10条以内
	Articles     []Article `xml:"Articles>item,omitempty"` // 多条图文消息信息, 默认第一个item为大图, 注意, 如果图文数超过10, 则将会无响应
}

func NewNewsResponse

func NewNewsResponse(to, from string, articles []Article) *NewsResponse

type OfficialAccounts

type OfficialAccounts struct {
	*common.WechatApi
}

func NewOfficialAccounts

func NewOfficialAccounts(cp cache.Provider, log *log.Slf4g, cfg OfficialAccountsConfig) *OfficialAccounts

func (*OfficialAccounts) AccessTokenByCode

func (oa *OfficialAccounts) AccessTokenByCode(code string, componentAppId string) (s SnsAccessTokenModel, err error)

AccessTokenByCode 通过code换取网页授权access_token https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

func (*OfficialAccounts) ApiDomainIp

func (oa *OfficialAccounts) ApiDomainIp() (t bool, ilm IpListModel)

ApiDomainIp 获取微信服务器IP地址 如果公众号基于安全等考虑,需要获知微信服务器的IP地址列表,以便进行相关限制,可以通过该接口获得微信服务器IP地址列表或者IP网段信息。

由于出口IP及入口IP可能存在变动,建议用户每天请求接口1次,以便于及时更新IP列表。为了避免造成单点故障,强烈建议用户不要长期使用旧的IP列表作为api.weixin.qq.com的访问入口。

1. 获取微信API接口 IP地址 使用固定IP访问api.weixin.qq.com时,请开发者注意运营商适配,跨运营商访问可能会存在高峰期丢包问题。 API接口IP即api.weixin.qq.com的解析地址,由开发者调用微信侧的接入IP。

接口调用请求说明

http请求方式: GET https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=ACCESS_TOKEN

参数说明

参数 是否必须 说明 access_token 是 公众号的access_token

返回详情: IpListModel

func (*OfficialAccounts) CheckNetwork

func (oa *OfficialAccounts) CheckNetwork(action ActionType, checkOperator CheckOperator) (t bool, cnm CheckNetworkModel)

CheckNetwork 网络检测 为了帮助开发者排查回调连接失败的问题,提供这个网络检测的API。它可以对开发者URL做域名解析,然后对所有IP进行一次ping操作,得到丢包率和耗时。

HTTP Post请求: https://api.weixin.qq.com/cgi-bin/callback/check?access_token=ACCESS_TOKEN

请求JSON格式:

{
   "action": "all",
   "check_operator": "DEFAULT"
}

参数说明

参数 是否必须 说明 action 是 执行的检测动作,允许的值:dns(做域名解析)、ping(做ping检测)、all(dns和ping都做) check_operator 是 指定平台从某个运营商进行检测,允许的值:CHINANET(电信出口)、UNICOM(联通出口)、CAP(腾讯自建出口)、DEFAULT(根据ip来选择运营商)

返回详情: CheckNetworkModel

func (*OfficialAccounts) ClearQuota

func (oa *OfficialAccounts) ClearQuota(appId string) (t bool, em common.ErrorModel)

ClearQuota 公众号调用或第三方平台帮公众号调用对公众号的所有api调用(包括第三方帮其调用)次数进行清零:

HTTP请求:POST HTTP调用: https://api.weixin.qq.com/cgi-bin/clear_quota?access_token=ACCESS_TOKEN

调用示例:

{ “appid”:“APPID” } 参数说明:

参数 是否必须 说明 access_token 是 调用接口凭据 appid 是 公众号的APPID

返回详情: common.ErrorModel

func (*OfficialAccounts) CreateLimitQrCode

func (oa *OfficialAccounts) CreateLimitQrCode(sceneId int) (qr *QrCodeResponse, err error)

CreateLimitQrCode 永久二维码请求说明

http请求方式: POST URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN POST数据格式:json POST数据例子:{"action_name": "QR_LIMIT_SCENE","action_info": {"scene": {"scene_id": 123}}} 或者也可以使用 以下POST数据创建字符串形式的二维码参数:{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

func (*OfficialAccounts) CreateQrCode

func (oa *OfficialAccounts) CreateQrCode(sceneId int, expireSeconds int) (qr *QrCodeResponse, err error)

CreateQrCode 临时二维码请求说明

http请求方式: POST URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN POST数据格式:json POST数据例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}} 或者也可以使用 以下POST数据创建字符串形式的二维码参数:{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

func (*OfficialAccounts) JsApiTicket

func (oa *OfficialAccounts) JsApiTicket() (jst JsApiTicketModel, err error)

JsApiTicket GetJsApiTicket 获取 jsapi_ticket 用于 js_sdk 验证 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62

func (*OfficialAccounts) SnsUserInfo

func (oa *OfficialAccounts) SnsUserInfo(model SnsAccessTokenModel) (user *BaseUserInfoModel, err error)

SnsUserInfo 授权后拉取用户信息:网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

func (*OfficialAccounts) UserInfo

func (oa *OfficialAccounts) UserInfo(openId, lang string) (t bool, uim UserInfoModel)

UserInfo 获取用户基本信息(UnionID机制)

在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。

请注意,如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。

UnionID机制说明:

开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。

请注意: 20年6月8日起,用户关注来源“微信广告(ADD_SCENE_WECHAT_ADVERTISEMENT)”从“其他(ADD_SCENE_OTHERS)”中拆分给出。

获取用户基本信息(包括UnionID机制)

开发者可通过OpenID来获取用户基本信息。请使用https协议。

接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

参数说明

参数 是否必须 说明 access_token 是 调用接口凭证 openid 是 普通用户的标识,对当前公众号唯一 lang 否 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

返回详情: UserInfoModel

func (*OfficialAccounts) UserInfoBatchGet

func (oa *OfficialAccounts) UserInfoBatchGet(uip []UserInfoParm) (t bool, uil UserInfoListModel)

UserInfoBatchGet 批量获取用户基本信息

开发者可通过该接口来批量获取用户基本信息。最多支持一次拉取100条。

接口调用请求说明

http请求方式: POST https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN

POST数据示例

{
   "user_list": [
       {
           "openid": "otvxTs4dckWG7imySrJd6jSi0CWE",
           "lang": "zh_CN"
       },
       {
           "openid": "otvxTs_JZ6SEiP0imdhpi50fuSZg",
           "lang": "zh_CN"
       }
   ]
}

参数说明

参数 是否必须 说明 openid 是 用户的标识,对当前公众号唯一 lang 否 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN

返回详情: UserInfoListModel

func (*OfficialAccounts) UserTags

func (oa *OfficialAccounts) UserTags()

type OfficialAccountsConfig

type OfficialAccountsConfig struct {
	OpenPlatform bool   `json:"openPlatform"`
	AppId        string `json:"appId"`
	Secret       string `json:"secret"`
	Token        string `json:"token"`
	AesKey       string `json:"aesKey"`
}

type OfficialAccountsReceivingAdapter

type OfficialAccountsReceivingAdapter interface {
	TextAdapter() common.Adapter
	ImageMessageAdapter() common.Adapter
	VoiceMessageAdapter() common.Adapter
	VideoMessageAdapter() common.Adapter
	LocationMessageAdapter() common.Adapter
	LinkMessageAdapter() common.Adapter
	EventMessageAdapter() common.Adapter
	EventSubscribeMessageAdapter() common.Adapter
	EventLocationMessageAdapter() common.Adapter
}

OfficialAccountsReceivingAdapter 以下为公众号(OA)

type QrCodeResponse

type QrCodeResponse struct {
	common.ErrorModel
	Ticket        string `json:"ticket"`         // 用于获取二维码图片的 ticket
	ExpireSeconds int    `json:"expire_seconds"` //过期时间,秒
	Url           string `json:"url"`            //二维码地址
}

QrCodeResponse 创建临时的二维码返回信息

type SnsAccessTokenModel

type SnsAccessTokenModel struct {
	common.ErrorModel
	AccessToken  string `json:"access_token"`  //代公众号调用接口凭证
	Expires      int    `json:"expires_in"`    // 接口调用凭证超时时间,单位(秒)
	RefreshToken string `json:"refresh_token"` // 用户刷新 access_token
	Openid       string `json:"openid"`        // 授权用户唯一标识
	Scope        string `json:"scope"`         // 用户授权的作用域,使用逗号(,)分隔
}

SnsAccessTokenModel code换取网页授权access_token返回信息

type SubscribeScene

type SubscribeScene string
const (
	AddSceneSearch              SubscribeScene = "ADD_SCENE_SEARCH"               // 公众号搜索
	AddSceneAccountMigration    SubscribeScene = "ADD_SCENE_ACCOUNT_MIGRATION"    // 公众号迁移
	AddSceneProfileCard         SubscribeScene = "ADD_SCENE_PROFILE_CARD"         // 名片分享
	AddSceneQrcode              SubscribeScene = "ADD_SCENE_QR_CODE"              // 扫描二维码
	AddSceneProfileLink         SubscribeScene = "ADD_SCENE_PROFILE_LINK"         // 图文页内名称点击
	AddSceneProfileItem         SubscribeScene = "ADD_SCENE_PROFILE_ITEM"         // 图文页右上角菜单
	AddScenePaid                SubscribeScene = "ADD_SCENE_PAID"                 // 支付后关注
	AddSceneWechatAdvertisement SubscribeScene = "ADD_SCENE_WECHAT_ADVERTISEMENT" // 微信广告
	AddSceneOthers              SubscribeScene = "ADD_SCENE_OTHERS"               // 其他
)

type TextMessage

type TextMessage struct {
	MessageHeader
	MsgId   int64  `xml:"MsgId"`   // 消息id,64位整型
	Content string `xml:"Content"` // 文本消息内容
}

TextMessage 文本消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>

</xml>

type TextResponse

type TextResponse struct {
	XMLName struct{} `xml:"xml"`
	MessageHeader
	Content string `xml:"Content"` // 文本消息内容
}

TextResponse 回复文本消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>

</xml> 参数 是否必须 描述 ToUserName 是 接收方帐号(收到的OpenID) FromUserName 是 开发者微信号 CreateTime 是 消息创建时间 (整型) MsgType 是 消息类型,文本为text Content 是 回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)

func NewTextResponse

func NewTextResponse(to, from, content string) *TextResponse

type UserInfo

type UserInfo struct {
	BaseUserInfo
	Subscribe      int            `json:"subscribe"`       // 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
	SubscribeTime  string         `json:"subscribe_time"`  // 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
	Remark         string         `json:"remark"`          // 公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注
	Groupid        uint32         `json:"groupid"`         // 用户所在的分组ID(兼容旧的用户分组接口)
	TagIdList      []int          `json:"tagid_list"`      // 用户被打上的标签ID列表
	SubscribeScene SubscribeScene `json:"subscribe_scene"` // 返回用户关注的渠道来源
	QrScene        int            `json:"qr_scene"`        // 二维码扫码场景(开发者自定义)
	QrSceneStr     string         `json:"qr_scene_str"`    // 二维码扫码场景描述(开发者自定义)
}

type UserInfoListModel

type UserInfoListModel struct {
	common.ErrorModel
	UserInfoList []UserInfo `json:"user_info_list"`
}

UserInfoListModel 批量获取用户基本信息返回说明

正常情况下,微信会返回下述JSON数据包给公众号(示例中为一次性拉取了2个openid的用户基本信息,第一个是已关注的,第二个是未关注的):

{
  "user_info_list": [
      {
          "subscribe": 1,
          "openid": "otvxTs4dckWG7imySrJd6jSi0CWE",
          "nickname": "iWithery",
          "sex": 1,
          "language": "zh_CN",
          "city": "揭阳",
          "province": "广东",
          "country": "中国",
          "headimgurl": "http://thirdwx.qlogo.cn/mmopen/xbIQx1GRqdvyqkMMhEaGOX802l1CyqMJNgUzKP8MeAeHFicRDSnZH7FY4XB7p8XHXIf6uJA2SCunTPicGKezDC4saKISzRj3nz/0",
         "subscribe_time": 1434093047,
          "unionid": "oR5GjjgEhCMJFyzaVZdrxZ2zRRF4",
          "remark": "",
          "groupid": 0,
          "tagid_list":[128,2],
          "subscribe_scene": "ADD_SCENE_QR_CODE",
          "qr_scene": 98765,
          "qr_scene_str": ""
     },
      {
          "subscribe": 0,
          "openid": "otvxTs_JZ6SEiP0imdhpi50fuSZg"
      }
  ]
}

type UserInfoModel

type UserInfoModel struct {
	common.ErrorModel
	UserInfo
}

UserInfoModel 获取用户基本信息返回说明

正常情况下,微信会返回下述JSON数据包给公众号:

{
	"subscribe": 1,
	"openid":"o6_bmjrPTlm6_2sgVt7hMZOPfL2M",
	"nickname":"Band",
	"sex": 1,
	"language":"zh_CN",
	"city":"广州",
	"province":"广东",
	"country":"中国",
	"headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
	"subscribe_time": 1382694957,
	"unionid":" o6_bmasdasdsad6_2sgVt7hMZOPfL"
	"remark":"",
	"groupid": 0,
	"tagid_list":[128,2],
	"subscribe_scene":"ADD_SCENE_QR_CODE",
	"qr_scene": 98765,
	"qr_scene_str":""
}

参数说明

type UserInfoParm

type UserInfoParm struct {
	OpenId string `json:"openid"`
	Lang   string `json:"lang"`
}

type VideoMessage

type VideoMessage struct {
	MessageHeader
	MsgId        int64  `xml:"MsgId"`        // 消息id,64位整型
	MediaId      string `xml:"MediaId"`      // 消息媒体id
	ThumbMediaId string `xml:"ThumbMediaId"` // 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据
}

VideoMessage 视频消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
<MsgId>1234567890123456</MsgId>

</xml> 小视频消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[shortvideo]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
<MsgId>1234567890123456</MsgId>

</xml>

type VideoResponse

type VideoResponse struct {
	XMLName struct{} `xml:"xml"`
	MessageHeader
	Video struct {
		MediaId     string `xml:"MediaId"`     // 通过素材管理接口上传多媒体文件得到 MediaId
		Title       string `xml:"Title"`       // 视频消息的标题, 可以为空
		Description string `xml:"Description"` // 视频消息的描述, 可以为空
	} `xml:"Video"`
}

VideoResponse 回复视频消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<Video>
  <MediaId><![CDATA[media_id]]></MediaId>
  <Title><![CDATA[title]]></Title>
  <Description><![CDATA[description]]></Description>
</Video>

</xml>

参数 是否必须 说明 ToUserName 是 接收方帐号(收到的OpenID) FromUserName 是 开发者微信号 CreateTime 是 消息创建时间 (整型) MsgType 是 消息类型,视频为video MediaId 是 通过素材管理中的接口上传多媒体文件,得到的id Title 否 视频消息的标题 Description 否 视频消息的描述

func NewVideoResponse

func NewVideoResponse(to, from, mediaId, title, description string) *VideoResponse

type VoiceMessage

type VoiceMessage struct {
	MessageHeader
	MsgId       int64  `xml:"MsgId"`       // 消息id,64位整型
	MediaId     string `xml:"MediaId"`     // 消息媒体id
	Format      string `xml:"Format"`      // 语音格式,如amr,speex等
	Recognition string `xml:"Recognition"` // 语音识别结果,UTF8编码(需要开通语音识别)
}

VoiceMessage 语音消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<Format><![CDATA[Format]]></Format>
<MsgId>1234567890123456</MsgId>

</xml>

type VoiceResponse

type VoiceResponse struct {
	XMLName struct{} `xml:"xml"`
	MessageHeader
	Voice struct {
		MediaId string `xml:"MediaId"` // 通过素材管理接口上传多媒体文件得到 MediaId
	} `xml:"Voice"`
}

VoiceResponse 回复语音消息 <xml>

<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<Voice>
  <MediaId><![CDATA[media_id]]></MediaId>
</Voice>

</xml>

参数 是否必须 说明 ToUserName 是 接收方帐号(收到的OpenID) FromUserName 是 开发者微信号 CreateTime 是 消息创建时间戳 (整型) MsgType 是 消息类型,语音为voice MediaId 是 通过素材管理中的接口上传多媒体文件,得到的id

func NewVoiceResponse

func NewVoiceResponse(to, from, mediaId string) *VoiceResponse

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL