当前位置:Gxlcms > JavaScript > JS 调用微信扫一扫功能

JS 调用微信扫一扫功能

时间:2021-07-01 10:21:17 帮助过:4人阅读

1.第一步:

设置调用微信js安全域名,就可以在该域名下调用微信的js接口

这里写图片描述

2.第二步:

将下面的js附在需要调用微信扫一扫的页面上,前提是需要引入微信的js[]

这里写图片描述

3.第三步:

参考官方文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=876521668&lang=zh_CN

通过后台获取js权限签名jsapi_ticket【参考文档:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E9.99.84.E5.BD.951-JS-SDK.E4.BD.BF.E7.94.A8.E6.9D.83.E9.99.90.E7.AD.BE.E5.90.8D.E7.AE.97.E6.B3.95】

后台获取签名代码:

  1. package com.epoch.wap.common;
  2. import java.io.IOException;
  3. import java.io.UnsupportedEncodingException;
  4. import java.security.MessageDigest;
  5. import java.security.NoSuchAlgorithmException;
  6. import java.util.Formatter;
  7. import java.util.HashMap;
  8. import java.util.Map;
  9. import java.util.UUID;
  10. import org.apache.http.HttpResponse;
  11. import org.apache.http.client.ClientProtocolException;
  12. import org.apache.http.client.methods.HttpGet;
  13. import org.apache.http.impl.client.HttpClients;
  14. import org.apache.http.util.EntityUtils;
  15. import com.epoch.common.utils.JsonUtil;
  16. /**
  17. * 官方给的使用js的验证工具
  18. * @author Administrator
  19. *
  20. */
  21. public class JsSignUtil {
  22. public static String accessToken = null;
  23. public static Map<String, Object> sign(String url) {
  24. String sendUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=**appid**&secret= **secret**";
  25. String result = getHttpResult(sendUrl);
  26. Object accessResult = JsonUtil.getValueFromJson(result, "access_token");
  27. String signUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accessResult.toString()+"&type=jsapi";
  28. String resultSign = getHttpResult(signUrl);
  29. Object ticket = JsonUtil.getValueFromJson(resultSign, "ticket");
  30. Map<String, Object> ret = new HashMap<String, Object>();
  31. String nonce_str = create_nonce_str();
  32. String timestamp = create_timestamp();
  33. String string1;
  34. String signature = "";
  35. //注意这里参数名必须全部小写,且必须有序
  36. string1 = "jsapi_ticket=" + ticket +
  37. "&noncestr=" + nonce_str +
  38. "×tamp=" + timestamp +
  39. "&url=" + url;
  40. try
  41. {
  42. MessageDigest crypt = MessageDigest.getInstance("SHA-1");
  43. crypt.reset();
  44. crypt.update(string1.getBytes("UTF-8"));
  45. signature = byteToHex(crypt.digest());
  46. }
  47. catch (NoSuchAlgorithmException e)
  48. {
  49. e.printStackTrace();
  50. }
  51. catch (UnsupportedEncodingException e)
  52. {
  53. e.printStackTrace();
  54. }
  55. ret.put("url", url);
  56. ret.put("nonceStr", nonce_str);
  57. ret.put("timestamp", timestamp);
  58. ret.put("signature", signature);
  59. ret.put("jsapi_ticket", ticket);
  60. ret.put("appId", "wx154f74654ae04891");
  61. return ret;
  62. }
  63. /**
  64. * 随机加密
  65. * @param hash
  66. * @return
  67. */
  68. private static String byteToHex(final byte[] hash) {
  69. Formatter formatter = new Formatter();
  70. for (byte b : hash)
  71. {
  72. formatter.format("%02x", b);
  73. }
  74. String result = formatter.toString();
  75. formatter.close();
  76. return result;
  77. }
  78. /*
  79. * 获取访问地址链接返回值
  80. */
  81. private static String getHttpResult(String url) {
  82. String result = "";
  83. HttpGet httpRequest = new HttpGet(url);
  84. try {
  85. HttpResponse httpResponse = HttpClients.createDefault().execute(httpRequest);
  86. if (httpResponse.getStatusLine().getStatusCode() == 200) {
  87. result = EntityUtils.toString(httpResponse.getEntity());
  88. }
  89. } catch (ClientProtocolException e) {
  90. e.printStackTrace();
  91. result = e.getMessage().toString();
  92. } catch (IOException e) {
  93. e.printStackTrace();
  94. result = e.getMessage().toString();
  95. }
  96. return result;
  97. }
  98. /**
  99. * 产生随机串--由程序自己随机产生
  100. * @return
  101. */
  102. private static String create_nonce_str() {
  103. return UUID.randomUUID().toString();
  104. }
  105. /**
  106. * 由程序自己获取当前时间
  107. * @return
  108. */
  109. private static String create_timestamp() {
  110. return Long.toString(System.currentTimeMillis() / 1000);
  111. }
  112. }

官方文档示例:

参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):../15/54ce45d8d30b6bf6758f68d2e95bc627.html

用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

4 第四步:

前台进入页面:`

  1. @RequestMapping(value = "/tiaoma")
  2. public String tiaoma( HttpServletRequest request,GoodsVO goods) throws Exception {
  3. String Url=request.getRequestURL()+"?"+request.getQueryString().toString();;
  4. Map<String, Object> resMap = new HashMap<String, Object>();
  5. resMap = JsSignUtil.sign(Url);
  6. request.setAttribute("nonceStr", resMap.get("nonceStr"));
  7. request.setAttribute("timestamp", resMap.get("timestamp"));
  8. request.setAttribute("signature", resMap.get("signature"));
  9. request.setAttribute("appId", resMap.get("appId"));
  10. request.setAttribute("url", resMap.get("url"));
  11. request.setAttribute("jsapi_ticket", resMap.get("jsapi_ticket"));
  12. return "index/tiaoma";
  13. }`

以上所述是小编给大家介绍的JS 调用微信扫一扫功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

人气教程排行