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); //这里是保存点击次数 //没有数据库的情况下 保证服务重启后点击次数不清零 //利用线程锁 使用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 */ 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) { 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); // 执行 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 调用微信 API 失败!", e); } finally {// 关闭连接,释放资源 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!