java代码

  1. <dependency>
  2. <groupId>com.github.binarywang</groupId>
  3. <artifactId>weixin-java-mp</artifactId>
  4. <version>4.0.7.B</version>
  5. </dependency>
  1. import com.github.binarywang.wxpay.config.WxPayConfig;
  2. import com.github.binarywang.wxpay.service.WxPayService;
  3. import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
  4. import lombok.extern.slf4j.Slf4j;
  5. import me.chanjar.weixin.mp.api.WxMpService;
  6. import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
  7. import me.chanjar.weixin.mp.config.WxMpConfigStorage;
  8. import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
  9. import org.springframework.beans.factory.annotation.Value;
  10. import org.springframework.context.annotation.Configuration;
  11. import javax.annotation.PostConstruct;
  12. /**
  13. * 微信支付自动配置
  14. */
  15. @Configuration
  16. @Slf4j
  17. public class WxMpAutoConfiguration {
  18. private static WxMpService mpService;
  19. public static WxMpService getWxMpService() {
  20. return mpService;
  21. }
  22. @Value("${wx.public.account.appId}")
  23. private String mpAppId;
  24. @Value("${wx.public.account.appSecret}")
  25. private String mpSecret;
  26. @PostConstruct
  27. public void init() {
  28. log.info("微信公众号初始化 appId={}", appId);
  29. WxMpService wxMpService = new WxMpServiceImpl();
  30. WxMpDefaultConfigImpl mpConfigStorage = new WxMpDefaultConfigImpl();
  31. mpConfigStorage.setAppId(mpAppId);
  32. mpConfigStorage.setSecret(mpSecret);
  33. wxMpService.setWxMpConfigStorage(mpConfigStorage);
  34. mpService = wxMpService;
  35. log.info("微信公众号初始化完毕 ");
  36. }
  37. }
  1. @ApiOperation(value = "获取js签名", notes = "获取js签名")
  2. @GetMapping("/getJsConfig")
  3. public AjaxResult getJsConfig(String url) throws WxErrorException {
  4. WxMpService wxMpService = WxMpAutoConfiguration.getWxMpService();
  5. return AjaxResult.success(wxMpService.createJsapiSignature(url));
  6. }

前端代码

微信 JS 接口签名校验工具 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign

调用微信扫一扫的示例代码:

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
  6. <title>调用扫一扫</title>
  7. <style>
  8. </style>
  9. </head>
  10. <body>
  11. <div>点我调用扫一扫</div>
  12. </body>
  13. <script src='https://res.wx.qq.com/open/js/jweixin-1.0.0.js'></script>
  14. <script>
  15. var div=document.querySelector('div');
  16. var data;//接受配置信息
  17. var getWxConfig=function(){
  18. var xhr=null;
  19. if(window.XMLHttpRequest){
  20. xhr=new XMLHttpRequest();
  21. } else if(window.ActiveXObject){
  22. xhr=new ActiveXObject("Microsoft.XMLHTTP");
  23. }
  24. // xhr.open('get','http://xxx.com/prod-api/config/getJsConfig');
  25. // xhr.onreadystatechange=function(){
  26. // if(xhr.readyState==4&&xhr.status==200){
  27. // alert(xhr.responseText)
  28. // data=(xhr.responseText);
  29. // }
  30. // };
  31. // xhr.send();
  32. }
  33. getWxConfig();
  34. div.onclick=function(){
  35. wx.config({
  36. debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  37. // debug : true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  38. appId : "wx65a341c782f9b468", // 必填,公众号的唯一标识
  39. timestamp : "1653280580", // 必填,生成签名的时间戳
  40. nonceStr : "ZwXnrf3bzTaxzTcT", // 必填,生成签名的随机串
  41. signature : "c3cc903d94700da0f2e2f0ade253f83cd3fb9cea",// 必填,签名,见附录1
  42. jsApiList : ['checkJsApi', 'scanQRCode'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  43. });
  44. wx.ready(function() {
  45. wx.scanQRCode({
  46. needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
  47. scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
  48. success: function (res) {
  49. var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
  50. console.log(res);
  51. alert(res);
  52. var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
  53. sessionStorage.setItem('saomiao_result',result);
  54. //其它网页调用二维码扫描结果:
  55. //var result=sessionStorage.getItem('saomiao_result');
  56. }
  57. });
  58. });
  59. }
  60. </script>
  61. </html>

image.png
前端vue代码

  1. if (isWeiXin()) {
  2. var jweixin = require('jweixin-module')
  3. wxJsapi({
  4. url: location.href.split("#")[0]
  5. }).then(ras => {
  6. console.log(ras, 'wxJsapi')
  7. let params = ras.data
  8. jweixin.config({
  9. "appId": params.appId,
  10. "timestamp": params.timestamp,
  11. "nonceStr": params.nonceStr,
  12. "signature": params.signature,
  13. jsApiList: ["scanQRCode"] //根据需要看需要哪些SDK的功能
  14. });
  15. // sdk加载完成后执行
  16. jweixin.ready(() => {
  17. jweixin.checkJsApi({
  18. jsApiList: ['scanQRCode'],
  19. success: function(ras) {
  20. jweixin.scanQRCode({
  21. needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
  22. scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
  23. success: function (res) {
  24. console.log(res,'111111111');
  25. resolve(res)
  26. var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
  27. }
  28. });
  29. }
  30. });
  31. jweixin.error(function(res) {
  32. console.log("接口调取失败")
  33. });
  34. })
  35. })
  36. }