찾다
위챗 애플릿위챗 개발WeChat 공개 계정 개발을 위한 WeChat JSSDK

WeChat 공개 계정 개발을 위한 WeChat JSSDK

Feb 22, 2017 pm 03:58 PM
위챗 공개 계정

개요

WeChat JS-SDK는 WeChat 공개 플랫폼에서 웹 개발자를 위해 제공하는 WeChat 기반의 웹 개발 툴킷입니다.

WeChat JS-SDK를 사용하면 웹 개발자는 WeChat을 사용하여 사진 촬영, 사진 선택, 음성 선택, 위치 등 휴대폰 시스템의 기능을 효율적으로 사용하는 동시에 WeChat을 직접 사용할 수 있습니다. 공유, 스캔, 쿠폰 등. 결제와 같은 WeChat의 고유한 기능은 WeChat 사용자에게 더 나은 웹 경험을 제공합니다.

이 문서는 웹 개발자를 대상으로 WeChat JS-SDK 사용 방법 및 관련 주의사항을 소개하기 위해 작성되었습니다.

JSSDK 사용 단계

1단계: 도메인 이름 바인딩

먼저 WeChat 공개 플랫폼에 로그인하고 "공식 계정 설정"의 "기능 설정"에 들어가 "JS 인터페이스 보안 도메인 이름"을 입력합니다.

참고: 로그인 후 "개발자 센터"에서 해당 인터페이스 권한을 확인할 수 있습니다.

2단계: JS 파일 도입

JS 인터페이스를 호출해야 하는 페이지에 다음 JS 파일을 도입합니다. (https 지원) : http://www.php.cn/

비고: AMD/CMD 표준 모듈 로딩 방법을 사용한 로딩 지원

3단계: config 인터페이스를 통해 권한 확인 구성 삽입

JS-SDK를 사용해야 하는 모든 페이지는 먼저 구성 정보를 삽입해야 합니다. 그렇지 않으면 호출되지 않습니다. (동일한 URL은 한 번만 호출하면 되며 SPA 웹 앱은 변경됩니다. URL이 변경될 때마다 URL이 호출될 수 있습니다. 현재 Android WeChat 클라이언트는 pushState의 새로운 H5 기능을 지원하지 않으므로 pushState를 사용하여 웹 앱 페이지를 구현하면 이 문제가 해결됩니다. 안드로이드 6.2에서).

wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见附录1
    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

4단계: 준비된 인터페이스를 통해 성공적인 확인 처리

wx.ready(function(){

    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});

5단계: 오류 인터페이스를 통해 실패한 검증 처리

wx.error(function(res){

    // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。

});

인터페이스 호출 지침

