WeChat JS-SDK ドキュメント
WeChat JS-SDK ドキュメント
WeChat JS-SDK は、WeChat に基づく Web 開発者向けの WeChat パブリック プラットフォームによって提供されますWeb 開発キットが含まれています。
WeChat JS-SDK を使用すると、Web 開発者は WeChat を使用して、写真の撮影、写真の選択、音声、位置情報などの携帯電話システムの機能を効率的に利用できると同時に、WeChat を直接使用して共有することができます。 WeChat の独自の機能は、WeChat ユーザーに優れた Web エクスペリエンスを提供します。
このドキュメントでは、Web 開発者向けに WeChat JS-SDK の使用方法と関連する注意事項を紹介します。 JSSDK利用手順 「機能設定」 「JSインターフェースセキュリティドメイン名」を入力します。
注: ログイン後、「開発者センター」で対応するインターフェースの権限を表示できます。
ステップ 2: JS ファイルをインポートするJS インターフェースを呼び出す必要があるページに次の JS ファイルを導入します (https をサポート): http://res.wx.qq.com/open/js/jweixin-1.0.0.js シェイク周辺機能を使用する必要がある場合は、 http://res.wx.qq.com/open/js/jweixin-1.1.0.js を導入してください 注: AMD の使用をサポートしています/CMD 標準モジュールのロード方法 ロード ステップ 3: 構成インターフェースを介して権限検証構成を挿入します JS-SDK を使用する必要があるすべてのページは、最初に構成情報を挿入する必要があります。そうでない場合は、呼び出されません (同じ URL を一度呼び出すだけで済みます。URL を変更する SPA の Web アプリは、URL が変更されるたびに呼び出すことができます。現在、Android WeChat クライアントは、pushState の新しい H5 機能をサポートしていないため、 PushState を使用して Web アプリ ページを実装すると、署名が失敗します。この問題は Android 6.2 で修正されます。 wx.config({ ) debug: true, // 受信パラメータを表示したい場合は、すべての API 呼び出しの戻り値がアラートされます。 、PC 側で開くことができます。パラメーター情報はログを通じて出力され、PC 側でのみ出力されます。 appId: '', // 必須、公式アカウントの一意の識別子。 timestamp: , // 署名を生成するために必須です。 Timestamp nonceStr: '', // 必須、署名のランダムな文字列を生成します Signature: '', // 必須、署名、付録 1 を参照してください jsApiList: [] // 必須、使用する必要がある JS インターフェースのリスト。すべての JS インターフェースのリストについては付録 2 を参照してください }); ステップ 4: Ready インターフェースを介して成功した検証を処理する wx.ready(function(){ ) // Ready メソッドは構成情報が検証された後に実行されます、すべてのインターフェイス呼び出しは、config インターフェイスが結果を取得した後、クライアント側での非同期操作であるため、ページのロード時に関連するインターフェイスを呼び出す必要がある場合は、関連するインターフェイスを ready 関数で呼び出す必要があります。ユーザーによってトリガーされたときに正しく実行されるようにするため、直接呼び出すことができ、ready 関数 }); ステップ 5: エラーインターフェイスを介して失敗した検証を処理する wx.error(function(res){ ) // 構成情報の検証が失敗した場合、エラー関数は署名の有効期限が切れた場合など、特定のエラー情報は、config のデバッグ モードまたは返された res パラメータで確認できます。 }); すべてのインターフェイスは、wx オブジェクトを通じて呼び出されます (jWeixin オブジェクトも使用できます)。パラメーターは、各インターフェイスに渡す必要があるパラメーターに加えて、オブジェクトです。それ自体には、次の一般パラメータがあります: 1.success: インターフェイス呼び出しが成功したときに実行されるコールバック関数。 2.fail: インターフェース呼び出しが失敗したときに実行されるコールバック関数。 3.complete: インターフェイス呼び出しが完了したときに実行されるコールバック関数は、成功または失敗に関係なく実行されます。 4.cancel: ユーザーがキャンセルをクリックしたときのコールバック関数は、ユーザーが操作をキャンセルする場合にのみ使用されます。 5.trigger: メニュー内のボタンがクリックされたときにトリガーされるメソッド。このメソッドは、メニュー内の関連するインターフェイスのみをサポートします。 注: この共有のコンテンツを変更するトリガーで ajax 非同期リクエストを使用しないでください。クライアント共有操作は同期操作であり、現時点では ajax を使用した戻りパケットは返されないためです。 上記の関数にはすべて、オブジェクト型のパラメーターが 1 つあり、各インターフェイス自体によって返されるデータに加えて、値の形式が次のような一般属性 errMsg もあります。呼び出しが成功した場合: "xxx:ok"、xxx は呼び出されたインターフェイスの名前です ユーザーがキャンセルした場合: "xxx:cancel"、xxx は呼び出されたインターフェイスの名前です 呼び出しは失敗します: その値は特定のエラー メッセージです 現在のクライアントバージョンが指定されたJSインターフェースをサポートしているかどうかを確認します wx.checkJsApi({ jsApiList: ['chooseImage ' ], // 検出する必要がある JS インターフェイスのリスト。すべての JS インターフェイスのリストについては、付録 2 を参照してください。 success: function(res) { False は使用しないでください。 f // たとえば: {"CheckResult": {"choooseimage": true}、"ErRMSG": "Checkjsapi: OK"}}}); 注: checkJsApi インターフェースは、クライアント 6.0.2 で新たに導入された予約済みインターフェースです。最初のフェーズでオープンされたインターフェースは、checkJsApi を使用せずに検出できます。 共有行為を誘発しないように注意してください。詳細なルールについては、公式アカウントインターフェースの許可が永久に取り消されます。モーメント管理に関するよくある質問。 「モーメントで共有」ボタンのクリックステータスを取得し、共有コンテンツインターフェイスをカスタマイズします wx.onMenuShareTimeline({ title: '', // タイトルを共有 リンク: '', // リンクを共有 imgUrl: '', // アイコンを共有 success: function () { // ユーザーが共有を確認した後に実行されるコールバック関数 }, cancel: function () {取 // ユーザーは共有後に実行可能なコールバック関数をキャンセルします }}); 「友達に共有」ボタンのクリックステータスを取得し、共有コンテンツインターフェイスをカスタマイズします wx.onMenuShareAppMessage({ ) title: '', // タイトルを共有 desc: '', // 説明を共有 link: '', // リンクを共有 imgUrl: '', // アイコンを共有 type: '', // 共有type、music、video、または link、空白のままにした場合、デフォルトは link です dataUrl: '', // type が music または video の場合、データ リンクを指定する必要があり、デフォルトは空です success : function () { ユーザーが共有を確認した後に実行されます。 -‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐''''' cancel: function () { ユーザーが共有をキャンセルした後に実行されるコールバック関数 「QQに共有」ボタンのクリックステータスを取得し、共有コンテンツインターフェイスをカスタマイズします wx.onMenuShareQQ({ ) title: '', // タイトルを共有 desc: '', // 説明を共有 link: '', // リンクを共有 imgUrl: '', // アイコンを共有 success: function () { 共有 // ユーザーは共有後に実行されるコールバック関数を確認します }, Cancel: Function () { // ユーザーは共有コールバック関数をキャンセルします } }} }); wx.onMenuShareWeibo({ title: '', // 分享标题 desc: '', // 分享描述 link: '', // 分享链接 imgUrl: '', // 分享图标 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { ユーザーが共有をキャンセルした後に実行されるコールバック関数 wx.onMenuShareQZone({ title: '', // 分享标题 desc: '', // 分享描述 link: '', // 分享链接 imgUrl: '', // 分享图标 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { ユーザーが共有をキャンセルした後に実行されるコールバック関数 写真を撮ったり、モバイルアルバムから写真を選択したりするためのインターフェース wx.chooseImage({ カウント: 1, / / デフォルト 9 sizeType: ['original', 'compressed'], // オリジナル画像か圧縮画像かを指定でき、デフォルトでは両方が利用可能です sourceType: ['album ', 'camera'], // ソースがフォト アルバムであるかカメラであるかを指定できます。デフォルトは両方です。 / 選択した写真のローカル ID リストを返します。localId は img として使用できます。タグの src 属性には画像が表示されます } }); wx.previewImage({ current: '', //現在表示されている画像のhttpリンク urls: [] //必要プレビュー 画像リスト http リンク }); wx.uploadImage({ localId: '', // アップロードする画像のローカルIDはchooseImageインターフェースによって取得されます isShowProgressTips: 1, // デフォルトは 1、進行状況プロンプトを表示します 成功: function (res) { var serverId = res.serverId // 画像のサーバー ID を返します } }); 注: アップロードされた画像は 3 日間有効です。WeChat マルチメディア インターフェイスを使用して、ここで取得したserverId は media_id です。 wx.downloadImage({ ) serverId: '', // ダウンロードされるイメージのサーバー側 ID は、 UploadImage Interface isShowProgressTips: 1, // デフォルトは 1、進行状況のヒントを表示します success: function (res) { var localId = res.localId; // をダウンロードした後、ローカル ID を返します。画像 } }); wx.startRecord(); wx.stopRecord({ 成功: function (res) { var localId = res.localId; } }); wx.onVoiceRecordEnd({ // 録音時間が停止せずに1分を超えると完全コールバックが実行されます complete:機能( res) { var localId = res.localId } }); wx.playVoice({ ) localId: '' // 再生されるオーディオのローカルIDはstopRecordインターフェースから取得されます }) ; wx.pauseVoice({ ) localId: '' // 必要なオーディオのローカル ID一時停止されるstopRecord インターフェースによって取得されます }); wx.stopVoice({ ) localId: '' // 停止する必要があるオーディオのローカル ID は stopRecord インターフェースによって取得されます }) ; wx.onVoicePlayEnd({ Success: function (res) { var local Id = .localId; / 音声ローカル ID を返します } }); wx.uploadVoice({ ) localId: '', // アップロードするオーディオのローカルIDはstopRecordインターフェースによって取得されます isShowProgressTips: 1, // デフォルトは 1、進行状況プロンプトを表示します success: function (res) { var serverId = res.serverId; // オーディオのサーバー ID を返します ; } }); 注: アップロードされた音声は 3 日間有効です。WeChat マルチメディア インターフェイスを使用して音声を自分のサーバーにダウンロードできます。ここで取得したサーバー ID は、マルチメディア ファイルの現在の周波数制限を参照してください。ダウンロード インターフェイスは 10,000 回/日です。必要に応じて頻度を増やし、WeChat パブリック プラットフォームにログインして、開発インターフェイスの許可リストの一時的な上限を増やすように申請してください。 wx.downloadVoice({ ) serverId: '', // ダウンロードされるオーディオのサーバー側 ID は、 UploadVoice インターフェース isShowProgressTips: 1, // デフォルトは 1 で、進行状況のヒントを表示します success: function (res) { var localId = res.localId; // のローカル ID を返します。オーディオ } }); wx.translateVoice({ localId: '', // が必要です識別されるオーディオのローカル ID。録音関連インターフェイスから取得されます isShowProgressTips: 1, // デフォルトは 1、進行状況プロンプトを表示します success: function (res) { alert(res.translateResult); // 音声認識の結果 } }); wx.getNetworkType({ 成功: 関数 (res) { var networkType = res.networkType; // ネットワーク タイプ 2g、3g、4g、wifi を返します } }); WeChat組み込みの地図表示位置インターフェイスを使用します wx.openLocation({ 緯度: 0, // 緯度、浮動小数点数、範囲は 90 ~ -90 です 経度: 0, // 経度、浮動小数点数、範囲は 180 ~ -180 です name: '', // 場所名 address: ' ', // アドレスの詳細 scale: 1, // マップのズーム レベル、整形値、1 ~ 28 の範囲。デフォルトは最大です infoUrl: '' //場所を表示するインターフェイスの下部にあるハイパーリンク、クリックしてジャンプします }); wx.getLocation({ ) type: 'wgs84', // 火星を直接返したい場合、デフォルトは wgs84 の gps 座標です。 openLocation 座標、'gcj02' で渡すことができます 成功: function (res) { var latitude = res.latitude // 緯度、浮動小数点数、範囲は 90 ~ -90 です ; var longitude = res.longitude; // 経度、浮動小数点数、範囲は 180 ~ -180 です。 varspeed = res.speed; // 速度、単位は 1 秒あたり var precision = res.accuracy;位置精度 } }); wx.startSearchBeacons({ チケット:" ", // 周囲のビジネスチケットをシェイクすると、シェイクされたページリンクの後にシステムが自動的に追加します complete:function(argv){ //検索完了後にコールバック関数を有効にする } }); 注: シェイク ペリフェラル機能にアクセスする必要がある場合は、次を参照してください: シェイク ペリフェラルをアクティブ化するために適用します ペリフェラル ibeacon デバイス インターフェイスの検索を閉じます wx.stopSearchBeacons ({ complete:function(res){ //検索が完了したらコールバック関数を閉じます } }); ペリフェラルibeaconデバイスインターフェイスをリッスン wx.onSearchBeacons({ complete:function(argv){ //コールバック関数、できる配列形式であること 加盟店が登録した関連周辺機器のリストを取得 } }); 備考: 上記の Shake Shake ペリフェラル インターフェイスの使用上の注意事項およびその他の結果を返す手順については、次を参照してください: Shake Shake ペリフェラルを使用してデバイス情報を取得する wx.hideOptionMenu(); wx.showOptionMenu() ; wx.closeWindow(); wx。 HideMenuItems( { menuList: [] // メニュー項目を非表示にするには、「伝播」ボタンと「保護」ボタンのみを非表示にできます。すべてのメニュー項目については付録 3 を参照してください }); wx.showmenuitems({ )menulist:[] //表示されるメニュー項目、すべてのメニュー項目については付録3を参照してください } ; wx.showAllNonBaseMenuItem(); wx.scanQRCode({ needResult: 0, // デフォルトの場合0の場合、スキャン結果はWeChatによって処理され、1の場合、スキャン結果は直接返されます。 scanType: ["qrCode","barCode"], // QRコードをスキャンするかどうかを指定できます success: function (res) { var result = res.resultStr; // needResult が 1 の場合、コードをスキャンして返される結果 } }); wx.openProductSpecificView({ productId: '', // 製品ID viewType: '' // 0. デフォルト値、通常の製品詳細ページ 1. 製品詳細ページをスキャン 2. 製品詳細ページを保存 }); WeChat カードとチケットのインターフェイスで使用される署名証明書 api_ticket は、ステップ 3 の構成で使用される署名証明書 jsapi_ticket とは異なります。 WeChat カードとチケット JS-SDK の呼び出し 2 つの異なる署名を順番に完了する必要があり、資格情報をキャッシュする必要があります。 api_ticket は、WeChat Card および Voucher JS API を呼び出すために使用される一時的なチケットで、7200 秒間有効で、access_token を通じて取得されます。 開発者へのメモ: 1.カードとクーポンのインターフェース署名に使用されるこの api_ticket は、ステップ 3 で構成インターフェースを介して許可検証構成 を挿入するために使用される jsapi_ticket とは異なります。 2. api_ticket を取得するための API 呼び出しの数は非常に限られているため、api_ticket を頻繁に更新すると API 呼び出しが制限され、開発者は独自のサービスで api_ticket を保存および更新する必要があります。 インターフェース呼び出しリクエストの説明 httpリクエストメソッド: GET https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type= wx_card パラメータの説明 戻りデータ データの例: { "errcode":0, "errmsg":"わかりました"、 "チケット":"bxLdikRXVbTPdHSM05e5u5sUoXNKdvsdshFKA", "有効期限":7200 } CardId: '', // カードとクーポンの ID タイムスタンプ: 0, // カードとクーポンの署名タイムスタンプ nonceStr: '', / / カードとクーポンの署名はランダムです String SignType: '', // 署名メソッド、デフォルト 'SHA1' CardSign: '', // カード署名 success: function (res) { var CardList = res.cardList // ユーザーが選択したカードリスト情報 } ; }); 開発者向けの特別な注意: 署名エラーにより、プル カード リストが異常に空になります。署名に含まれるパラメータの有効性を慎重に確認してください。 特別な注意事項 プル リストが異常に空になる場合は、通常、署名エラー、無効なタイムスタンプ、および不正なフィルタリング メカニズムの 3 つの状況が考えられます。 。開発者は、位置付けの理由を順番に調査するように求められます。 wx.addCard({ ) CardList: [{ ] CardI d: ”、 カード内線: '' ... }); ここでのcard_extパラメータは署名に参加するパラメータと一致している必要があり、形式はオブジェクトではなく文字列であることに注意してください。そうでない場合は署名エラーが報告されます。 開発者は一度に 5 枚までのカードを追加することをお勧めします。そうしないと、タイムアウト エラーが発生します。 WeChatカードパッケージのカードクーポンインターフェイスを表示します wx.openCard({ )cardList: [{ CardId : ''、 コード: '' }]// 開く必要があるカードとクーポンのリスト }); wx.chooseWXPay({ タイムスタンプ: 0, // 支払い署名のタイムスタンプ、メモただし、WeChat jssdk で使用されるタイムスタンプ フィールドはすべて小文字であること。ただし、最新バージョンの支払いバックグラウンドで署名を生成するために使用されるタイムスタンプ フィールド名は、S 文字を大文字にする必要があります nonceStr: '', // 支払い署名のランダムな文字列, 32 ビット以下 package: '', // 統合支払いインターフェースによって返される prepay_id パラメーター値。送信形式は次のとおりです: prepay_id=***) SignType: '', //署名方法、デフォルトは「SHA1」です。新しいバージョンの支払いを使用するには「MD5」を入力する必要があります paySign: '', // 支払い署名 success: function (res) { }}); 備考: prepay_id は、WeChat Pay 統合注文インターフェイスを通じて取得されます。paySign は、統合 WeChat Pay Sign 署名生成メソッドを採用しています。ここでの appId は、構成で渡された appId と一致している必要があります。これは署名に含まれる最後のパラメータです。appId、timeStamp、nonceStr、package、signType があります。 WeChat 決済開発ドキュメント: https://pay.weixin.qq.com/wiki/doc/api/index.html jsapi_ticket jsapi_ticket は、署名を生成する前に、パブリック アカウントが WeChat JS インターフェイスを呼び出すために使用する一時的なチケットであることを理解する必要があります。通常の状況では、access_token によって取得されるjsapi_ticket の有効期間は 7200 秒です。 jsapi_ticket を取得するための API 呼び出しの数は非常に限られているため、jsapi_ticket を頻繁に更新すると API 呼び出しが制限され、独自のビジネスに影響を及ぼします。 開発者は、jsapi_ticket を独自のサービスでグローバルにキャッシュする必要があります。 1. access_token を取得するには、次のドキュメントを参照してください (有効期間は 7200 秒、開発者は access_token を独自のサービスでグローバルにキャッシュする必要があります): ../15/54ce45d8d30b6bf6758f68d2e95bc627.html 2 で取得した access_token を使用します。最初のステップ http GET を使用して jsapi_ticket をリクエストします (有効期間 7200 秒、開発者は jsapi_ticket を独自のサービスでグローバルにキャッシュする必要があります): https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token= ACCESS_TOKEN&type= jsapi は次の JSON を正常に返します: { "errcode":0, "errmsg":"ok", 「チケット」:" bxL dikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA ", "expires_in":7200 } jsapi_ticket を取得したら、JS-SDK 権限検証用の署名を生成できます。 署名アルゴリズム 署名生成ルールは次のとおりです: 署名に含まれるフィールドには、noncestr (ランダムな文字列)、有効な jsapi_ticket、timestamp (タイムスタンプ)、url (現在の Web ページの URL) が含まれます。 , いいえ # とそれに続く部分が含まれます )。署名されるすべてのパラメータをフィールド名の ASCII コードに従って小さいものから大きいもの (辞書順) に並べ替えた後、URL キーと値のペアの形式 (つまり、key1=value1&key2=value2...) を使用してそれらを連結します。文字列 string1。ここで、パラメータ名はすべて小文字であることに注意してください。 string1 に対して sha1 暗号化を実行し、フィールド名とフィールド値には元の値を使用し、URL エスケープは実行しません。 は、signature=sha1(string1)です。 例: noncestr=Wm3WZYTPz0wzccnW jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhT dfl2fzFy1AOcHKP7qg タイムスタンプ=1414587457 url=http://mp.weixin.qq.com?params=value ステップ 1. フィールド名の ASCII コードに従って、署名されるすべてのパラメータを小さいものから大きいものへ (辞書順に) 並べ替えます。 ) を使用し、キーと値のペアの形式 (つまり、key1=value1&key2=value2...) を文字列 string1 に結合します: lYy3-Sl-HhTdfl2fzFy1AO cHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp= 1414587457&url=http://mp.weixin.qq.com?params =value ステップ 2. sha1 で string1 に署名し、署名を取得します: 注意事項 1. 署名に使用される noncestr とタイムスタンプは、wx.config の nonceStr とタイムスタンプと同じである必要があります。 2. 署名に使用される URL は、JS インターフェースを呼び出すページの完全な URL である必要があります。 3.セキュリティ上の理由から、開発者はサーバー側に署名ロジックを実装する必要があります。 無効な署名などのエラーが発生した場合、一般的なエラーと解決策については付録 5 を参照してください。 バージョン 1.0.0 インターフェース メニューシェアタイムライン上 メニューシェアAppメッセージ上 メニューシェアQQ上 メニューシェアWeibo上 メニューシェアQZone上 録音開始 録音停止 onVoiceRecord終了 Voice再生 Stopvoice NVoicePlayend uploadvoice downloadvoice chooseimage previewimage uploadimage downloadimage translateVoice getNetworkType openLocation getLocation hideOptionMenu showOptionMenu HideMenuItems showMenuItems HideAllNonBaseMenuItem 非BaseMenuItemをすべて表示 ウィンドウを閉じる QRコードをスキャン WXPayを選択 OpenProductSpecificView addCard カードを選択 カードを開く 昼モード: "menuItem:dayMode"夜間モード: "menuItem:nightMode" リフレッシュ: "menuItem:refresh" 公式アカウント(追加済み)を見る:「menuItem:profile」 公式アカウント(未追加)を見る:「menuItem:addContact」 コミュニケーションカテゴリ 友達に送る: "menuItem:share:appMessage" モーメントで共有: "menuItem:share:timeline" QQ で共有: "menuItem:share:qq" Weibo で共有: "menuItem:share :weiboアプリ「 収集:「menuItem:お気に入り」 FBに共有:「menuItem:share:facebook」 QQスペース/menuItem:share:QZoneに共有 保護カテゴリ タグを編集: "menuItem:editTag" 削除: "menuItem:delete" リンクをコピー: "menuItem:copyUrl" 元のページ: "menuItem:originPage" 読み取りモード: "menuItem:readMode" QQ ブラウザで開く: "menuItem:openWithQQBrowser" Safari で開く: "menuItem:openWithSafari" メール: "menuItem:share :email" 一部の特別な公開アカウント: "menuItem:share:brand" 付録 4 - カードとクーポンの拡張フィールドと署名生成アルゴリズム JSSDK ユーザーはここをお読みください。 JSAPI ユーザーはスキップできます カードとクーポンの署名と JSSDK の署名は完全に独立しています。これら 2 つのアルゴリズムと意味は完全に異なります。 JSSDK の署名は、すべての JS インターフェイスを使用するために必要な認証層であり、呼び出し元の ID を識別するために使用され、クーポン自体とは何の関係もありません。次に、カードとクーポンの署名はプロトコルの拡張性と簡単なデータ改ざん防止を考慮し、独立した署名プロトコルを設計しています。また、歴史的な理由により、カードとクーポンの JS インターフェイスは JSSDK よりも前に登場しました。当時の JSAPI には認証システムがなかったため、カードの署名にも識別情報 appsecret/api_ticket が追加されました。開発者が理解できることを願っています。 カードとクーポン api_ticket カードとクーポン api_ticket は、カードとクーポン関連のインターフェイスを呼び出すために使用される一時的なチケットで、7200 秒間有効で、access_token を通じて取得されます。 jsapi_ticket と区別するためにここに注意してください。カードとチケット api_ticket を取得するための API 呼び出しの数は非常に限られているため、カードとチケット api_ticket を頻繁に更新すると API 呼び出しが制限され、開発者自身のビジネスに影響を与えることになります。 開発者はカードとチケット api_ticket を独自にグローバルにキャッシュする必要があります。サービス。 1. access_token を取得するには、次のドキュメントを参照してください (有効期間 7200 秒、開発者は自分のサービスで access_token をグローバルにキャッシュする必要があります): ../15/54ce45d8d30b6bf6758f68d2e95bc627.html 2. 最初のステップで取得した access_token を使用して、http GET メソッドを使用してカードとクーポンの api_ticket をリクエストします (有効期間は 7200 秒、開発者はカードとクーポンの api_ticket を独自のサービスでグローバルにキャッシュする必要があります): https:/ /api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card カードとクーポンの拡張フィールドcardExtの説明 cardExt自体はJSON文字列です、これは販売者が行うことです 各カードとクーポンに割り当てられる固有の情報 (次のフィールドを含む): 署名手順 1. api_ticket を変更します (特記事項: api_ticket は、古いバージョンのドキュメントで署名資格情報として使用されている appsecret と互換性があります。)、タイムスタンプ、card_id、コード、 openid と nonce_str の値は、文字列の辞書順ソートを実行します。 2. すべてのパラメータ文字列を 1 つの文字列に連結し、sha1 暗号化を実行して署名を取得します。 3. 署名のタイムスタンプおよび nonce フィールドは、card_ext の timestamp および nonce_str フィールドと一致している必要があります。 4.code=jonyqin_1434008071、timestamp=1404896688、card_id=pjZ8Yt1XGILfi-FUsewpnnolGgZk、api_ticket=ojZ8YtyVyr30HheH3CM73y7h4jJE、nonce_str=jonyqinsign ature= sha1(1404896688jonyqinjonyqin_1434008071ojZ8YtyVyr30HheH3CM73y7h4jJE pjZ8Yt1XGILfi-FUsewpnnolGgZk)=6b81fbf6af16e856334153b39737556063c82689。 開発者は、カードおよびクーポン情報パッケージ内の署名ツール SDK を使用して署名するか、検証のためにデバッグ ツールを使用することを強くお勧めします: http://mp.weixin.qq.com/debug/cgi -bin/sandbox ?t=cardsign cardSign の手順 1. api_ticket の変更 (特記事項: api_ticket は appsecret よりも安全で、古いバージョンと互換性があります)ドキュメント) 署名証明書として appsecret を使用します。)、app_id、location_id、times_tamp、nonce_str、card_id、card_type の値を使用して文字列を辞書順に並べ替えます。 2. すべてのパラメータ文字列を 1 つの文字列に結合し、sha1 暗号化を実行して CardSign を取得します。 config インターフェイスを呼び出すときに、パラメーター debug: true を渡してデバッグ モードを有効にすると、ページでエラー メッセージが警告されます。以下は一般的なエラーと解決策です: 1.無効な URL ドメイン 現在のページのドメイン名は、使用されている appid にバインドされていません。バインドされたドメイン名は 80 (http) のみを正しく入力してください。 443 (https) ポートがサポートされているため、ポート番号を入力する必要はありません (1 つの appid を 3 つの有効なドメイン名にバインドできます)。 2. 無効な署名の署名エラー。次の順序で確認することをお勧めします: 1. 署名アルゴリズムが正しいことを確認し、http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t を使用できることを確認します。 =jsapisign ページ検証用ツール。 2. 設定内の nonceStr (js のキャメルケースの標準的な大文字の S) とタイムスタンプが、署名で使用されている対応する noncestr とタイムスタンプと一致していることを確認します。 3. URL が、「http(s)://」を含むページの完全な URL であることを確認します (現在のページのアラート(location.href.split('#')[0])で確認してください)。 「部分」と「?」 ' 以降の GET パラメータ部分ですが、'#' ハッシュ以降の部分は含みません。 4. config の appid が、jsapi_ticket の取得に使用された appid と一致していることを確認します。 5. access_token と jsapi_ticket を必ずキャッシュしてください。 6. 署名用に取得する URL が動的に取得されていることを確認してください。動的ページについては、サンプル コードの PHP 実装を参照してください。 HTML の静的ページの場合、フロントエンドの ajax を介して署名のために URL がバックエンドに渡されます。フロントエンドは、「#」ハッシュ部分を除く現在のページのリンクを取得する必要があります。 location.href.split('#')[0] によって取得され、encodeURIComponent が必要です)。これは、ページが共有されると、現在のリンクが取得されない場合、WeChat クライアントがリンクの末尾に他のパラメーターを追加するためです。動的に、共有ページの署名は失敗します。 3.アクセス許可の値がオフラインで検証中です。 このエラーは、構成が正しく実行されていないか、呼び出される JSAPI が構成の jsApiList パラメーターに渡されていないために発生します。次の順序で確認することをお勧めします: 1. 設定が正しく渡されていることを確認します。 2. ページのロード時に JSAPI が呼び出される場合は、wx.ready のコールバックに記述する必要があります。 3. config の jsApiList パラメータにこの JSAPI が含まれていることを確認します。 4.許可が拒否されました 公式アカウントにこの JSAPI を使用する許可がないか、呼び出される JSAPI が config の jsApiList パラメータに渡されていません (一部のインターフェイスでは、使用する前に認証が必要です)。 5. 機能が存在しません。現在のクライアントのバージョンはこのインターフェイスをサポートしていません。新しいバージョンにアップグレードして体験してください。 6. config: はバージョン 6.0.1 では OK ですが、バージョン 6.0.2 以降は OK ではないのはなぜですか (バージョン 6.0.2 より前では権限の検証がないため、設定はすべて OK ですが、これは意味するものではありません)構成内の署名は OK です。6.0.2 で正しい署名が生成されているかどうかを確認して、上位バージョンでも構成が OK であることを確認してください) 7. iOS と Android では共有できません (公式アカウントが認証されていることを確認してください。認証された公式アカウントのみが関連インターフェイスを共有する権限を持っています。実際に認証されている場合は、リッスン インターフェイスがトリガーされるかどうかを確認してください) wx.ready コールバック関数。) 8. サービスがオンラインになった後、自分でテストする場合は問題ありません。 (access_token と jsapi_ticket は独自のサーバーにキャッシュする必要があるため、そうしないとオンラインになった後に頻度制限がトリガーされます。サーバー リクエストを 2 つ減らすために必ずトークンとチケットをキャッシュしてください。これにより、頻度制限のトリガーが回避されるだけでなく、独自のサービスの速度も向上します。現在、10,000 件の取得は、しきい値を超えると使用できなくなります。サービスがオンラインになる前に、access_token と jsapi_ticket がグローバルにキャッシュされていることを確認してください。どちらも 7200 秒間有効です。それ以外の場合は、オンラインになると周波数制限が適用され、サービスは利用できなくなります。 10.ローカルで選択した画像をアップロードすることはできません (chooseImage インターフェイス自体がプレビューをサポートしており、追加のサポートは必要ありません) 11. リンク a を介してリンク B にジャンプします (たとえば、最初に WeChat 経由でログインを許可します)、無効な署名が失敗します (バックグラウンドで署名を生成するリンクは、ジャンプ後のリンク b です)。使用しないでください) WeChat ログインの承認されたリンクは、署名の計算に使用されます。バックグラウンドで署名された URL は、jssdk の現在のページから「#」部分を除いた完全な URL である必要があります)失敗エラーが発生します (これは渡された構成パラメータが不完全であるためです) 原因として、使用する正しい appId、タイムスタンプ、nonceStr、署名、および jsApiList を必ず渡してください) 13. マルチメディア リソースをダウンロードする方法。 jsapi によって WeChat から独自のサーバーにアップロードされます (ドキュメントのメモの UploadVoice インターフェイスと UploadImage インターフェイスを参照してください) 14. Android は jssdk を通じて WeChat サーバーにアップロードされ、サードパーティが WeChat から独自のサーバーにダウンロードします。サーバーにノイズが発生します (WeChat チームがこの問題を修正し、バックエンドが最適化され、オンラインになりました) 15. 親ドメイン名をバインドし、そのサブドメイン名も使用できるかどうかを確認します (はい、法的なサブドメイン名は使用できます)親ドメイン名をバインドした後は完全にサポートされます) 16. iOS WeChatバージョン6.1では、共有写真の外部リンクが表示されない問題は、公式アカウントページ内でリンクされた写真またはWeChatサーバーの写真のみ表示されます 17. 独自のバージョンを互換性のあるものにする必要がありますか? (jssdk は以前のバージョンと互換性があり、サードパーティが追加の作業を行う必要はありませんが、一部のインターフェイスは 6.0.2 で新たに導入されており、呼び出すことしかできません)新しいバージョンによる) 18. パブリック 支払い署名が無効なので、トランザクションを開始できません (使用している jweixin.js が公式のオンライン バージョンであることを確認してください。これにより、ユーザーのトラフィックが削減されるだけでなく、ただし、特定のバグを修正し、サードパーティのサーバーにコピーして使用します。公式 (発生した問題については保証しません) 19. 現在、Android WeChat クライアントは、pushState の新しい H5 機能をサポートしていません。そのため、pushState を使用して Web アプリ ページを実装すると、署名が失敗します。この問題は Android 6.2 で修正されました 20。Android では、chooseImage のコールバックで UploadImage が実行されないことがあります。この問題は、以前のバージョンをサポートする必要がある場合、setTimeout に呼び出して 100 ミリ秒遅らせることができます 21 このエラーは、テスト アカウントにサブスクライブしていないことを示します。テストアカウントに対してのみ表示されます 22. getLocation は GPS 座標を返し、openLocation によって開かれる Tencent マップは火星座標であるため、openLocation で返される座標には偏りがあり、バージョン 6.2 以降、火星座標を直接取得する必要があります。対応しました 23. 公式アカウントの表示(未追加): 現在、公式アカウントから拡散されたリンクのみ表示可能です 。 24. ICPファイリングデータの同期は1日遅れています。 http://demo.open.weixin.qq.com/jssdk サンプルコード: http://demo.open.weixin.qq.com/jssdk/sample.zip 注: リンクにはphp、java、nodejs、pythonが含まれていますサンプル コードはサードパーティの参照用です。サードパーティは、頻度制限がトリガーされないように、取得した accesstoken と jsapi_ticket を必ずキャッシュしてください。 メールの件名: [WeChat JS-SDK フィードバック] メールの内容の説明: 問題を簡潔な言葉で説明し、スクリーンショットを添付して問題が発生するシナリオを明確に説明してください。WeChat チーム。フィードバックはできるだけ早く処理されます。 パラメータ 必要ですか 説明 access_token は です インターフェース呼び出し認証情報
coplowed該当するカードとクーポンのリストを引いて、ユーザー選択情報を取得するパラメータ名 説明 errcode エラーコード errmsg エラーメッセージ チケット api_ticket、カードとクーポンインターフェイスへのサインインに必要な証明書 expires_in 有効時間 パラメータ名 必須 type 値の例 説明 shopId No string(24) 1234 ストアID。 shopID は、指定された location_list (shopID) でクーポン リストをフィルタリングして取得するために使用されますが、これは必須ではありません。 cardType No string(24) GROUPON カードタイプ。指定されたカードタイプのカードリストを取得するために使用されます。 CardType が空の場合、デフォルトですべてのカードとクーポンのリストが表示されますが、これは必須ではありません。 cardId No string(32) p1Pj9jr90_SQRaVqYI239Ka1erk Card ID、cardId When 指定されたカードリストを取得するために使用されます。空の場合、すべてのカードとクーポンのリストがデフォルトで表示されますが、これは必須ではありません。 timestamp は、 string(32) 14300000000 のタイムスタンプです。 nonceStr は、 string(32) sduhi123 ランダム文字列です。 のみをサポートしていますsignType は string(32) SHA1 署名メソッドであり、現在はSHA1 cardSign は ですstring(64) abcsdijcous123 署名済み。 フィールド 署名に参加するかどうか コード いいえ は で指定されたクーポンコードであり、1回のみ回収可能です。カスタム コード モードのカードとクーポンは入力する必要がありますが、非カスタム コード モードおよび事前保存コード モードのカードとクーポンは入力する必要がありません。詳細については、コードをカスタマイズするかどうかを参照してください。 openid いいえ は指定された受信者の openid であり、このユーザーのみが受信できます。 bind_openid フィールドが true のカードとクーポンは入力する必要がありますが、bind_openid フィールドは false なので入力する必要はありません。 タイムスタンプ は、 は タイムスタンプです。販売者は、1970年1月1日の00:00:00から現在までの秒数を生成します。これが現在時刻です。最後に、これを文字列形式に変換する必要があります。これは販売者によって生成され、渡されます。異なる追加リクエストのタイムスタンプを動的に生成する必要があります。これを繰り返すと、収集が失敗します。 。 nonce_str No は、開発者によって設定された セキュリティ強化のための🎜🎜ランダム文字列です(入力されない場合、リクエストは再実行される可能性があります)🎜。 32 文字以内のランダムな文字列。異なる追加リクエストには大文字と小文字、および数字を使用することをお勧めします。これを繰り返すと、収集が失敗します。 fixed_begintimestamp No No クーポンを受け取った時刻は10桁のタイムスタンプです。カードとクーポンの有効期間タイプが DATE_TYPE_FIX_TERM の場合にのみ使用され、カードとクーポンの実際の有効期限を識別し、開始時間と開始時間の間の非同期の問題を解決するために使用されます。販売者システムの収集時間。 outer_id No No このコレクションのチャネル値を識別するために使用される受信チャネルパラメータ。 signature は、 - 署名メソッドで、指定された署名方式を使用します。販売者は次のように仕様に従って署名し、提出します。