




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