모든 인터페이스는 wx 객체를 전달합니다(또한 jWeixin 객체를 사용하여 호출할 수 있습니다. 매개변수는 각 인터페이스 자체에서 전달해야 하는 매개변수 외에도 다음과 같은 일반 매개변수도 있습니다.


  1. success: 인터페이스 호출 성공 시 실행되는 콜백 함수입니다.
    1. fail: 인터페이스 호출이 실패했을 때 실행되는 콜백 함수입니다.

    2. 완료: 성공, 실패에 관계없이 인터페이스 호출이 완료되면 실행되는 콜백 함수입니다.

    3. cancel: 사용자가 취소를 클릭할 때의 콜백 함수는 사용자가 작업을 취소하는 경우에만 사용됩니다.

    4. trigger: 메뉴의 버튼을 클릭했을 때 실행되는 메서드입니다. 이 메서드는 메뉴의 관련 인터페이스만 지원합니다.

    5. 참고: 현재 클라이언트 공유 작업은 동기 작업이므로 트리거에서 ajax 비동기 요청을 사용하여 이 공유의 내용을 수정하지 마십시오. ajax 반환 패키지를 사용하십시오. 아직 반환되지 않았습니다.
위 함수에는 모두 객체 유형의 매개변수가 있습니다. 각 인터페이스 자체에서 반환되는 데이터 외에도 값 형식이 다음과 같은 일반 속성 errMsg도 있습니다.


호출이 성공한 경우: "xxx:ok", 여기서 xxx는 호출된 인터페이스 이름입니다.
    1. 사용자가 취소한 경우: "xxx: cancel" , 여기서 xxx는 호출된 인터페이스의 이름입니다.

    2. 호출이 실패할 경우 해당 값은 특정 오류 메시지입니다.

    3. /// <summary>
              /// 微信参数准备
              /// </summary>
              private void WxSdkPramas(bool isShare)
              {
                  var jsSdk = new JSSDKHelper();
                  //获取时间戳
                  var timestamp = JSSDKHelper.GetTimestamp();
                  //获取随机码
                  var nonceStr = JSSDKHelper.GetNoncestr();
                  var appId = WeiXinAppId;
                  var appSecret = WeiXinAppSecret;
                  //获取票证
                  var jsTicket = JsApiTicketContainer.TryGetTicket(appId, appSecret);
                  //获取签名
                  var signature = jsSdk.GetSignature(jsTicket, nonceStr, timestamp, Request.Url.AbsoluteUri);
                  ViewData["AppId"] = appId;             
               ViewData["Timestamp"] = timestamp;
                  ViewData["NonceStr"] = nonceStr;
                  ViewData["Signature"] = signature;
              }

    4. 아래는 js 관련 코드입니다:
<head>
    <meta name="viewport" content="width=device-width" />
    <title>公众号JSSDK演示</title>
    <script src="~/Scripts/jquery-1.7.1.min.js"></script>
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    <script>
        wx.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: &#39;@ViewData["AppId"]&#39;, // 必填,公众号的唯一标识
            timestamp: &#39;@ViewData["Timestamp"]&#39;, // 必填,生成签名的时间戳
            nonceStr: &#39;@ViewData["NonceStr"]&#39;, // 必填,生成签名的随机串
            signature: &#39;@ViewData["Signature"]&#39;,// 必填,签名
            jsApiList: [
                  "checkJsApi",
                    &#39;onMenuShareTimeline&#39;,
                    &#39;onMenuShareAppMessage&#39;,
                    &#39;onMenuShareQQ&#39;,
                    &#39;onMenuShareWeibo&#39;,
                    &#39;hideMenuItems&#39;,
                    &#39;showMenuItems&#39;,
                    &#39;hideAllNonBaseMenuItem&#39;,
                    &#39;showAllNonBaseMenuItem&#39;,
                    &#39;translateVoice&#39;,
                    &#39;startRecord&#39;,
                    &#39;stopRecord&#39;,
                    &#39;onRecordEnd&#39;,
                    &#39;playVoice&#39;,
                    &#39;pauseVoice&#39;,
                    &#39;stopVoice&#39;,
                    &#39;uploadVoice&#39;,
                    &#39;downloadVoice&#39;,
                    &#39;chooseImage&#39;,
                    &#39;previewImage&#39;,
                    &#39;uploadImage&#39;,
                    &#39;downloadImage&#39;,
                    &#39;getNetworkType&#39;,
                    &#39;openLocation&#39;,
                    &#39;getLocation&#39;,
                    &#39;hideOptionMenu&#39;,
                    &#39;showOptionMenu&#39;,
                    &#39;closeWindow&#39;,
                    &#39;scanQRCode&#39;,
                    &#39;chooseWXPay&#39;,
                    &#39;openProductSpecificView&#39;,
                    &#39;addCard&#39;,
                    &#39;chooseCard&#39;,
                    &#39;openCard&#39;
            ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2。详见:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
        });
        wx.error(function (res) {
            console.log(res);
            alert(&#39;验证失败&#39;);
        });
        wx.ready(function () {
            var url = &#39;http://weixin.senparc.com&#39;;
            var link = url + &#39;@(Request.Url.PathAndQuery)&#39;;
            var imgUrl = url + &#39;/images/v2/ewm_01.png&#39;;
            //转发到朋友圈
            wx.onMenuShareTimeline({
                title: &#39;JSSDK朋友圈转发测试&#39;,
                link: link,
                imgUrl: imgUrl,
                success: function () {
                    alert(&#39;转发成功!&#39;);
                },
                cancel: function () {
                    alert(&#39;转发失败!&#39;);
                }
            });
            //转发给朋友
            wx.onMenuShareAppMessage({
                title: &#39;JSSDK朋友圈转发测试&#39;,
                desc: &#39;转发给朋友&#39;,
                link: link,
                imgUrl: imgUrl,
                type: &#39;link&#39;,
                dataUrl: &#39;&#39;,
                success: function () {
                    alert(&#39;转发成功!&#39;);
                },
                cancel: function () {
                    alert(&#39;转发失败!&#39;);
                }
            });
        });
    </script>
</head>
    위에 사용된 Helper:
  1. public class JSSDKHelper
        {
            public JSSDKHelper()
            {
                Parameters = new Hashtable();
            }
            protected Hashtable Parameters;
            /// <summary>
            /// 设置参数值
            /// </summary>
            /// <param name="parameter"></param>
            /// <param name="parameterValue"></param>
            private void SetParameter(string parameter, string parameterValue)
            {
                if (!string.IsNullOrEmpty(parameter))
                {
                    if (Parameters.Contains(parameter))
                    {
                        Parameters.Remove(parameter);
                    }
                    Parameters.Add(parameter, parameterValue);
                }
            }
            private void ClearParameter()
            {
                Parameters.Clear();
            }
            /// <summary>
            /// 获取随机字符串
            /// </summary>
            /// <returns></returns>
            public static string GetNoncestr()
            {
                Random random = new Random();
                return MD5Util.GetMD5(random.Next(1000).ToString(), "GBK");
            }
            /// <summary>
            /// 获取时间戳
            /// </summary>
            /// <returns></returns>
            public static string GetTimestamp()
            {
                TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
                return Convert.ToInt64(ts.TotalSeconds).ToString();
            }
            /// <summary>
            /// sha1加密
            /// </summary>
            /// <returns></returns>
            private string CreateSha1()
            {
                StringBuilder sb = new StringBuilder();
                ArrayList akeys = new ArrayList(Parameters.Keys);
                akeys.Sort();
                foreach (string k in akeys)
                {
                    string v = (string)Parameters[k];
                    if (sb.Length == 0)
                    {
                        sb.Append(k + "=" + v);
                    }
                    else
                    {
                        sb.Append("&" + k + "=" + v);
                    }
                }
                return SHA1UtilHelper.GetSha1(sb.ToString()).ToString().ToLower();
            }
            /// <summary>
            /// 生成cardSign的加密方法
            /// </summary>
            /// <returns></returns>
            private string CreateCardSha1()
            {
                StringBuilder sb = new StringBuilder();
                ArrayList akeys = new ArrayList(Parameters.Keys);
                akeys.Sort();
                foreach (string k in akeys)
                {
                    string v = (string)Parameters[k];
                    sb.Append(v);
                }
                return SHA1UtilHelper.GetSha1(sb.ToString()).ToString().ToLower();
            }
            /// <summary>
            /// 获取JS-SDK权限验证的签名Signature
            /// </summary>
            /// <param name="ticket"></param>
            /// <param name="noncestr"></param>
            /// <param name="timestamp"></param>
            /// <param name="url"></param>
            /// <returns></returns>
            public string GetSignature(string ticket, string noncestr, string timestamp, string url)
            {
                //清空Parameters
                ClearParameter();
                SetParameter("jsapi_ticket", ticket);
                SetParameter("noncestr", noncestr);
                SetParameter("timestamp", timestamp);
                SetParameter("url", url);
                return CreateSha1();
            }
            /// <summary>
            /// 获取位置签名AddrSign
            /// </summary>
            /// <param name="appId"></param>
            /// <param name="appSecret"></param>
            /// <param name="noncestr"></param>
            /// <param name="timestamp"></param>
            /// <param name="url"></param>
            /// <returns></returns>
            public string GetAddrSign(string appId, string appSecret, string noncestr, string timestamp, string url)
            {
                //清空Parameters
                ClearParameter();
                var accessToken = AccessTokenContainer.TryGetToken(appId, appSecret);
                SetParameter("appId", appId);
                SetParameter("noncestr", noncestr);
                SetParameter("timestamp", timestamp);
                SetParameter("url", url);
                SetParameter("accesstoken", accessToken);
                return CreateSha1();
            }
            /// <summary>
            /// 获取卡券签名CardSign
            /// </summary>
            /// <param name="appId"></param>
            /// <param name="appSecret"></param>
            /// <param name="locationId"></param>
            /// <param name="noncestr"></param>
            /// <param name="timestamp"></param>
            /// <param name="cardId"></param>
            /// <param name="cardType"></param>
            /// <returns></returns>
            public string GetCardSign(string appId, string appSecret, string locationId, string noncestr, string timestamp, string cardId, string cardType)
            {
                //清空Parameters
                ClearParameter();
                SetParameter("appId", appId);
                SetParameter("appsecret", appSecret);
                SetParameter("location_id", locationId);
                SetParameter("nonce_str", noncestr);
                SetParameter("times_tamp", timestamp);
                SetParameter("card_id", cardId);
                SetParameter("card_type", cardType);
                return CreateCardSha1();
            }
        }
  2. WeChat 공용 계정 개발을 위한 WeChat JSSDK와 관련된 더 많은 기사를 보려면 주목해 주세요. PHP 중국어 웹사이트로!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구