【移動應用開發技術】微信分享后臺接口簡單實現_第1頁
【移動應用開發技術】微信分享后臺接口簡單實現_第2頁
【移動應用開發技術】微信分享后臺接口簡單實現_第3頁
【移動應用開發技術】微信分享后臺接口簡單實現_第4頁
【移動應用開發技術】微信分享后臺接口簡單實現_第5頁
免費預覽已結束,剩余2頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

【移動應用開發技術】微信分享后臺接口簡單實現

這篇文章主要介紹了微信分享后臺接口簡單實現,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓在下帶著大家一起了解一下。此接口大致的流程是:用戶創建時間戳,隨機字符串,當前需要分享的頁面的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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論