얼마 전 위챗은 개인화된 메뉴 인터페이스를 출시했고, Senparc.Weixin SDK도 동시에 업데이트되었습니다.
이 업데이트는 Senparc.Weixin.MP 버전을 Senparc.Weixin 버전 4.5.4에 의존하는 v13.5.2로 업그레이드합니다. .NET4.5(master) / .NET4.0 브랜치가 동시에 업데이트되었습니다.
개인화 메뉴의 대규모 변경으로 인해 전체 메뉴 인터페이스가 지금까지 가장 큰 영역으로 재구성되었습니다(하위 호환 가능).
이전 사용자 정의 메뉴와 비교하여 현재 메뉴 관련 기능은 파일 구조에 따라 포괄적으로 구성되었습니다.
메뉴 인터페이스는 모두 CommonAPIs/Menu 디렉터리로 분류되었습니다. CommonApi 섹션에는
文件名 | 说明 |
CommonApi.Menu.Common.cs | 菜单公共方法 |
CommonApi.Menu.Conditional.cs | 个性化菜单 |
CommonApi.Menu.Custom.cs | 普通自定义菜单 |
메뉴 인터페이스 파일
사용자 정의 메뉴 인터페이스는 이전 버전과의 호환성이 보장되었습니다. 과거에 사용자 정의 메뉴 기능을 개발한 프로젝트가 있다면 안심하고 업그레이드할 수 있습니다.
개인 메뉴 클래스의 내용은 다음과 같습니다.
/*---------------------------------------------------------------- Copyright (C) 2015 Senparc 文件名:CommonApi.Menu.Conditional 文件功能描述:个性化自定义菜单接口 创建标识:Senparc - 20151222 修改标识:Senparc - 20151222 修改描述:v13.5.1 添加个性化菜单接口 ----------------------------------------------------------------*/ /* API:http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html */ using Senparc.Weixin.Entities; using Senparc.Weixin.Helpers; using Senparc.Weixin.MP.Entities; using Senparc.Weixin.MP.Entities.Menu; namespace Senparc.Weixin.MP.CommonAPIs { public partial class CommonApi { /// <summary> /// 创建个新华菜单 /// </summary> /// <param name="accessTokenOrAppId">AccessToken或AppId。当为AppId时,如果AccessToken错误将自动获取一次。当为null时,获取当前注册的第一个AppId。</param> /// <param name="buttonData">菜单内容</param> /// <returns></returns> public static CreateMenuConditionalResult CreateMenuConditional(string accessTokenOrAppId, ConditionalButtonGroup buttonData, int timeOut = Config.TIME_OUT) { return ApiHandlerWapper.TryCommonApi(accessToken => { var urlFormat = "https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token={0}"; var jsonSetting = new JsonSetting(true); return CommonJsonSend.Send<CreateMenuConditionalResult>(accessToken, urlFormat, buttonData, timeOut: timeOut, jsonSetting: jsonSetting); }, accessTokenOrAppId); } #region GetMenu /* 使用普通自定义菜单查询接口可以获取默认菜单和全部个性化菜单信息,请见自定义菜单查询接口的说明 */ /// <summary> /// 测试个性化菜单匹配结果 /// </summary> /// <param name="accessTokenOrAppId"></param> /// <param name="userId">可以是粉丝的OpenID,也可以是粉丝的微信号。</param> /// <returns></returns> public static MenuTryMatchResult TryMatch(string accessTokenOrAppId, string userId) { return ApiHandlerWapper.TryCommonApi(accessToken => { var url = string.Format("https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token={0}", accessToken); var data = new { user_id = userId }; return CommonJsonSend.Send<MenuTryMatchResult>(accessToken, url, data, CommonJsonSendType.POST); }, accessTokenOrAppId); } #endregion /// <summary> /// 删除菜单 /// </summary> /// <param name="accessTokenOrAppId"></param> /// <param name="menuId">菜单Id</param> /// <returns></returns> public static WxJsonResult DeleteMenuConditional(string accessTokenOrAppId, string menuId) { return ApiHandlerWapper.TryCommonApi(accessToken => { var url = string.Format("https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token={0}", accessToken); var data = new { menuId = menuId }; return CommonJsonSend.Send(accessToken, url, data, CommonJsonSendType.POST); }, accessTokenOrAppId); } /* 使用普通自定义菜单删除接口可以删除所有自定义菜单(包括默认菜单和全部个性化菜单),请见自定义菜单删除接口的说明。 */ } }
메뉴 공개 메소드에서 GetButtonGroup() 메소드는 매개변수(buttonGroup, 메뉴 버튼 목록 유형(개인 메뉴인지 사용자 정의 메뉴인지)을 지정하는 데 사용됩니다.
엔터티 클래스와 관련된 변경 사항이 Entities/Menu 디렉터리에 반영되며, IButtonGroupBase 인터페이스와 ButtonGroupBase 기본 클래스가 새로 생성됩니다. ButtonGroup(사용자 정의 메뉴) 및 ConditionalButtonGroup(개인화된 메뉴) 버튼은 모두 ButtonGroupBase에서 상속됩니다.
Entities/Menu/Buttons/ 디렉토리의 모든 버튼 유형은 공통입니다.
재정렬된 반환 유형은 Entities/JsonResult/Menu/ 디렉터리에 있습니다:
맞춤 메뉴와 개인 메뉴의 메뉴 추가, 삭제 인터페이스가 다르며, 사용 시 다른 인터페이스를 호출해야 합니다.
맞춤 메뉴를 사용하는 경우 MenuMatchRule에 규칙을 하나 이상 입력해야 합니다.
맞춤 메뉴를 사용할 때와 사용하지 않을 때 메뉴를 가져올 때 반환되는 데이터가 다르기 때문에(전자에는 후자도 포함됨) SDK에서는 이 두 가지 경우에 대해 동일한 데이터만 제공합니다. . 엔터티: GetMenuResult(해당 수신 메시지 엔터티는 GetMenuResultFull입니다.) Xinhua 메뉴에 대한 정보(목록)는 GetMenuResult.conditionalmenu에서 직접 읽을 수 있습니다. null이거나 목록이 비어 있으면 맞춤 메뉴가 없다는 의미입니다.
소스 코드에 간단한 시각적 편집 도구가 제공되며, 생성된 메뉴 JSON 데이터 형식을 볼 수 있습니다. (표시되는 것은 원본 JSON이 아닌 운영 엔터티에 의해 변환된 JSON입니다.)
더 많은 WeChat 공개 플랫폼 개발: 개인화된 메뉴 인터페이스 지침 및 관련 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!