Comment l'applet WeChat utilise-t-elle WebView pour appeler la fonction d'analyse WeChat ?

不言
Libérer: 2018-09-06 11:48:34
original
8346 Les gens l'ont consulté

Le contenu de cet article explique comment l'applet WeChat utilise la vue Web pour appeler la fonction d'analyse WeChat. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. .

Lorsque nous faisons du développement Web, nous suivons le processus de développement Web. Lorsque nous devons transplanter rapidement le projet Web dans le mini-programme, nous devons utiliser la vue Web fournie par. les composants du mini-programme. Concernant ses avantages et la configuration de la plateforme de développement, vous pouvez la configurer en fonction de la plateforme publique WeChat
Je parlerai principalement de la façon d'utiliser les fonctions avancées en webview (html).
Tout d'abord : lorsqu'on n'obtient pas la configuration jssdk, on ne peut utiliser que quelques fonctions de base comme les sauts. Mais lorsqu'il s'agit d'appeler directement des fonctions avancées telles que la numérisation WeChat et l'ouverture d'albums photo dans la vue Web (notre HTML), vous devez enregistrer ce fichier HTML.

Logique frontale :

Le processus spécifique est :

①Lorsque la page html est initialisée, demandez notre arrière-plan pour obtenir les données de configuration de base, le paramètre est le chemin de l'URL de la page actuelle, y compris la partie paramètre.
② Récupérez les données et appelez la méthode wx.config pour enregistrer cette page html (notez que le principe est que le code HTML a chargé js avant de pouvoir appeler )
③Une fois la méthode de configuration réussie, vous pouvez utiliser certaines fonctions avancées.

Affichage détaillé du code

<!-- 这个地方是在加载配置,实际页面中是页面渲渲染时通过“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>
Copier après la connexion

Logique JAVA backend :

Flux de traitement :

① La page demande les informations de configuration pour la première fois. L'arrière-plan utilise l'interface WeChat pour calculer les informations de configuration, les stocke ensemble, puis les renvoie au front-end
② Si la page n'est pas demandée pour la première fois, et cela ne fait pas plus de deux heures, les informations de configuration de la page correspondante sont directement retrouvées et renvoyées à l'utilisateur. Plus de 2 heures. Si cela dure plus de deux heures, l'interface WeChat est à nouveau appelée pour calculer les informations de configuration, revenir à l'utilisateur et mettre à jour les données stockées. (La classe Java que j'utilise ici est stockée dans la mémoire. Le passage au stockage de base de données peut réduire la mémoire du serveur en conséquence)
③Pourquoi devez-vous juger s'il faut plus de deux heures pour recalculer ? Parce que la première page est généralement actualisée plus fréquemment, et deuxièmement, l'interface de configuration jssdk de WeChat a une limite sur le nombre de fois qu'elle peut être utilisée, et elle ne peut être obtenue qu'un certain nombre de fois par jour, nous ne pouvons donc pas la calculer à chaque fois. nous le demandons.

Code backend :

 /**
     * 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;
        }
    }
Copier après la connexion

Recommandations associées :

Développement WeChat Connexion à l'analyse WeChat

Développement WeChat - Comment recevoir la valeur de rappel dans notify.php renvoyée par le paiement par scan code WeChat v3 2

Partagez les problèmes et les solutions rencontrés dans le développement du paiement par scan code WeChat - Ci-joint est l'instance du plug-in_php de paiement Ecshop WeChat

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal