基於微信公眾號掃描裝置二維碼並完成裝置啟用操作
微信公眾號掃描功能實現
自定義選單
微信公眾號是一個很好的業務展現工具,快速與客戶拉近距離,簡單的微信公眾號的維護和宣傳,非介面實現可以通過微信公眾號管理頁面實現,但是設計到一個數據和使用者互動行為,需要開發人員實現相應的微信公眾號提供的介面,完成相關的功能。
配置微信公眾號資料互動伺服器
填寫伺服器配置
驗證訊息的確來自微信伺服器
if (httpMethod.equals(HttpMethod.Http_Get))
{
if(null != operator && operator.equals("verifyToken")){
// 微信加密簽名(token、timestamp、nonce。)
String signature = httpServletRequest.getParameter ("signature");
String timestamp = httpServletRequest.getParameter("timestamp");// 時間戳
String nonce = httpServletRequest.getParameter("nonce");// 隨機數
String echostr = httpServletRequest.getParameter("echostr");// 隨機字串
verifyTokenSer (signature,timestamp,nonce,echostr,TOKEN);
}else
{
System.out.println("請求不合法,不支援HTTP方法");
}
}
public void verifyTokenSer(String signature, String timestamp, String nonce, String echostr, String token)
{
try
{
HttpServletResponse response = ServletActionContext.getResponse();
// 將token、timestamp、nonce三個引數進行字典序排序
String[] params = new String[]{token, timestamp, nonce};
Arrays.sort(params);
// 將三個引數字串拼接成一個字串進行sha1加密
String clearText = params[0] + params[1] + params[2];
String algorithm = "SHA-1";
String sign = new String(Hex.encodeHex(MessageDigest.getInstance(algorithm).digest((clearText).getBytes()), true));
// 開發者獲得加密後的字串可與signature對比,標識該請求來源於微信
if (signature.equals(sign))
{
response.getWriter().print(echostr);
}
} catch (Exception e)
{
e.printStackTrace();
}
}
TOKEN 為你設定的令牌,此介面為伺服器地址設定的校驗介面,在微信公眾號平臺校驗介面是否調通,如調通,使用者的掃描,關注公眾號等操作都會回撥到該伺服器。
獲取介面呼叫認證引數access_token
1 根據微信公眾號平臺提供的開發者ID(AppID)和開發者密碼獲取access_token
2 呼叫相關微信公眾號介面獲取access_token
注:1. 根據微信公眾號介面提示access_token 一天獲取次數有限制,而且一定時間需要重新獲取,或者會失效,access_token的有效期目前為2個小時,需定時重新整理,重複獲取將導致上次獲取的access_token失效,這裡不再描述。
2. 呼叫介面時,請登入“微信公眾平臺-開發-基本配置”提前將伺服器IP地址新增到IP白名單中,點選檢視設定方法,否則將無法呼叫成功。
關閉自定義選單
建立自定義選單
此時我們的公眾號選單就會顯示我們設定的選單項
移動端設計
FrozenUI移動端使用—這裡不再贅述,自行學習
點選掃描按鈕,完成掃描裝置二維碼及條形碼操作
微信JS-SDK的使用
想要在自己的伺服器端,尤其是移動端使用微信掃描功能,通過使用微信JS-SDK,網頁開發者可藉助微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時可以直接使用微信分享、掃一掃、卡券、支付等微信特有的能力,為微信使用者提供更優質的網頁體驗。
步驟一:繫結域名
先登入微信公眾平臺進入“公眾號設定”的“功能設定”裡填寫“JS介面安全域名”。
步驟二:引入JS檔案
在需要呼叫JS介面的頁面引入如下JS檔案,(支援https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js
步驟三:通過config介面注入許可權驗證配置
var ajaxParam = {
url: "http://889f29c4.ngrok.io/dcms/devActivate_data?operator=getConfig",
type: 'get',
async: true,
timeout: "",
dataType: 'json',
cache:false,
success: function (data, textStatus, jqXHR) {
if(data.code ==0){
var timestamp = data.data.timestamp;
var nonceStr = data.data.nonceStr;
var signature = data.data.signature;
// alert("signature:"+signature+"timestamp:"+timestamp+"nonceStr:"+nonceStr);
wx.config({
debug: false, // 開啟除錯模式,呼叫的所有api的返回值會在客戶端alert出來,若要檢視傳入的引數,可以在pc端開啟,引數資訊會通過log打出,僅在pc端時才會列印。
appId: '', // 必填,公眾號的唯一標識
timestamp:timestamp , // 必填,生成簽名的時間戳
nonceStr: nonceStr, // 必填,生成簽名的隨機串
signature: signature,// 必填,簽名
jsApiList: ["scanQRCode"] // 必填,需要使用的JS介面列表
});
}
},
error: function (xhr, textStatus, error) {
},
};
$.ajax(ajaxParam);
通過事件啟動掃描操作
wx.scanQRCode({
needResult : 1,
scanType : [ "qrCode", "barCode" ],
success : function(res) {
var resultStr = res.resultStr;
var errMsg = res.errMsg;
if(errMsg == "scanQRCode:ok"){
$("#scanQr").find("input").val(resultStr);
// alert(JSON.stringify(res));
}
},
fail : function(res) {
console.log(res)
// alert(JSON.stringify(res));
}
});