Quelques petites étapes dans le développement de l'interface de partage WeChat, le contenu spécifique est le suivant
1. Configurer les informations d'interface pour la vérification
Le code est le suivant:
/** * Jump to access the unauthenticated address * * @param request * @return Login page * @throws Exception */ @RequestMapping(value = "/checkWxDomainUrl", method = RequestMethod.GET) public void checkWxDomainUrl(HttpServletRequest request) throws Exception { try { // After the developer submits the information, the WeChat server will send a GET request to the URL d'adresse du serveur rempli et la request Get comporte le paramètre String Signature = request.getParameter ("Signature"); // WECHAT Encryption Signature (Token, horodatamp, nonce.) String Timestamp = request.getParamet ("Timestamp" request.getParameter ("eChostr"); // String aléatoire // trie token token, horodatamp, nonce string [] params = new String [] {token, horodatamp, nonce}; Arrays.sort (params); // épisser trois chaînes de paramètres dans une chaîne pour la chaîne de cryptage Sha1 clearText = params [0] + params [1] + params [2]; Algorithme de chaîne = "sha-1"; String Sign = new String (hex.encodehex (MessagediGest.getInstance (algorithm) .digest ((clearText) .getBytes ()), true)); // L'auteur obtient la chaîne cryptée avec la signature, identifiant que la demande provient de WeChat if (Signature.Equals (Sign)) {Response.getWriter (). Print (eChostr); }} catch (exception e) {e.printStackTrace (); }}2.JS Configuration
3. Obtenez la page de partage JS Paramètres et obtenez un jeton et un billet pour ajouter au cache
/ ** * Nom de la méthode: getWxConfig </br> * Description détaillée: Obtenez des informations de configuration WeChat </br> * Développeur: GY * @param demande * @return Expliquez la signification de la valeur de retour * @throws expliquer la condition pour cette exception * / @Override Public Map Objet> (); String appid = wxconfigure.getAppid (); // requis, l'identifiant unique de la chaîne officielle de compte requestUrl = request.getRequestUrl (). ToString (); String AccessToken = null; String jSapiticket = null; String url = ""; String TimeStamp = long.ToString (System.CurrentTimeMillis () / 1000); // requis, générer la chaîne d'horodatage de signature noncestr = uuid.randomuuid (). ToString (); // requis, générer la chaîne aléatoire de signature // Ici, nous interrogeons d'abord dans le cache, et le temps valide de l'accès-token doit être défini dans le cache de requête de l'interface d'appel // reidemplate.opsforvalue (). GetOperations (). Delete (préfixe); // accessToken = (String) redetemplate.opsforvalue (). get (préfixe); Token AccessTokenFromredis = getAccessTokenFromredis (); AccessToken = AccessTokenFromredis.getAccessToken (); if (AccessTokenFromRedis.getAccessToken ()! = null) {jSapiticket = (String) redemplate.opsforvalue (). get (prefixticket); if (jsapiticket == null) {url = "https://api.weixin.qq.com/cgi-bin/ticket/GetTticket?access_token=" + AccessToken + "& type = jsapi"; JSONObject JSON = HttpRequest (URL, "Get", null); if (json! = null) {jSapiticket = json.getString ("ticket"); Redistetemplate.opsForValue (). Set (PrefixTicket, jSapiticket); Redistemplate.Expire (prefixTicket, Integer.ParseInt (wxConfigure.getExpiretime ()), timeunit.seconds); }}} String signature = ""; // Notez que les noms de paramètres ici doivent être tous minuscules et doivent être commandés dans la chaîne Sign = "JSAPI_TICKET =" + JSAPITICKET + "& NONCESTR =" + NONCESTR + "× TAMP =" + TimeStamp + "& url =" + requestrl; essayez {messagediGest crypt = messagediGest.getInstance ("sha-1"); crypt.reset (); crypt.update (Sign.GetBytes ("UTF-8")); Signature = byTetOhex (crypt.digest ()); } catch (NosuchalgorithMexception e) {e.printStackTrace (); } catch (UnportEnCcodingException e) {e.printStackTrace (); } ret.put ("appid", appid); Ret.put ("horodatage", horodatage); Ret.put ("Noncestr", Noncestr); ret.put ("signature", signature); return ret; } / ** * Nom de la méthode: bytetohex </br> * Description détaillée: Méthode auxiliaire de cryptage de chaîne </br> * Développeur: gy </br> * @param hash * @return Explication de la valeur de retour Signification * @throws Explication de la maladie pour cette exception * / private static string byTetohex (final byte [] hash) {formatter format pour (octet b: hash) {formatter.format ("% 02x", b); } String result = formatter.toString (); formatter.close (); Résultat de retour; } / ** * Obtenez AccessToken à partir de redis, spécifiez la valeur de chaîne de la clé, temps d'expiration 7200S * * @param clé * @return * / token public getAccessTokenFromredis () {token token = null; String évalueToken = (String) redetemplate.opsforvalue (). Get (wxconfigure.getTenkyKey ()); if (null! = AssessToken &&! "". Equals (AssessToken)) {token = new token (); token.setAccessToken (AssessToken); Token de retour; } else {token = Commonwxutil.getToken (wxConfigure.getAppid (), wxConfigure.getSecret ()); reidemplate.opsforvalue (). set (wxconfigure.getTokenKey (), token.getAccessToken ()); Redistemplate.Expire (wxConfigure.getTenkyKey (), Integer.ParseInt (wxConfigure.getExpiretime ()), timeunit.seconds); Token de retour; }}4. Introduction de JS liés à la page
<script type = "text / javascript" src = "http://res.wx.qq.com/open/js/jweixin-1.0.0.js"> </ script> <script type = "Text / javascript" src = "https://res.wx.qq.com/open> type = "text / javascript"> // wechat information and calle configuration // weChat Informations and Call Configuration var signature = $ ("# signature"). Val (); var appid = $ ("# appid"). val (); var appid = $ ("# appid"). val (); var horodatramp = $ ("# horodat"). Val (); var noncestr = $ ("# nonCest"). Val (); var userId = $ ("# userId"). Val (); var productName = 1; alert (signature); wx.config ({debug: false, appid: appid, horodatmp: horodatamp, non-closst: non -cestr, signature: signature, jsapilist: [`` onmenushareTimeline ',' onmenushareasage ',' onmenushareqq ',' onmenushareweibo ',' onmenushare '); wx.ready (function () {var isok = true; wx.checkjsapi ({jsapilist: ['onMenushareTimeline'], fail: function (res) {alert ("wechat version est trop faible, et la fonction partagée avec les amis n'est pas prise en charge!"); isok = false;}, fonction: fonction (res) {allert ("support qq."); Get the click status of the "Share to Moments" button and customize the sharing content interface wx.onMenuShareTimeline({ title: 'Part 6: How to customize the WeChat public account menu for practical Java version of WeChat public platform development', desc: 'Part 6: How to customize the WeChat public account menu for practical Java version of WeChat public platform development', link: 'http://4d536256.ngrok.io/login', imgurl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png', Success: Function (Res) {alert (json.stRintify (res)); $ .ajax ({type: "get", URL: 'insertcollectshare', data: {userId: userId,}, dataType: "json", async: false, succès: function (data) {alert (200);}, error: function (data) {var rurl = xhr.getReSener ('contenupath'); }); * // la fonction de rappel exécutée après que l'utilisateur confirme le partage / * la fenêtre.Leset WX.OnMenushAreAppMessage ({Titre: 'Part 7: Comment obtenir des informations de base des utilisateurs de WeChat dans le développement de la plate-forme publique de WeChat', // Partager le titre DESC: "Part 7: Comment obtenir des informations de base des utilisateurs de WeChat dans le développement de la plate-forme publique de Wechat ', // partager le lien:' http: //4d536256.ngrok.igin 'http: //4d536256. 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // Type d'icône de partage: 'lien', // Type de partage, musique, vidéo ou lien par défaut est lien}); Version Java pratique de WECHAT Public Platform Development ', // Partage Title Desc:' Part 6: Comment personnaliser le menu de compte public WeChat pour la version Java pratique du développement de la plate-forme publique WeChat ', // Lien de description:' http://4d536256.ngrok.io/login ', // Lien de partage imgurl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // Partager l'icône Success: function () {// Fonction de rappel exécutée après l'utilisateur Partage}, Function () {// Fonction de rappel exécutée après le partage de l'utilisateur CANCELS}}); wx.onmenushareweibo ({title: 'partager à Tencent Weibo Title', // Titre de partage desc: 'Partager à Tencent Weibo Description', // Part Description Link: 'http://4d536256.ngrok.io/login', // Partager le lien Imgurl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // Partager l'icône Succès: fonction () {// Fonction de rappel exécutée après le partage de l'utilisateur}, Function () {// Fonction de rappel exécutée après le partage de l'utilisateur CANCELS "Partage de coustruction); wx.onmenushareqzone ({Titre: 'partager le titre d'espace QQ 11111111111111', // Partager le titre desc: 'partager à QQ Space Description 22222222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222222 'http://4d536256.ngrok.io/login', imgUrl:'http://busc.4ggogo.com/media/media/img/home-show-a.png', // Sharing icon success: function () { // The callback function executed after the user confirms the sharing}, cancel: function () { // The callback function executed after the L'utilisateur annule le partage}});});Remarque: le chemin transféré est le chemin du nom de domaine configuré, sinon il ne peut pas être appelé, et la taille de l'image ne peut pas être supérieure à 300k
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.