java微信開發---jsapi介面授權和解綁裝置
- 在剛開始寫關於微信jsapi的時候可以說是一竅不通
- 資源又少幸好最終有笨笨大神幫忙終於搞定了
- 於是我果斷上傳微博希望對大家開發微信有幫助
微信開發API文件是必看的
例如
解綁裝置 需要:
欄位 | 是否必須 | 描述 |
---|---|---|
access_token | 是 | 呼叫介面憑證 |
ticket | 是 | 繫結操作合法性的憑證(由微信後臺生成,第三方H5通過客戶端jsapi獲得) |
device_id | 是 | 裝置id |
openid | 是 | 使用者對應的openid使用冒號來定義對齊方式 |
關於解綁裝置裡面的ticket 就是很關鍵的一個值了:
還是直接上程式碼吧!
頁面程式碼塊
程式碼塊語法遵循標準markdown程式碼:
<html>
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/jquery-1.2.6.pack.js">
</script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js">
</script>
<button class="className" onclick="del()">解綁裝置</button >
<script type="text/javascript">
var deviceId = "gh_62d23d084569_ced3197c64e6ce17";//裝置ID測試可以先寫死
//alert(location.href.split('#')[0]);//得到頁面的地址用於後臺的link
//config介面許可權配置 這裡在文件是有清晰的解釋
wx.config( {
//都是從後臺傳過來的值
beta : true, // 開啟內測介面呼叫,注入wx.invoke方法必填
debug : true, // 開啟除錯模式 必填
appId : '${config.appId}', // 第三方app唯一標識必填
timestamp : '${config.timestamp}' , // 簽名的時間戳必填
nonceStr : '${config.nonce}', // 生成簽名的隨機串必填
signature : '${config.signature}',//簽名 必填
jsApiList : [
//新增使用的函式
'openWXDeviceLib', 'getWXDeviceTicket' ]
});
//ready許可權驗證
wx.ready(function() {
wx.invoke('openWXDeviceLib', {}, function(res) {
//alert(res.err_msg + "唯一");
});
});
wx.error(function(res) {
//alert("我是wx.error");
});
//刪除
function del() {
if (confirm("確定要刪除嗎?") == false) {
return false;
} else {
//獲取的憑證
wx.invoke('getWXDeviceTicket',{"deviceId" : deviceId,"type" : 2},function(res) {
var ticket = res.ticket //就是要獲取的憑證就是上面我說的解綁ticket值了
alert(ticket + "獲取的憑證了嘛");
var url = "${pageContext.request.contextPath}/know.do?method=jiechu";//這裡用ajax傳到後臺進行解綁操作
$.post(url, {ticket : ticket}, function(data) {
if (data != null) {
alert(ticket + "true");
alert("解綁成功");
}
});
});
}
}
</script>
</html>
後臺程式碼塊
程式碼塊語法遵循標準markdown程式碼:
/**
* 帶簽名等引數進解綁頁面
*
* @throws Exception
*/
@RequestMapping(params = "method=unBind")
public String unBind() throws Exception {
JsAPIConfig config = Ticket
.createConfig("http://upanupanupan.gicp.net/demo/sports.do?method=unBind");//得到解綁頁面的地址
request.setAttribute("config", config);
return "/Unbound.jsp";
}
/**
* 獲取jsTicket
*
* @throws
*/
public static String getTicket() {
String ticket = null;
// 有效期為7200秒
String access_token = AccessTokenUtil.getTokenStr();
System.out.println("得到access_token值:" + access_token);
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="
+ access_token + "&type=jsapi";
try {
HttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = client.execute(httpget, responseHandler);
JSONObject userJSONO = JSONObject.fromObject(response);
ticket = String.valueOf(userJSONO.get("ticket"));
System.out.println("得到ticket值為::" + ticket);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ticket;
}
/**
* 生成JsAPIConfig 得到頁面需要引數
*
* @Title: createConfig
n: TODO
* @param @param link 使用的AirKiss 連結地址
* @param @return
* @param @throws Exception
* @return JsAPIConfig
* @throws
*/
public static JsAPIConfig createConfig(String link) throws Exception {
JsAPIConfig config = new JsAPIConfig();
config.setLink(link);//得到頁面地址
String nonce = UUID.randomUUID().toString();//得到生成簽名的隨機串
String timestamp = Long.toString(System.currentTimeMillis() / 1000);//得到時間戳
String src = "jsapi_ticket=" + Ticket.getTicket() + "&noncestr="
+ nonce + "×tamp=" + timestamp + "&url="
+ config.getLink();
String signature = SHA1.sha1(src);//根據以上的值得到簽名
String appId = WxConfig.APPID;
config.setAppId(appId);
config.setDebug(true);
config.setNonce(nonce);
config.setTimestamp(timestamp);
config.setSignature(signature);
System.out.println(config.getAppId() + "AppId來");
System.out.println(config.getLink() + "Link來");
System.out.println(config.getNonce() + "Nonce來");
System.out.println(config.getTimestamp() + "Timestamp來");
return config;
}
/**
* 排序並生成加密SHA1簽名
*/
public static String sha1(String src) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-1");
// 將三個引數字串拼接成一個字串進行sha1加密
byte[] digest = md.digest(src.getBytes());
return byteToStr(digest);
}
/**
* 將位元組陣列轉換為十六進位制字串
*
* @param byteArray
* @return
*/
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
/**
* 將位元組轉換為十六進位制字串
*
* @param mByte
* @return
*/
private static String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}
//這裡新建一個類,個人較懶就放在一起了
package com.bluelight.demo.util;
/**
* 伺服器端http請求工具類
*/
public class JsAPIConfig {
private boolean debug;
private String appId;
private String timestamp;
private String nonce;
private String signature;
private String title;
private String link;
private String signType;
private String packageName;
public JsAPIConfig() {
signType = "MD5";
}
public boolean isDebug() {
return debug;
}
public void setDebug(boolean debug) {
this.debug = debug;
}
public String getAppId() {
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public String getNonce() {
return nonce;
}
public void setNonce(String nonce) {
this.nonce = nonce;
}
public String getSignature() {
return signature;
}
public void setSignature(String signature) {
this.signature = signature;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getSignType() {
return signType;
}
public void setSignType(String signType) {
this.signType = signType;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
}
不懂可以去看文件或者找其他資料,或者加qq群(93472007)
目錄
用 [TOC]
來生成目錄:
相關推薦
java微信開發---jsapi介面授權和解綁裝置
在剛開始寫關於微信jsapi的時候可以說是一竅不通 資源又少幸好最終有笨笨大神幫忙終於搞定了 於是我果斷上傳微博希望對大家開發微信有幫助 微信開發API文件是必看的 例如 解綁裝置 需要: 欄位 是否必須 描述
java微信開發模板訊息介面使用
微信開發--模板訊息介面 原理: 1.微信公眾號(服務號) 設定模板標題和模板內容--》生成模板ID 2.設定填充模板資料(使用map封裝),匹配Id,傳送給使用者。 package com.dm.wx.domain.templateMsg;import
微信開發JS介面安全域名 網頁授權域名 業務域名
剛接觸微信開發,對後臺設定的幾個域名有點搞不清。看下微信後臺 公眾號設定-功能設定裡面,具體內容見下圖:1.業務域名 :據說是微信瀏覽器中訪問域名內容,和提示紅色安全提醒,新增到這裡面的域名就不存在這個問題。好像現在沒遇到過。 也不知道是否有其他用處,現在微信後臺(服務號設定
Java微信開發_01_微信開發包策略文件
target jdk1.6 extern .html 版本 無限 export oracle pan 微信java jar的加密key的大小支持 異常java.security.InvalidKeyException:illegal Key Size的解決方案
Java微信開發-崔用誌-微信開發-java版本
分享 bsp 基本 配置 版本 (九) get java微信 公眾 今天看到一些關於微信開發的知識蠻好的博客,分享給大家,希望對大家有幫助。 微信開發準備(一)--Maven倉庫管理新建WEB項目 微信開發準備(二)--springmvc+mybati
Java微信開發_02_本地服務器映射外網
ini spa web服務 tun 版本 nat for config online 一、工具列表 內網穿透的相關工具有: (1)natapp 官網 :https://natapp.cn/ (2)花生殼 官網:https://console.oray.com/
微信開發之網頁授權
個人信息 ati 關註 技術分享 lin base 定義 技術 參數 第一步:成為開發者 在自己的公眾號點擊基本配置,點擊基本配置,填寫服務器配置 Url服務器地址是微信回調地址,必須以 http://或https://開頭,端口號必須為80或443。 Token令
微信開發中網頁授權access_token與基礎支持的access_token異同
amp api ken 獲取 use 有效期 公眾號 分享 什麽 問題1:網頁授權access_token與分享的jssdk中的access_token一樣嗎?答:不一樣。網頁授權access_token 是一次性的,而基礎支持的access_token的是有時間限制的:7
企業微信開發免登授權時提示scope不能為空,錯誤代碼1001
sap oauth author chat esp amp hat dir QQ 企業免登授權提示scope不能為空1001 原因是我們是單頁面應用url自帶#/在微信裏面認為#號後面的參數不被識別 後端開發人員把參數放到跳轉?URL地址前面,正確形式是 https:/
微信開發之網頁授權取客戶資訊(微信測試號)
搞個賬號後 到開發者工具->公眾平臺測試賬號 第一步 設定一個域名 這個域名要外網能訪問 如果是自己測試的話 不用伺服器 就用內網對映(這裡推薦netapp) 這裡注意不用加什麼http:// 第二步 後臺寫一個介面 返回一個echostr給微
企業微信開發免登授權時提示scope不能為空,錯誤程式碼1001
最近在開發微信公眾號,發現發現經理配置的自定義選單有問題,然後就跟他說了聲,他讓我去修改,但是,我修改了之後直接就有這個問題 當時就是一臉懵逼的,我去,我就只改個引數,不至於全部連結都有問題吧,,然後確認了下,這個scope引數是有的,問題到底在哪裡?上網找了這邊文章:
java微信模板訊息介面的使用
通過之前的微信開發分享我們應該知道微信如果要給使用者主動傳送訊息可以使用客服訊息或多客服,但是傳送客服訊息使用者需在48小時內和微信公眾號有過互動,也就是說如果48小時內使用者沒和公眾號互動過,即使發了客服訊息使用者也可能接不到。除了上面的訊息形式外,其實微信還提供了一種模
Java微信開發-微信java開發接入平臺例項
package com.levi.service; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u
java微信開發傳送訊息
WeinxinCtroller.java package com.caiyl.zmd.weixin; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream
微信開發:網頁授權、跳轉至網頁
概述原文連結:http://blog.csdn.net/u011506468/article/details/47305261 微信參考:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
java 微信開發 常用工具類(xml傳輸和解析 json轉換物件)
與微信通訊常用工具(xml傳輸和解析) package com.lownsun.wechatOauth.utl; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; impo
1、JAVA微信開發-微商城_O2O微門店SAAS系統開發
部落格只用於記錄,不好勿噴! 已經很多年不曾發表部落格,很多年不曾玩CSDN了,有的時候翻看自己的部落格,以前的認知跟現有的認知是不同的,有些部落格有誤導,有誤導的地方勿噴,謝謝。 最近這段時間會比較充足,主要會將自己設計的一個saas微商城微門店的系統從定位到設計分
微信開發一--網頁授權
功能: 主要用於在使用者通過手機端微信訪問第三方H5頁面時獲取使用者的身份資訊(openId,暱稱,頭像,所在地等。。)可用來實現微信登入、微信賬號繫結、使用者身份鑑權等功能。 一、開發前的準備: 1、需要有一個公眾號,拿到AppID和AppSecret; 注意
Java微信開發之AirKiss
1、AirKiss介紹 2、JSAPI 微信硬體JSAPI介面屬於微信JS-SDK的一部分 微信JS-SDK是微信公眾平臺面向網頁開發者提供的基於微信內的網頁開發工具包。 使用微信JS-SDK,公眾號開發者可藉助微信高效地使用拍照、選圖、語音、位置、
微信開發獲取使用者授權方式
1、引導使用者進入授權頁面同意授權,獲取code https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.b