diff --git a/src/types/received-event.ts b/src/types/received-event.ts new file mode 100644 index 0000000..8a4382d --- /dev/null +++ b/src/types/received-event.ts @@ -0,0 +1,114 @@ +/** + * 微信公众号/服务号「接收事件推送」类型定义 + * + * @remarks + * - 对应微信官方XML信息结构 + * - 所有事件类型继承自 {@link WechatReceivedBaseEvent} + * - 通过 {@link Event} 字段区分不同事件类型 + * @see 微信官方文档: https://developers.weixin.qq.com/doc/service/guide/product/message/Receiving_event_pushes.html + * + * @packageDocumentation + */ + +/** + * 「接收事件推送」事件类型字面量联合类型 + * + * @remarks + * 可用于类型收窄 + */ +export type WechatReceivedEventType = | "subscribe" + | "unsubscribe" + | "SCAN" + | "LOCATION" + | "CLICK" + | "VIEW" + +/** + * 「接收事件推送」基础类型定义 + * + * @remarks + * 所有事件类型均包含这些公共字段 + */ +export interface WechatReceivedBaseEvent { + /** 开发者微信号 */ + ToUserName: string; + /** 发送方帐号(一个OpenID) */ + FromUserName: string; + /** 消息创建时间 (整型) */ + CreateTime: number; + /** 消息类型,event */ + MsgType: "event"; + /** 事件类型 + * + * @remarks + * 在具体事件类型中收窄为字面量类型(如"subscribe","CLICK"等) + */ + Event: string; +} + +/** + * 「接收事件推送」用户未关注时,进行关注后的事件推送 + */ +export interface WechatReceivedSubscribeEvent extends WechatReceivedBaseEvent { + /** 事件类型: subscribe */ + Event: "subscribe"; + /** 事件KEY值,qrscene_为前缀,后面为二维码的参数值 */ + EventKey?: string; + /** 二维码的ticket,可用来换取二维码图片 */ + Ticket?: string; +} + +/** + * 「接收事件推送」用户已关注时的事件推送 + */ +export interface WechatReceivedScanEvent extends WechatReceivedBaseEvent { + /** 事件类型: SCAN */ + Event: "SCAN"; + /** 事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id */ + EventKey: string; + /** 二维码的ticket,可用来换取二维码图片 */ + Ticket: string; +} + +/** + * 「接收事件推送」上报地理位置事件 + */ +export interface WechatReceivedLocationEvent extends WechatReceivedBaseEvent { + /** 事件类型: LOCATION */ + Event: "LOCATION"; + /** 地理位置纬度 */ + Latitude: string; + /** 地理位置经度 */ + Longitude: string; + /** 地理位置精度 */ + Precision: string; +} + +/** + * 「接收事件推送」自定义菜单点击事件 + */ +export interface WechatReceivedClickEvent extends WechatReceivedBaseEvent { + /** 事件类型: CLICK */ + Event: "CLICK"; + /** 事件KEY值,与自定义菜单接口中KEY值对应 */ + EventKey: string; +} + +/** + * 「接收事件推送」自定义菜单跳转链接事件 + */ +export interface WechatReceivedViewEvent extends WechatReceivedBaseEvent { + /** 事件类型: VIEW */ + Event: "VIEW"; + /** 事件KEY值,设置的跳转URL */ + EventKey: string; +} + +/** + * 「接收事件推送」类型联合类型 + */ +export type WechatReceivedEvent = WechatReceivedSubscribeEvent + | WechatReceivedScanEvent + | WechatReceivedLocationEvent + | WechatReceivedClickEvent + | WechatReceivedViewEvent; \ No newline at end of file