JS-SDK
微信JS-SDK是微信公眾平台 面向網頁開發者提供的基於微信內的網頁開發工具包。
通過使用微信JS-SDK,網頁開發者可借助微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時可以直接使用微信分享、掃一掃、卡券、支付等微信特有的能力,為微信用戶提供更優質的網頁體驗。
JS-SDK使用步驟
l 步驟一:綁定域名
先登錄微信公眾平台進入“公眾號設置”的“功能設置”里填寫“JS接口安全域名”。
備注:登錄后可在“開發者中心”查看對應的接口權限。
l 步驟二:引入JS文件
在需要調用JS接口的頁面引入如下JS文件, http://res.wx.qq.com/open/js/jweixin-1.2.0.js
備注:支持使用 AMD/CMD 標准模塊加載方法加載
l 步驟三:通過config接口注入權限驗證配置
所有需要使用JS-SDK的頁面必須先注入配置信息,否則將無法調用。
wx.config({
debug: true, //
開啟調試模式
,
調用的所有
api
的返回值會在客戶端
alert
出來,若要查看傳入的參數,可以在
pc
端打開,參數信息會通過
log
打出,僅在
pc
端時才會打印。
appId: '', //
必填,公眾號的唯一標識
timestamp: , //
必填,生成簽名的時間戳
nonceStr: '', //
必填,生成簽名的隨機串
signature: '',//
必填,簽名
jsApiList: [] //
必填,需要使用的
JS
接口列表
});
l 步驟四:通過ready接口處理成功驗證
wx.ready(function(){
// config
信息驗證后會執行
ready
方法,所有接口調用都必須在
config
接口獲得結果之后,
config
是一個客戶端的異步操作,所以如果需要在頁面加載時就調用相關接口,則須把相關接口放在
ready
函數中調用來確保正確執行。對於用戶觸發時才調用的接口,則可以直接調用,不需要放在
ready
函數中。
});
l 步驟五:通過error接口處理失敗驗證
wx.error(function(res){
// config
信息驗證失敗會執行
error
函數,如簽名過期導致驗證失敗,具體錯誤信息可以打開
config
的
debug
模式查看,也可以在返回的
res
參數中查看,對於
SPA
可以在這里更新簽名。
});
l 接口調用說明
所有接口通過wx對象(也可使用jWeixin對象)來調用,參數是一個對象,除了每個接口本身需要傳的參數之外,還有以下通用參數:
- success:接口調用成功時執行的回調函數。
- fail:接口調用失敗時執行的回調函數。
- complete:接口調用完成時執行的回調函數,無論成功或失敗都會執行。
- cancel:用戶點擊取消時的回調函數,僅部分有用戶取消操作的api才會用到。
- trigger: 監聽Menu中的按鈕點擊時觸發的方法,該方法僅支持Menu中的相關接口。
以上幾個函數都帶有一個參數,類型為對象,其中除了每個接口本身返回的數據之外,還有一個通用屬性errMsg,其值格式如下:
調用成功時:"xxx:ok" ,其中xxx為調用的接口名
用戶取消時:"xxx:cancel",其中xxx為調用的接口名
調用失敗時:其值為具體錯誤信息
具體調用接口信息請參考
微信公眾平台(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115)
代碼示例
<?php
$appId="your appid";
$appSecret="your appSecret";
// 獲取 access_token
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".appId."&secret=".appSecret;
$res = json_decode(httpGet($url));
$accessToken = $res->access_token;
// 獲取 jsapi_ticket
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".$accessToken;
$res = json_decode(httpGet($url));
$jsapiTicket = $res->ticket;
// 注意 URL 一定要動態獲取,不能 hardcode.
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$timestamp = time();
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$nonceStr = "";
for ($i = 0; $i < $length; $i++) {
$nonceStr .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
// 這里參數的順序要按照 key 值 ASCII 碼升序排序
$string = "jsapi_ticket=".$jsapiTicket."&noncestr=".$nonceStr."×tamp=".$timestamp."&url=".$url;
$signature = sha1($string);
$signPackage = array(
"appId" => appId,
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"signature" => $signature
);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
/*
* 注意:
* 1. 所有的JS接口只能在公眾號綁定的域名下調用,公眾號開發者需要先登錄微信公眾平台進入“公眾號設置”的“功能設置”里填寫“JS接口安全域名”。
* 2. 如果發現在 Android 不能分享自定義內容,請到官網下載最新的包覆蓋安裝,Android 自定義分享接口需升級至 6.0.2.58 版本及以上。
* 3. 常見問題及完整 JS-SDK 文檔地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
*
* 開發中遇到問題詳見文檔“附錄5-常見錯誤及解決辦法”解決,如仍未能解決可通過以下渠道反饋:
* 郵箱地址:weixin-open@qq.com
* 郵件主題:【微信JS-SDK反饋】具體問題
* 郵件內容說明:用簡明的語言描述問題所在,並交代清楚遇到該問題的場景,可附上截屏圖片,微信團隊會盡快處理你的反饋。
*/
wx.config({
debug: true,
appId: '<?php echo $signPackage["appId"];?>',
timestamp: <?php echo $signPackage["timestamp"];?>,
nonceStr: '<?php echo $signPackage["nonceStr"];?>',
signature: '<?php echo $signPackage["signature"];?>',
jsApiList: [
// 所有要調用的 API 都要加到這個列表中
]
});
wx.ready(function () {
// 在這里調用 API
});
wx.error(function(res){
// config信息驗證失敗會執行error函數
});
</script>
</html>