微信jsapi-java初步接入,信jsapi-java接入

來源:互聯網
上載者:User

jsapi-java初步接入,信jsapi-java接入

【公眾號對於開發人員來說】

接觸應該比大部分人都早,

記得那會開了號,大多數人還不知道什麼東東,

發展如此迅速,著實很強大。

很多次要開發一些公眾號的東西,

但是都卡在了“認證”上,

個人不能認證。


【發送給朋友的連結】

今天又遇到問題,想做一個自訂的發送給朋友的連結,

這麼簡單的功能,耗費了一下午,最後發現原來分享是需要認證的,

坑啊,做下記錄,希望對有同樣問題的人有協助。


【java代碼】

至於api什麼的自己去看吧,雖然比較費勁,但是也不是很難,直接上封裝了一部分的代碼:

package com.uikoo9.util.external;import java.util.Arrays;import java.util.HashMap;import java.util.Map;import java.util.UUID;import javax.servlet.http.HttpServletRequest;import org.json.JSONObject;import com.uikoo9.util.core.data.QStringUtil;import com.uikoo9.util.core.file.QPropertiesUtil;import com.uikoo9.util.core.http.QHttpClientUtil;import com.uikoo9.util.function.QCacheUtil;import com.uikoo9.util.function.QEncodeUtil;import com.uikoo9.util.function.QThreadUtil;/** * 工具類 * 1.校正合法性<br> * 2.擷取accesstoken<br> * 3.擷取jsticket<br> * 4.執行線程<br> * 5.擷取jsapi相關參數map<br> * @author qiaowenbin * @version 0.0.2.20150617 * @history *     0.0.2.20150617<br> *     0.0.1.20150206<br> */public class QWeixinUtil {        /**     * token校正     * @param request     * @param token     * @return     */    public static String checkToken(HttpServletRequest request, String token){        String signature = request.getParameter("signature");        String timestamp = request.getParameter("timestamp");        String nonce = request.getParameter("nonce");        String echostr = request.getParameter("echostr");                return checkToken(signature, timestamp, nonce, echostr, token);    }        /**     * token校正     * @param signature     * @param timestamp     * @param nonce     * @param echostr     * @param token     * @return     */    public static String checkToken(String signature, String timestamp, String nonce, String echostr, String token){        if(QStringUtil.allNotEmpty(signature, timestamp, nonce, echostr, token)){            StringBuilder sb = new StringBuilder();            String[] tmp = {token, timestamp, nonce};            Arrays.sort(tmp);            for(String s : tmp){                sb.append(s);            }                        String pwd = QEncodeUtil.sha1(sb.toString());            if(signature.equals(pwd)) return echostr;        }                return QStringUtil.emptyStr;    }        /**     * 擷取access_token     * @return     */    public static String getAccessToken(){        try {            String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + QPropertiesUtil.get("weixin.appid") + "&secret=" + QPropertiesUtil.get("weixin.appsecret");            JSONObject json = new JSONObject(QHttpClientUtil.get(url));                        return json.getString("access_token");        } catch (Exception e) {            e.printStackTrace();                        return null;        }    }    /**     * 擷取jsticket     * @return     */    public static String getJsTicket(String token){        try {            String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + token + "&type=jsapi";            JSONObject json = new JSONObject(QHttpClientUtil.get(url));                        return json.getString("ticket");        } catch (Exception e) {            e.printStackTrace();            return null;        }    }        /**     * 執行線程     */    public static void runWeixinThread(){        QThreadUtil.runScheduledBySeconds(new Runnable() {            public void run() {                String token = getAccessToken();                QCacheUtil.putToEHCache("weixintoken", token);                QCacheUtil.putToEHCache("weixinjsticket", getJsTicket(token));            }        }, 1, 7100);    }        /**     * 擷取jsapi相關參數map     * @param jsapi_ticket     * @param url     * @return     */    public static Map<String, String> getJsSignMap(String jsapi_ticket, String url) {        Map<String, String> map = new HashMap<String, String>();        String nonce_str = UUID.randomUUID().toString();        String timestamp = Long.toString(System.currentTimeMillis() / 1000);        String s = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "&timestamp=" + timestamp + "&url=" + url;        String signature = QEncodeUtil.sha1(s);        map.put("url", url);        map.put("jsapi_ticket", jsapi_ticket);        map.put("nonceStr", nonce_str);        map.put("timestamp", timestamp);        map.put("signature", signature);        return map;    }}

主要分為三塊:

1.token的驗證

2.緩衝accesstoken和jsticket

3.擷取js相關參數


對應的設定檔:

# weixin propertiesweixin.debug=falseweixin.token=yweixin.appid=yweixin.appsecret=y



另外在服務啟動的時候需要調用:QWeixinUtil.runWeixinThread();


【頁面】

跳轉到頁面的後台代碼:

private void initWeixinInfo(BlogArticleModel blog){        String jsTicket = (String) QCacheUtil.getFromEHCache("weixinjsticket");        String url = "http://uikoo9.com/blog/detail/" + blog.getStr("blog_article_code");        Map<String, String> map = QWeixinUtil.getJsSignMap(jsTicket, url);        setAttr("wxdebug", QPropertiesUtil.get("weixin.debug"));        setAttr("wxappid", QPropertiesUtil.get("weixin.appid"));        setAttr("wxtime", map.get("timestamp"));        setAttr("wxrandom", map.get("nonceStr"));        setAttr("wxsign", map.get("signature"));        setAttr("wxtitle", blog.getStr("blog_article_title"));        setAttr("wxurl", map.get("url"));    }



對應頁面代碼:

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>        <script type="text/javascript">            wx.config({                debug: ${wxdebug},                appId: '${wxappid}',                timestamp: ${wxtime},                nonceStr: '${wxrandom}',                 signature: '${wxsign}',                jsApiList: ['onMenuShareAppMessage']            });            wx.ready(function(){                wx.onMenuShareAppMessage({                    title: '${wxtitle}',                    desc: '${wxtitle}',                    link: '${wxurl}',                    imgUrl: 'http://uikoo9.qiniudn.com/@/img/logo.png'                });            });            /*            trigger: function (res) {                alert('使用者點擊發送給朋友');            },            success: function () {                 alert(1);            },            cancel: function () {                 alert(2);            },            fail: function (res) {                alert(JSON.stringify(res));            }            wx.error(function(res){                alert(JSON.stringify(res));            });            */        </script>


【幾點注意】

按上面的配置基本就可以了,需要注意幾點:

1.善用wx.error,這個可以用來調試錯誤

2.善用wx.config中的debug:true,也是調試,感覺沒有上面的有用


【坑爹的認證】

開啟wx.error如果這個時候你看到的是:

那麼恭喜你,你成功了,


但是如果,點擊發送給朋友還是沒有自訂,那麼恭喜你,

這個問題會糾結很久,


最後的最後我告訴你,因為沒有進行認證,所以和“分享”有關的你都沒有許可權。

而的認證個人是不能認證的,去註冊個公司吧~~


【更多】

更多精彩內容:uikoo9.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.