1. 程式人生 > >微信JS-SDK說明文件---自己總結了config時的引數獲取方式

微信JS-SDK說明文件---自己總結了config時的引數獲取方式

http://203.195.235.76/jssdk/

1、引入js


http://res.wx.qq.com/open/js/jweixin-1.0.0.js



 https://res.wx.qq.com/open/js/jweixin-1.0.0.js

 2、初始化

 wx.config({
    debug: true, // 開啟除錯模式,呼叫的所有api的返回值會在客戶端alert出來,若要檢視傳入的引數,可以在pc端開啟,引數資訊會通過log打出,僅在pc端時才會列印。
    appId: '', // 必填,公眾號的唯一標識
    timestamp: , // 必填,生成簽名的時間戳 見2.4
    nonceStr: '', // 必填,生成簽名的隨機串 見2.4
    signature: '',// 必填,簽名,見 2.3
    jsApiList: [] // 必填,需要使用的JS介面列表,所有JS介面列表見 2.5
});


2.1、獲取  access token

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

APPSECRET獲取方式 ,登入公眾號,基本配置
AppID(應用ID) wxd44e9d16ce2bdb2d
AppSecret 需要輸入正確的密碼才可以看見
 


返回{"access_token":"ACCESS_TOKEN","expires_in":7200}

2.2、獲取jsapi_ticket

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
返回
{
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
}

2.3、簽名演算法
    2.3.1 noncestr字串常量
    
        
        jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
        &
        noncestr=Wm3WZYTPz0wzccnW
        &
        timestamp=1414587457
        &
        url=http://mp.weixin.qq.com?params=value   (簽名用的url必須是呼叫JS介面頁面的完整URL)

    2.3.2、對上面資料進行shal1加密得到signature:

        0f9de62fce790f9a083d5c99e95740ceb90c27ed

2.4、加簽演算法類

import java.util.UUID;
import java.util.Map;
import java.util.HashMap;
import java.util.Formatter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;  

class Sign {
    public static void main(String[] args) {
        String jsapi_ticket = "jsapi_ticket";

        // 注意 URL 一定要動態獲取,不能 hardcode
        String url = "http://example.com";
        Map<String, String> ret = sign(jsapi_ticket, url);
        for (Map.Entry entry : ret.entrySet()) {
            System.out.println(entry.getKey() + ", " + entry.getValue());
        }
    };

    public static Map<String, String> sign(String jsapi_ticket, String url) {
        Map<String, String> ret = new HashMap<String, String>();
        String nonce_str = create_nonce_str();
        String timestamp = create_timestamp();
        String string1;
        String signature = "";

        //注意這裡引數名必須全部小寫,且必須有序
        string1 = "jsapi_ticket=" + jsapi_ticket +
                  "&noncestr=" + nonce_str +
                  "&timestamp=" + timestamp +
                  "&url=" + url;
        System.out.println(string1);

        try
        {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(string1.getBytes("UTF-8"));
            signature = byteToHex(crypt.digest());
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }

        ret.put("url", url);
        ret.put("jsapi_ticket", jsapi_ticket);
        ret.put("nonceStr", nonce_str);
        ret.put("timestamp", timestamp);
        ret.put("signature", signature);

        return ret;
    }

    private static String byteToHex(final byte[] hash) {
        Formatter formatter = new Formatter();
        for (byte b : hash)
        {
            formatter.format("%02x", b);
        }
        String result = formatter.toString();
        formatter.close();
        return result;
    }

    private static String create_nonce_str() {
        return UUID.randomUUID().toString();
    }

    private static String create_timestamp() {
        return Long.toString(System.currentTimeMillis() / 1000);
    }
}


2.5、jsApiList的值


     onMenuShareTimeline
    onMenuShareAppMessage
    onMenuShareQQ
    onMenuShareWeibo
    onMenuShareQZone
    startRecord
    stopRecord
    onVoiceRecordEnd
    playVoice
    pauseVoice
    stopVoice
    onVoicePlayEnd
    uploadVoice
    downloadVoice
    chooseImage
    previewImage
    uploadImage
    downloadImage
    translateVoice
    getNetworkType
    openLocation
    getLocation
    hideOptionMenu
    showOptionMenu
    hideMenuItems
    showMenuItems
    hideAllNonBaseMenuItem
    showAllNonBaseMenuItem
    closeWindow
    scanQRCode
    chooseWXPay
    openProductSpecificView
    addCard
    chooseCard
    openCard

基本類

    舉報: "menuItem:exposeArticle"
    調整字型: "menuItem:setFont"
    日間模式: "menuItem:dayMode"
    夜間模式: "menuItem:nightMode"
    重新整理: "menuItem:refresh"
    檢視公眾號(已新增): "menuItem:profile"
    檢視公眾號(未新增): "menuItem:addContact"

傳播類
   這塊知識把時間繫結到了分享按鈕,目前沒有辦法直接去操作按鈕。

    傳送給朋友: "menuItem:share:appMessage"
    分享到朋友圈: "menuItem:share:timeline"
    分享到QQ: "menuItem:share:qq"
    分享到Weibo: "menuItem:share:weiboApp"
    收藏: "menuItem:favorite"
    分享到FB: "menuItem:share:facebook"
    分享到 QQ 空間/menuItem:share:QZone

保護類

    編輯標籤: "menuItem:editTag"
    刪除: "menuItem:delete"
    複製連結: "menuItem:copyUrl"
    原網頁: "menuItem:originPage"
    閱讀模式: "menuItem:readMode"
    在QQ瀏覽器中開啟: "menuItem:openWithQQBrowser"
    在Safari中開啟: "menuItem:openWithSafari"
    郵件: "menuItem:share:email"
    一些特殊公眾號: "menuItem:share:brand"



<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
<script src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
  <script type="text/javascript">
  <!--
     wx.config({
    debug: true, // 開啟除錯模式,呼叫的所有api的返回值會在客戶端alert出來,若要檢視傳入的引數,可以在pc端開啟,引數資訊會通過log打出,僅在pc端時才會列印。
    appId: 'wx99a066ed3be3d52e', // 必填,公眾號的唯一標識
    timestamp: 1462521975, // 必填,生成簽名的時間戳
    nonceStr: '9f2c415b-0b8a-48be-ae2c-b4b92a76f494', // 必填,生成簽名的隨機串
    signature: '0f978b1b7884092cfb825fed7ea18bc9b9fd3b27',// 必填,簽名,見附錄1
    jsApiList: ['onMenuShareAppMessage'] // 必填,需要使用的JS介面列表,所有JS介面列表見附錄2
});

wx.ready(function () {
 
  wx.onMenuShareTimeline({

        title: '分享標題', // 分享標題

        link:"分享的url,以http或https開頭",

        imgUrl: "http://images2015.cnblogs.com/blog/340216/201603/340216-20160330130105738-634805951.png" // 分享圖示

    });

    // 獲取“分享給朋友”按鈕點選狀態及自定義分享內容介面

    wx.onMenuShareAppMessage({

        title: '分享標題', // 分享標題

        desc: "分享描述", // 分享描述

        link:"分享的url,以http或https開頭",

        imgUrl: "http://images2015.cnblogs.com/blog/340216/201603/340216-20160330130105738-634805951.png", // 分享圖示

        type: 'link', // 分享型別,music、video或link,不填預設為link

    });
 
});

     
  //-->
  </script>
 </head>
 <body>
 
 </body>
</html>