vue spa 微信jssdk二次分享不顯示自定義分享內容問題解決
阿新 • • 發佈:2019-03-08
本問題僅限於vue單頁應用開發時的討論。
1、不帶引數的網頁,如:http://xxx.com/#/CS350001/pray/buddha,分享後開啟的網址,
會變成這樣:http://xxx.com/?from=singlemessage&isappinstalled=0#/CS350001/pray/buddha,多了一串字元
?from=singlemessage&isappinstalled=0,這不影響,再開啟這個連結並分享,還是正常的。
2、帶引數的網頁,如:http://xxx.com/#/pray/videoDetail?orderId=64,分享後無法顯示自定義的分享內容,這是因為url在傳遞給後臺時帶有?等特殊字元,直接傳會導致驗籤失敗,所以需要url encode下,總結如下程式碼:
let url = window.location.href; this.$axios({ method:"get", url:'/wx/jssdk/config?url='+(url.indexOf('/?') == '-1'?url:encodeURIComponent(url)), }).then(function (response) {})
其中/wx/jssdk/config是我後臺介面地址,程式碼如下:
@GetMapping("config") public @ResponseBody JsonResult config() throws Exception { ApiConfigKit.putApiConfig(getApiConfig()); JsTicket jsApiTicket = JsTicketApi.getTicket(JsTicketApi.JsApiType.jsapi); String jsapi_ticket = jsApiTicket.getTicket(); String nonce_str = createNonceStr(); String url = getPara("url"); String timestamp = createTimestamp(); // 這裡引數的順序要按照 key 值 ASCII 碼升序排序 //注意這裡引數名必須全部小寫,且必須有序 String str = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "×tamp=" + timestamp + "&url=" + url; String signature = HashKit.sha1(str); Map<String,Object> map = new HashMap(); map.put("appId", ApiConfigKit.getApiConfig().getAppId()); map.put("nonceStr", nonce_str); map.put("timestamp", timestamp); map.put("url", url); map.put("signature", signature); map.put("jsapi_ticket", jsapi_ticket); return JsonResult.success(map); }
(ps:微信開發引入了jfinal-weixin)
如此一來,無論分享多少次,都會正常顯示自定義的分享內