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

目次
WeChat 共有バックグラウンド インターフェイスは実裝が簡単です
ホームページ WeChat アプレット WeChatの開発 WeChat 共有バックエンド インターフェイスを実裝する最新の一般的なプロセス

WeChat 共有バックエンド インターフェイスを実裝する最新の一般的なプロセス

Aug 01, 2018 am 11:36 AM

WeChat 共有バックグラウンド インターフェイスは実裝が簡単です

このインターフェイスの一般的なプロセスは次のとおりです: ユーザーは 3 つの変數 (タイムスタンプ、ランダムな文字列、現在共有する必要があるページの URL) を作成します。獨自の appid と APPsecret をリクエストパラメータとして使用します access_token を取得し、その access_token に基づいて jsapi_ticket を取得し、取得した jsapi-ticket を自分で作成した 3 つの変數で暗號化、検証、署名します。署名プロセスは でソートされていることに注意してください。キー値の ASCII コードで昇順に変換され、json 形式のデータにカプセル化されてフロントエンド JS ページに送信されます。具體的な手順は次のとおりです。

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);
        //這里是保存點擊次數
        //沒有數據庫的情況下 保證服務重啟后點擊次數不清零
        //利用線程鎖 使用IO流 對點擊次數進行修改保存
             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);//點擊次數
        jsonObject.addProperty("errcode", 0);//
        jsonObject.addProperty("errmsg", "");//
        jsonObject.addProperty("wxuser", wxInfo[0]); // appId
        jsonObject.addProperty("timestamp", timestamp);//時間戳
        jsonObject.addProperty("noncestr", noncestr);//隨機字符串
        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);
        }
    }
}

開発プロセス中、WeChat では制限があることに注意してください。サーバーへの負荷を軽減するため、1 日あたりの access_token の生成回數と使用時間
制限時間が 7200 秒であるため、トークンを生成してから 2 時間後に同じトークンを使用するという判斷を行いました。インターフェイスが小さいため、最新の生成時刻とトークンを靜的変數として保存することにしました。

    /**
     * 微信分享,獲取access_token
     */
    private String getWeiXinAccessToken(String[] wxInfo) throws Exception {
         //得到當前時間
        long current_time = System.currentTimeMillis();
        // 每次調用,判斷expires_in是否過期,如果token時間超時,重新獲取,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;
    }

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リモート呼び出し

    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 調用微信 API 失??!", e);
        } finally {// 關閉連接,釋放資源
            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}
関連記事:

Node.jsの実裝WeChat JS-SDK バックエンドインターフェイス內

WeChat h5 ページの共有ページのインターフェイスを呼び出す方法

javascript - 攜帯電話で WeChat に共有 WeChat Moments の QQ フレンドのインターフェイス アドレスは何ですか?

関連ビデオ:

WeChat パブリック プラットフォーム インターフェイスの二次開発ビデオ チュートリアル

以上がWeChat 共有バックエンド インターフェイスを実裝する最新の一般的なプロセスの詳細內容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)