【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信分享后臺(tái)接口簡(jiǎn)單實(shí)現(xiàn)_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信分享后臺(tái)接口簡(jiǎn)單實(shí)現(xiàn)_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信分享后臺(tái)接口簡(jiǎn)單實(shí)現(xiàn)_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信分享后臺(tái)接口簡(jiǎn)單實(shí)現(xiàn)_第4頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信分享后臺(tái)接口簡(jiǎn)單實(shí)現(xiàn)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余2頁(yè)可下載查看

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論