WeChat 공개 플랫폼 개발: 개인화 메뉴 인터페이스 설명

高洛峰
풀어 주다: 2017-02-27 13:45:09
원래의
2401명이 탐색했습니다.

얼마 전 위챗은 개인화된 메뉴 인터페이스를 출시했고, Senparc.Weixin SDK도 동시에 업데이트되었습니다.

이 업데이트는 Senparc.Weixin.MP 버전을 Senparc.Weixin 버전 4.5.4에 의존하는 v13.5.2로 업그레이드합니다. .NET4.5(master) / .NET4.0 브랜치가 동시에 업데이트되었습니다.

개인화 메뉴의 대규모 변경으로 인해 전체 메뉴 인터페이스가 지금까지 가장 큰 영역으로 재구성되었습니다(하위 호환 가능).

이전 사용자 정의 메뉴와 비교하여 현재 메뉴 관련 기능은 파일 구조에 따라 포괄적으로 구성되었습니다.

WeChat 공개 플랫폼 개발: 개인화 메뉴 인터페이스 설명

인터페이스

메뉴 인터페이스는 모두 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, 메뉴 버튼 목록 유형(개인 메뉴인지 사용자 정의 메뉴인지)을 지정하는 데 사용됩니다.

 

Entity

엔터티 클래스와 관련된 변경 사항이 Entities/Menu 디렉터리에 반영되며, IButtonGroupBase 인터페이스와 ButtonGroupBase 기본 클래스가 새로 생성됩니다. ButtonGroup(사용자 정의 메뉴) 및 ConditionalButtonGroup(개인화된 메뉴) 버튼은 모두 ButtonGroupBase에서 상속됩니다.

Entities/Menu/Buttons/ 디렉토리의 모든 버튼 유형은 공통입니다.

반환 유형

재정렬된 반환 유형은 Entities/JsonResult/Menu/ 디렉터리에 있습니다:

WeChat 공개 플랫폼 개발: 개인화 메뉴 인터페이스 설명

주의사항

  1. 맞춤 메뉴와 개인 메뉴의 메뉴 추가, 삭제 인터페이스가 다르며, 사용 시 다른 인터페이스를 호출해야 합니다.

  2. 맞춤 메뉴를 사용하는 경우 MenuMatchRule에 규칙을 하나 이상 입력해야 합니다.

  3. 맞춤 메뉴를 사용할 때와 사용하지 않을 때 메뉴를 가져올 때 반환되는 데이터가 다르기 때문에(전자에는 후자도 포함됨) SDK에서는 이 두 가지 경우에 대해 동일한 데이터만 제공합니다. . 엔터티: GetMenuResult(해당 수신 메시지 엔터티는 GetMenuResultFull입니다.) Xinhua 메뉴에 대한 정보(목록)는 GetMenuResult.conditionalmenu에서 직접 읽을 수 있습니다. null이거나 목록이 비어 있으면 맞춤 메뉴가 없다는 의미입니다.

테스트 및 시각적 편집

소스 코드에 간단한 시각적 편집 도구가 제공되며, 생성된 메뉴 JSON 데이터 형식을 볼 수 있습니다. (표시되는 것은 원본 JSON이 아닌 운영 엔터티에 의해 변환된 JSON입니다.)


더 많은 WeChat 공개 플랫폼 개발: 개인화된 메뉴 인터페이스 지침 및 관련 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