WeChat アプレット Webview は WeChat スキャン関連関数を直接呼び出します

WeChat アプレット Webview は WeChat スキャン関連関数を直接呼び出します

Web 開発を行うときは、Web 開発プロセスに従いますが、Web プロジェクトをミニ プログラムにすぐに移植する必要がある場合は、ミニ プログラムが提供する Webview コンポーネントを使用する必要があります。その利点と開発プラットフォームの構成については、WeChat パブリック プラットフォームに合わせて構成できますが、
ここでは主に WebView (HTML) の高度な機能の使用方法について説明します。
まず第一に、jssdk 設定を取得しない場合、ジャンプなどのいくつかの基本的な機能しか使用できません。ただし、WeChat スキャンや Web ビュー (HTML) でフォト アルバムを開くなどの高度な機能を直接呼び出す場合は、この HTML ファイルを登録する必要があります。

 フロントエンドロジック:

具体的なプロセスは次のとおりです。

          ① HTML ページの初期化時にバックエンドに基本的な設定データを要求しますが、パラメータはパラメータ部分を含む現在のページの URL パスです。
          ② データを取得し、wx.config メソッドを呼び出してこの HTML ページを登録します (<script type="text/javascript" src="https://res. wx.qq.com/open/js/jweixin-1.3.2.js"></script>) 
          ③設定メソッドが成功すると、いくつかの高度な機能を快適に使用できるようになります。

特定のコードの表示

<!-- 这个地方是在加载配置,实际页面中是页面渲渲染时通过“java后台jssdkconfig”接口从我们的后台获取参数,然后赋值给下面对应的字段”-->
  <script type="text/javascript">
        wx.config({
           debug: true,//是否开启调试
           appId: 'xxxxxxxxxxx',//小程序appid
           timestamp: '1534925207',//时间搓,单位秒
           nonceStr: 'HT5Ab5moviaVdp7XegNnRBivrETgPmu2',//随机字符串
           signature: 'd73acd8eec5a4c1a6a86c7e0517bedff78e72fd9',//签名md5
           jsApiList: ['startRecord','stopRecord','playVoice','uploadVoice','downloadVoice','onVoiceRecordEnd','translateVoice','downloadVoice', 'onMenuShareTimeline','onMenuShareAppMessage','scanQRCode','getLocation','chooseImage','getLocalImgData','uploadImage']//当前html需要用到的接口
          });
  </script>


バックグラウンドの JAVA ロジック:

 処理の流れ:

    ① ページは初めて構成情報を要求します。バックグラウンドは WeChat インターフェースを使用して構成情報を計算し、保存し、フロントエンドに返します。 ② ページは初めて要求されず 
    、 2 時間以内に対応するページの構成情報が直接検索され、ユーザーに返されます。2 時間を超える場合: 2 時間を超える場合は、WeChat インターフェイスが再度呼び出され、構成情報が計算され、ユーザーに返され、保存されたデータが更新されます。(ここで使用するJavaクラスはメモリ上に格納されています。データベースストレージに変更するとその分サーバーのメモリを削減できます)
    ③再計算に2時間以上かかるかどうかを判断する必要があるのはなぜですか?一般的に最初のページはより頻繁に更新され、次に WeChat の jssdk 設定インターフェースには使用回数に制限があり、1 日に何回しか取得できないため、毎回計算することはできません。私たちはそれを要求します。

コードビハインド:

 /**
     * webview——JSSDK使用配置信息获取
     */
    @ResponseBody
    @RequestMapping(value = "User/GetJsSdk_Config")
    public Map<String, Object> GetJsSdk_Config(@RequestBody HashMap<String, Object> data, HttpSession session)
            throws KeyStoreException, NoSuchAlgorithmException, CertificateException, Exception {
        Map<String, Object> resultmap = new HashMap<String, Object>();
        User user = (User) session.getAttribute("user");
        if (user == null) {
            resultmap.put("state", false);
            resultmap.put("message", "未登录或登录超时");
            return resultmap;
        }
        if (data.get("url") == null) {
            resultmap.put("state", false);
            resultmap.put("message", "参数不全");
            return resultmap;
        }
        String url = data.get("url").toString();

        Map<String, Object> one_jassdkcofig = AllJssdkConfig.TheconfigBeoVerdue(url);
        if (one_jassdkcofig != null)// 如果当前页面配置信息还未过期
        {
            resultmap.put("sate", true);
            resultmap.put("message", "");
            resultmap.put("beta", one_jassdkcofig.get("beta"));
            resultmap.put("debug", one_jassdkcofig.get("debug"));// 是否开启调试
            resultmap.put("appId", one_jassdkcofig.get("appId"));// 公众号的appid
            resultmap.put("timestamp", one_jassdkcofig.get("timestamp"));// 时间搓、秒
            resultmap.put("nonceStr", one_jassdkcofig.get("nonceStr"));// 随即字符
            resultmap.put("signature", one_jassdkcofig.get("signature"));// sha1加密码
            resultmap.put("jsApiList", "所有需要用到的接口");// 需要使用的接口
            System.out.println("找到配置!不用计算");
            System.out.println(resultmap);
            return resultmap;
        }

        String token = user_wxAPI.GetInstance().get_jssdk_accesstoken();
        String ticket = user_wxAPI.GetInstance().get_jssdk_ticket(token);
        resultmap = user_wxAPI.GetInstance().get_jssdk_config(ticket,url);
        if (resultmap!=null) {
            resultmap.put("sate", true);
            resultmap.put("message", "");
            AllJssdkConfig.SaveOneConfig(url, resultmap);// 更新jasdk数组配置
            System.out.println("没有找到配置!重新计算");
            System.out.println(resultmap);
            return resultmap;
        } else {
            resultmap=new HashMap<String, Object>();
            resultmap.put("sate", false);
            resultmap.put("message", "后台获取jssdk_ticket出错");
            return resultmap;
        }
    }

 


 

おすすめ

転載: blog.csdn.net/qq_22824481/article/details/82258461