이 기간 동안 팀은 WeChat에서 일부 제품 디자인 및 개발을 수행해 왔으며 여기에는 물론 특정 운영 작업도 포함됩니다. 저는 소액 명함, 소액 티켓 수령, 소액 활동, 소액 모집 및 기타 소소한 사건을 포함하여 많은 일을 해왔습니다.
오늘 제가 이야기하고 싶은 것은 위챗에서 가장 활발한 라이트 게임인 마이크로 스크래치 경품입니다. 책, 티켓, 패키지를 긁을 수 있고 고객도 스크래치를 사용할 수 있습니다. 전화요금.
먼저 사진을 찍어서 구체적인 모습을 느껴보세요.
Html5 WebApp이 극복해야 할 몇 가지 함정:
이 미니 게임의 기본 규칙 사용자는 하루에 2번의 스크래핑 횟수(무료로 한 번, 공유 후 한 번)로 제한되어 있으며 매일 경품을 긁을 수 있습니다. 이를 위해 우리가 구현하고자 하는 아이디어는 먼저 게임을 제한하는 것입니다. 구현 코드는 다음과 같습니다.if (!HttpContext.Current.Request.Browser.IsMobileDevice) { var result = new RedirectResult("url", true); filterContext.Result = result; return; } if (string.IsNullOrEmpty(HttpContext.Current.Request.UserAgent)) { var result = new RedirectResult("url", true); filterContext.Result = result; return; } if (HttpContext.Current.Request.UserAgent.IndexOf("MicroMessenger") == -1) { var result = new RedirectResult("url", true); filterContext.Result = result; return; }이 트릭이 통과되었습니다. UserAgent의 판단 아이디어는 인터넷에서 많은 사람들이 사용하는 것 같지만 거기에 있습니다. 사용하지 않으면 여전히 함정이 많습니다: 1. 기본 문제: IOS 및 주류 Android 기기에서는 문제가 없지만 Windows Phone의 경우 WeChat을 직접 사용하면 됩니다. 뛰어내린 후 재생할 수 없습니다. . 그 이유는 WeChat의 기본 UserAgent가 MicroMessenger이기 때문입니다. 이는 이러한 시스템의 WeChat 버전에는 존재하지 않으므로 Windows Phone의 문제를 해결하기 위해 다음 코드를 추가했습니다.
var useragent = HttpContext.Current.Request.UserAgent.ToLower(); if (useragent.IndexOf("Windows Phone".ToLower()) != -1) { base.OnActionExecuting(filterContext); return; }2. 고급 질문: 일부 전문가는 일부 플러그인 도구를 직접 사용하여 MicroMessenger의 UserAgent를 위조하므로 이론적으로는 가능한 모든 브라우저에서 재생할 수 있습니다. 웹 페이지를 엽니다(그룹 친구 @Abao's Selfless 덕분에). 이 문제를 해결하기 위해 우리는 WeChat SDK의 인터페이스를 사용합니다. 사용자가 WeChat에서 이를 사용할 때만 컨트롤 초기화 및 스크래치 작업이 수행됩니다. 그렇지 않으면 다른 터미널 탐색이 수행됩니다. 항상 로딩 상태에 있어야 합니다.
dataForWeixin.callback = function () { //一些初始化的操作 }WeChat의 인터페이스에 대해서는 원본 텍스트를 직접 읽어보시기 바랍니다. 여기에는 코드가 직접 게시되지 않습니다. 위의 아이디어로 많은 성과를 거두었지만 여전히 해결되지 않은 비즈니스 규칙에는 매우 치명적인 버그가 있습니다. 긍정적인 피드백을 주신 @冰milkteachildren의 신발에 감사드립니다. 이 버그는 사용자가 WeChat에서 쿠키와 캐시된 정보를 수동으로 삭제한 후 이벤트에 다시 입장하는 한 이론적으로 상금을 무제한으로 긁을 수 있다는 것입니다. 100% 상금을 받습니다. 이는 현재 위챗 사용자가 쿠키에 경품을 긁었는지 여부를 판단하는 기준을 내 규칙에 두었기 때문입니다. openid를 사용하고 싶지만 Moments에서 온 경우 WeChat 구독 계정은 openid를 얻을 수 없습니다. 여전히 항소 문제가 있습니다. 이 문제를 해결하기 위해 마침내 WeChat 서비스 계정의 인증 인터페이스를 빌려 아이디어를 찾았습니다. 기본 아이디어는 다음과 같습니다. 사용자가 페이지 로딩 = " 프로그램은 계정 번호의 다른 WeChat 서비스 승인 인터페이스를 호출하고 openid를 반환합니다 => openid를 쿠키에 저장합니다(존재하지 않거나 만료된 경우 이전 단계를 다시 실행합니다) => 이 활동이 쿠키에서 몇 번이나 스크랩되었는지 확인합니다. openid를 기반으로 하는 데이터베이스. 동시에 이 프로세스는 사용자가 WeChat에서 게임을 플레이할지 여부를 자동으로 결정합니다. 그렇지 않으면 콜백은 항상 로딩 상태에 있습니다. 사용 후 전체 과정은 비교적 원활합니다. 인증 관련 코드는 다음과 같습니다.
#region 微信授权 public ActionResult WeixinLogin(string CurrentUrl) { string url = WeixinOAuth2.Authorize(Server.UrlEncode(CurrentUrl)); return RedirectPermanent(url); } public ActionResult WeixinCallback() { if (!string.IsNullOrEmpty(Request["code"])) { // 获取AccessToken参数 var param = WeixinOAuth2.GetAccessToken(Request["code"]); string url = string.Format("{0}#access_token={1}&openid={2}&expires_in={3}&state={4}", ConfigHelper.GetValue("Weixin_Callback"), param.access_token,param.openid,param.expires_in, Server.UrlDecode(Request.QueryString["state"])); //重新跳转到回调页面,保持腾讯登录相同风格 return Redirect(url); } return View(); } /// <summary> /// 授权请求页面 /// </summary> /// <param name="flag">0为获取微信基本信息 1为获取微信openid接口</param> /// <returns></returns> public static string Authorize(string ReturnUrl) { string url=string.Format("http://www.php.cn/{0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect", Weixin_AppKey, Weixin_GetOpenIDCallback, ReturnUrl); return url; } #endregion이 시점에서 WeChat에서 현재 사용자의 고유성을 어떻게 확인하는지에 대한 문제는 기본적으로 해결될 수 있습니다. 이 솔루션의 유일한 위험은 WeChat 인터페이스의 부드러움과 안정성입니다. 물론, 전체 개발 과정에서 하나씩 극복해야 할 문제가 많이 있습니다. 예를 들어 WeChat에서 공유한 후 콜백을 구현하는 것은 많은 친구들이 사용합니다. 이 작은 게임에는 grps를 지원해야 합니다. 이러한 대규모 게임 프레임워크에 액세스하는 것은 불가능합니다. 이를 수행하는 방법 등은 나중에 공유하기 위해 몇 가지 기사를 작성할 계획이므로 오늘은 먼저 휴식을 취하겠습니다. . WeChat에서 Html5 라이트 게임을 개발할 때 발생할 수 있는 몇 가지 함정에 대해 더 자세히 공유하려면 PHP 중국어 웹사이트의 관련 기사에 주목하세요!