


Der neueste allgemeine Prozess zur Implementierung der WeChat-Sharing-Back-End-Schnittstelle
Aug 01, 2018 am 11:36 AMEinfache Implementierung der WeChat-Sharing-Backend-Schnittstelle
Der allgemeine Prozess dieser Schnittstelle ist: Der Benutzer erstellt einen Zeitstempel, eine zuf?llige Zeichenfolge und die URL der Seite Das muss derzeit geteilt werden Drei Variablen, dann verwenden Sie Ihre App-ID und APPsecret als Anforderungsparameter, um access_token zu erhalten, dann erhalten Sie jsapi_ticket basierend auf access_token und verschlüsseln und überprüfen Sie das erhaltene jsapi-Ticket und signieren Sie die drei von Ihnen erstellten Variablen Der Prozess ist wie folgt: Der Schlüsselwert-ASCII-Code wird in aufsteigender Reihenfolge sortiert und die Daten werden im JSON-Format gekapselt und an die Front-End-JS-Seite gesendet. Der spezifische Vorgang ist wie folgt; Beim Entwicklungsprozess ist zu beachten, dass WeChat jeden Tag den Zugriff auf den Zugriff auf den Server begrenzt.
Da das Zeitlimit 7200 Sekunden betr?gt, haben wir ein Urteil gef?llt und das gleiche Token 2 Stunden nach der Generierung eines Tokens verwendet. Dies ist nur eine kleine Schnittstelle, daher haben wir uns entschieden, die letzte Generierungszeit zu ?ndern. Und das Token wird als statische Variable gespeichert,
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"); logger.info("flag--------------" + flag); //這里是保存點擊次數(shù) //沒有數(shù)據(jù)庫的情況下 保證服務(wù)重啟后點擊次數(shù)不清零 //利用線程鎖 使用IO流 對點擊次數(shù)進行修改保存 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);//點擊次數(shù) 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); } } }
Get jsapiTicket gem?? access_token
/** * 微信分享,獲取access_token */ private String getWeiXinAccessToken(String[] wxInfo) throws Exception { //得到當(dāng)前時間 long current_time = System.currentTimeMillis(); // 每次調(diào)用,判斷expires_in是否過期,如果token時間超時,重新獲取,expires_in有效期為7200 if ((current_time - last_time) / 1000 >= 7200) { logger.info("第一次訪問"+current_time); logger.info("(current_time - last_time) / 1000===="+(current_time - last_time) / 1000); String url = "https://api.weixin.qq.com/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{ logger.info("第二次訪問"+last_time); logger.info("(current_time - last_time) / 1000===="+(current_time - last_time) / 1000); logger.info("from weixin api accessToken:"+accessToken); return accessToken; } return null; }
Http-Remote-Aufruf
/** * 微信分享,獲取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 = "https://api.weixin.qq.com/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; }
Erfolgreich zurückkehren
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 = EntityUtils.toString(entity, "UTF-8"); } } catch (Exception e) { logger.error(" WeiXinShareAction 調(diào)用微信 API 失??!", e); } finally {// 關(guān)閉連接,釋放資源 httpclient.getConnectionManager().shutdown(); } return result; }
Verwandte Artikel:
Node.js in WeChat JS implementieren- SDK-Backend-SchnittstelleSo rufen Sie die Schnittstelle der freigegebenen Seite auf der WeChat h5-Seite aufJavascript – Wie lautet die Schnittstellenadresse der Freigabe für WeChat? WeChat Moments QQ-Freunde auf dem Handy? Video-Tutorial zur Sekund?rentwicklung der ?ffentlichen WeChat-PlattformschnittstelleDas obige ist der detaillierte Inhalt vonDer neueste allgemeine Prozess zur Implementierung der WeChat-Sharing-Back-End-Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)