国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
微信分享後臺(tái)介面簡(jiǎn)單實(shí)作
首頁(yè) 微信小程式 微信開發(fā) 最新整理出的微信分享後端介面實(shí)現(xiàn)的大致流程

最新整理出的微信分享後端介面實(shí)現(xiàn)的大致流程

Aug 01, 2018 am 11:36 AM

微信分享後臺(tái)介面簡(jiǎn)單實(shí)作

此介面大致的流程是:使用者建立時(shí)間戳,隨機(jī)字串,目前需要分享的頁(yè)面的url三個(gè)變量,接著將自己的appid和APPsecret作為請(qǐng)求參數(shù)獲取access_token,再根據(jù)access_token獲取jsapi_ticket, 並將獲取的jsapi-ticket進(jìn)行加密、校驗(yàn)以及自己創(chuàng)建的三個(gè)變量進(jìn)行簽名,注意簽名過(guò)程案按照key 值A(chǔ)SCII 碼升序排序封裝成json格式的資料傳送到前臺(tái)JS頁(yè)面,具體程式如下;

public class WeiXinShareAction extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private Integer main_count = 888;
    private String flag = "1";
    private Log logger = LogFactory.getLog(this.getClass());

    private String filePath = "/B.txt";

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        JsonObject jsonObject = new JsonObject();

        String ticket = null;
        String[] wxInfo = new String[] { "wx007344f87ae48300", "5442edc712b6846bdd1c058b7f2318fe" };
        WeiXinUtil wxu = new WeiXinUtil();
        String ticketResString;

        try {

            ticketResString = wxu.getShareJsapiTicket(wxInfo);
            if (StringUtils.isNotEmpty(ticketResString)) {
                JSONObject ticketJSONObject = JSONObject.fromObject(ticketResString);
                if (ticketJSONObject.getInt("errcode") == 0) {
                    ticket = JSONObject.fromObject(ticketResString).getString("ticket");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        if (StringUtils.isEmpty(ticket)) {
            jsonObject.addProperty("errcode", 10002);
            jsonObject.addProperty("errmsg", "ticket_error");
            this.responseWrite(jsonObject.toString(), response);
            return;
        }
        String noncestr = this.createNonceStr();
        int timestamp = this.createTimestamp();
        String requestRefererURL = request.getHeader("referer");
        flag = request.getParameter("temp");
        logger.info("flag--------------" + flag);
        //這里是保存點(diǎn)擊次數(shù)
        //沒有數(shù)據(jù)庫(kù)的情況下 保證服務(wù)重啟后點(diǎn)擊次數(shù)不清零
        //利用線程鎖 使用IO流 對(duì)點(diǎn)擊次數(shù)進(jìn)行修改保存
             Thread_readFile thf4 = new Thread_readFile();
             thf4.start();

        logger.warn("requestRefererURL: " + requestRefererURL);

        String signature = this.createSignature(noncestr, ticket, timestamp, requestRefererURL);

        jsonObject.addProperty("countNum", main_count);//點(diǎn)擊次數(shù)
        jsonObject.addProperty("errcode", 0);//
        jsonObject.addProperty("errmsg", "");//
        jsonObject.addProperty("wxuser", wxInfo[0]); // appId
        jsonObject.addProperty("timestamp", timestamp);//時(shí)間戳
        jsonObject.addProperty("noncestr", noncestr);//隨機(jī)字符串
        jsonObject.addProperty("signature", signature);//簽名
        response.setHeader("Access-Control-Allow-Origin", "*");
        this.responseWrite(jsonObject.toString(), response);
    }
    private void responseWrite(String content, HttpServletResponse response) {
        try {
            response.setCharacterEncoding("utf-8");
            response.getWriter().write(content);
        } catch (Exception e) {
            logger.error("responseWrite error in WeiXinShareAction", e);
        }
    }
}

取得access_token;這裡開發(fā)過(guò)程中要注意微信為了減輕對(duì)伺服器的存取壓力限制了access_token每天的生成次數(shù)以及使用時(shí)長(zhǎng);
由於限制時(shí)長(zhǎng)為7200s 於是做了一個(gè)判斷再生成一個(gè)token後的2小時(shí)用同一個(gè)token ;
這裡僅僅只是一個(gè)小接口於是選擇將最近一次的生成時(shí)間以及token 存為靜態(tài)變量,

    /**
     * 微信分享,獲取access_token
     */
    private String getWeiXinAccessToken(String[] wxInfo) throws Exception {
         //得到當(dāng)前時(shí)間
        long current_time = System.currentTimeMillis();
        // 每次調(diào)用,判斷expires_in是否過(guò)期,如果token時(shí)間超時(shí),重新獲取,expires_in有效期為7200
        if ((current_time - last_time) / 1000 >= 7200) {

            logger.info("第一次訪問"+current_time);
            logger.info("(current_time - last_time) / 1000===="+(current_time - last_time) / 1000);

            String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wxInfo[0]
                    + "&secret=" + wxInfo[1];

            String result = this.httpReqExecute(url);
            this.logger.warn("from weixin api accessToken: " + result);
            try {
                last_time = current_time; 
                if (StringUtils.isNotEmpty(result)) {
//                   解析respContent,并獲取其中的更新的key,
                    accessToken = JSONObject.fromObject(result).getString("access_token");
//                  保存access_token
                    return accessToken;
                }
            } catch (Exception e) {
                logger.error("getAccessToken error in WeiXinShareAction", e);
            }
        }else{
            logger.info("第二次訪問"+last_time);
            logger.info("(current_time - last_time) / 1000===="+(current_time - last_time) / 1000);
            logger.info("from weixin api accessToken:"+accessToken);
            return accessToken;
        }
        return null;
    }

根據(jù)access_token獲取jsapiTicket

    /**
     * 微信分享,獲取jsapiTicket
     */
    public String getShareJsapiTicket(String[] wxInfo) throws Exception {

        String access_Token = this.getWeiXinAccessToken(wxInfo);

        if (StringUtils.isEmpty(access_Token)) { // 獲取 accessToken 失敗
            //this.logger.warn(siteId + " accessToken is empty.");
            JsonObject jsonObject = new JsonObject();
            jsonObject.addProperty("errcode", "10000");
            jsonObject.addProperty("errmsg", "access_error");
            return jsonObject.toString();
        }

        String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_Token + "&type=jsapi";
        String jsapiTicket = this.httpReqExecute(url);
        this.logger.warn(" from weixin api jsapiTicket is: " + jsapiTicket);

        if (StringUtils.isNotEmpty(jsapiTicket)) {
            return jsapiTicket;
        }
        return null;
    }

Http遠(yuǎn)端呼叫

    private String httpReqExecute(String url) {
        String result = "";
        DefaultHttpClient httpclient = null;
        try {
            httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(url);
            // 執(zhí)行
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            if (entity != null && response.getStatusLine().getStatusCode() == 200) {
                result = EntityUtils.toString(entity, "UTF-8");
            }
        } catch (Exception e) {
            logger.error(" WeiXinShareAction 調(diào)用微信 API 失??!", e);
        } finally {// 關(guān)閉連接,釋放資源
            httpclient.getConnectionManager().shutdown();
        }
        return result;
    }

返回成功

 from weixin api accessToken: {"access_token":"12_9UgVn7tFVtvf_7r4Lq4V9W9-pQdZpqWxVjFsPoF3hv3J5_XfwQWqauj4n9-ZMikC1_oCp0IpBxjpZr-Ty8XzG8QMeV2QVukFz5_NP7kjAB05MX9msxRg0FlpAAMjonrrh5wxSEFfKHEc0_BDHFKjAFAXVA","expires_in":7200}

 from weixin api jsapiTicket is: {"errcode":0,"errmsg":"ok","ticket":"HoagFKDcsGMVCIY2vOjf9j_Us44Qhuo4KdgH5u8ewMjOCTUO44m1hKqgEsJYIyFR9HWrmmz-wrsb9KLdmpATRw","expires_in":7200}

相關(guān)文章:

實(shí)作Node.js在微信JS-SDK後端介面

#微信端h5頁(yè)面如何呼叫分享頁(yè)面的介面

javascript - 手機(jī)端的分享至微信?微信朋友圈qq好友的介面位址?

相關(guān)影片:

微信公眾平臺(tái)介面二次開發(fā)影片教學(xué)

以上是最新整理出的微信分享後端介面實(shí)現(xiàn)的大致流程的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)