




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發技術】微信分享后臺接口簡單實現
這篇文章主要介紹了微信分享后臺接口簡單實現,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓在下帶著大家一起了解一下。此接口大致的流程是:用戶創建時間戳,隨機字符串,當前需要分享的頁面的url三個變量,接著將自己的appid和APPsecret作為請求參數獲取access_token,再根據access_token獲取jsapi_ticket,并將獲取的jsapi-ticket進行加密、校驗以及自己創建的三個變量進行簽名,注意簽名過程案按照key值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");
("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);
}
}
}獲取access_token;這里開發過程中要注意微信為了減輕對服務器的訪問壓力限制了access_token每天的生成次數以及使用時長;由于限制時長為7200s于是做了一個判斷再生成一個token后的2小時用同一個token;這里僅僅只是一個小接口于是選擇將最近一次的生成時間以及token存為靜態變量,
/**
*
微信分享,獲取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)
{
("第一次訪問"+current_time);
("(current_time
-
last_time)
/
1000===="+(current_time
-
last_time)
/
1000);
String
url
=
"/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{
("第二次訪問"+last_time);
("(current_time
-
last_time)
/
1000===="+(current_time
-
last_time)
/
1000);
("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
=
"/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);
//
執行
HttpResponse
response
=
httpclient.execute(httppost);
HttpEntity
entity
=
response.getEntity();
if
(entity
!=
null
&&
response.getStatusLine().getStatusCode()
==
200)
{
result
=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 采購專員崗位面試問題及答案
- 太空站物資管理師崗位面試問題及答案
- 湖北省十堰市張灣區東風高中2025屆高二化學第二學期期末達標檢測試題含解析
- 2025屆山東省煙臺市萊州市一中化學高一下期末學業水平測試試題含解析
- 供電公司計劃管理辦法
- 農村鄉鎮街區管理辦法
- 老年護理服務優化-洞察及研究
- 團青志愿服務管理辦法
- 民航企業準入管理辦法
- 杭州企業年金管理辦法
- 成都市郫都區七年級上學期語文期末考試試卷
- 市場營銷原理與實務形成性測試1-4答案
- 困難氣道管理指南2017
- 中學輿情應急處置預案
- 抗震支架施工技術交底
- GB/T 4169.13-2006塑料注射模零件第13部分:復位桿
- GB/T 31301.4-2015制鞋機械安全要求第4部分:鞋類成型機
- 三基院感試題和答案
- 2023年荊州松滋市社區工作者招聘考試筆試題庫及答案解析
- 工業廢水處理工(中級工)理論試題庫匯總-下(判斷題)
- 渠道激勵方案
評論
0/150
提交評論