Heim  >  Artikel  >  WeChat-Applet  >  Wie ruft das WeChat-Applet mithilfe von Webview die WeChat-Scanfunktion auf?

Wie ruft das WeChat-Applet mithilfe von Webview die WeChat-Scanfunktion auf?

不言
不言Original
2018-09-06 11:48:348334Durchsuche

Der Inhalt dieses Artikels handelt davon, wie das WeChat-Applet Webview verwendet, um die WeChat-Scanfunktion aufzurufen. Ich hoffe, es wird Ihnen helfen .

Bei der Webentwicklung folgen wir dem Webentwicklungsprozess. Wenn wir das Webprojekt schnell in das Miniprogramm übertragen müssen, müssen wir die von bereitgestellte Webansicht verwenden Die Mini-Komponenten. Was seine Vorteile und die Konfiguration der Entwicklungsplattform betrifft, können Sie es entsprechend der öffentlichen WeChat-Plattform konfigurieren.
Ich werde hauptsächlich über die Verwendung erweiterter Funktionen in Webview (HTML) sprechen.
Zuallererst: Wenn wir die JSSDK-Konfiguration nicht erhalten, können wir nur einige Grundfunktionen wie Sprünge verwenden. Wenn Sie jedoch erweiterte Funktionen wie das WeChat-Scannen und das Öffnen von Fotoalben in der Webansicht (unserem HTML) direkt aufrufen möchten, müssen Sie diese HTML-Datei registrieren.

Front-End-Logik:

Der spezifische Prozess ist:

①Wenn die HTML-Seite initialisiert ist, fordern Sie unser Backend an Um grundlegende Konfigurationsdaten zu erhalten, ist der Parameter der URL-Pfad der aktuellen Seite, einschließlich des Parameterteils.
② Rufen Sie die Daten ab und rufen Sie die Methode wx.config auf, um diese HTML-Seite zu registrieren (beachten Sie, dass die Voraussetzung ist, dass der HTML-Code js geladen hat, bevor Sie c81d3a76c4c3b0472c89f71de40bbb9d2cacc6d41bbb37262a98f745aa00fbf0)
③Nachdem die Konfigurationsmethode erfolgreich war, können Sie problemlos einige erweiterte Funktionen verwenden.

Detaillierte Codeanzeige

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

Backend-JAVA-Logik:

Verarbeitungsablauf:

①Seiten-Nr. Es wird eine Anforderung zum Abrufen der Konfigurationsinformationen gestellt. Der Hintergrund verwendet die WeChat-Schnittstelle, um die Konfigurationsinformationen zu berechnen, sie zusammen zu speichern und sie dann an das Frontend zurückzugeben.
② Wenn die Seite nicht zum ersten Mal angefordert wird, und Wenn es nicht mehr als zwei Stunden her ist, werden die Konfigurationsinformationen der entsprechenden Seite direkt gefunden und an den Benutzer zurückgegeben. Bei mehr als 2 Stunden wird die WeChat-Schnittstelle erneut aufgerufen, um die Konfigurationsinformationen zu berechnen, zum Benutzer zurückzukehren und die gespeicherten Daten zu aktualisieren. (Die Java-Klasse, die ich hier verwende, wird im Speicher gespeichert. Der Wechsel zum Datenbankspeicher kann den Serverspeicher entsprechend reduzieren.)
③Warum müssen Sie beurteilen, ob die Neuberechnung mehr als zwei Stunden dauert? Da die erste Seite im Allgemeinen häufiger aktualisiert wird und zweitens die jssdk-Konfigurationsschnittstelle von WeChat nur begrenzt oft verwendet werden kann und nur mehrmals am Tag abgerufen werden kann, können wir sie nicht jedes Mal berechnen wir fordern es.

Backend-Code:

 /**
     * 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;
        }
    }

Verwandte Empfehlungen:

WeChat-Entwicklung WeChat-Scan-Login

WeChat-Entwicklung - So erhalten Sie den Rückrufwert in notify.php, der von der WeChat v3-Scancode-Zahlung 2 zurückgegeben wird

Teilen Sie die Probleme und Lösungen mit, die bei der Entwicklung der WeChat-Scancode-Zahlung aufgetreten sind – Anhang ist die _php-Instanz des Ecshop WeChat-Zahlungs-Plug-ins

Das obige ist der detaillierte Inhalt vonWie ruft das WeChat-Applet mithilfe von Webview die WeChat-Scanfunktion auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn