Documentation ¶
Index ¶
- Constants
- func EventLocationMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter
- func EventMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter
- func EventSubscribeMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter
- func ImageMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter
- func LinkMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter
- func LocationMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter
- func TextMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter
- func VideoMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter
- func VoiceMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter
- type ActionType
- type Article
- type BaseEventMessage
- type BaseUserInfo
- type BaseUserInfoModel
- type CheckNetworkModel
- type CheckOperator
- type EventLocationMessage
- type EventMessage
- type EventSubscribeMessage
- type ImageMessage
- type ImageResponse
- type IpListModel
- type JsApiTicketModel
- type LinkMessage
- type LocationMessage
- type MessageHeader
- type MusicResponse
- type NewsResponse
- type OfficialAccounts
- func (oa *OfficialAccounts) AccessTokenByCode(code string, componentAppId string) (s SnsAccessTokenModel, err error)
- func (oa *OfficialAccounts) ApiDomainIp() (t bool, ilm IpListModel)
- func (oa *OfficialAccounts) CheckNetwork(action ActionType, checkOperator CheckOperator) (t bool, cnm CheckNetworkModel)
- func (oa *OfficialAccounts) ClearQuota(appId string) (t bool, em common.ErrorModel)
- func (oa *OfficialAccounts) CreateLimitQrCode(sceneId int) (qr *QrCodeResponse, err error)
- func (oa *OfficialAccounts) CreateQrCode(sceneId int, expireSeconds int) (qr *QrCodeResponse, err error)
- func (oa *OfficialAccounts) JsApiTicket() (jst JsApiTicketModel, err error)
- func (oa *OfficialAccounts) SnsUserInfo(model SnsAccessTokenModel) (user *BaseUserInfoModel, err error)
- func (oa *OfficialAccounts) UserInfo(openId, lang string) (t bool, uim UserInfoModel)
- func (oa *OfficialAccounts) UserInfoBatchGet(uip []UserInfoParm) (t bool, uil UserInfoListModel)
- func (oa *OfficialAccounts) UserTags()
- type OfficialAccountsConfig
- type OfficialAccountsReceivingAdapter
- type QrCodeResponse
- type SnsAccessTokenModel
- type SubscribeScene
- type TextMessage
- type TextResponse
- type UserInfo
- type UserInfoListModel
- type UserInfoModel
- type UserInfoParm
- type VideoMessage
- type VideoResponse
- type VoiceMessage
- type VoiceResponse
Constants ¶
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 ¶
EventMessageAdapter 相关事件处理适配器
func EventSubscribeMessageAdapter ¶
func EventSubscribeMessageAdapter(call func(common.CallbackModel, common.Adapter) string) common.Adapter
EventSubscribeMessageAdapter 用户相关关注事件处理适配器
func ImageMessageAdapter ¶
ImageMessageAdapter 图片消息处理适配器
func LinkMessageAdapter ¶
LinkMessageAdapter 链接消息处理适配器
func LocationMessageAdapter ¶
LocationMessageAdapter 地理位置消息处理适配器
func TextMessageAdapter ¶
TextMessageAdapter 文本消息处理适配器
func VideoMessageAdapter ¶
VideoMessageAdapter 视频消息/小视频消息处理适配器
func VoiceMessageAdapter ¶
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 ¶
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 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 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