2018-03-14 17:40:36 geanwen 阅读数 2282

最近微信公众号网页开发项目遇到一个问题:

在吊起扫一扫功能的时候,Android端正常,iOS端总是提示config:fail 或者签名失败(sigxxxxxx)


Vue的项目,前几个类似的项目没遇到这种问题。这次微信配置和吊起的代码也是同事考培来的。


通过调试还有微信提供的签名验证工具都没问题;


因为Android端正常,说明逻辑是正确的,签名失败配置失败说明iOS端的参数是有问题的。

直接搜问题搜不到,最后从侧面看了下history模式,发现:


在路由配置的时候,即项目router下的路由文件中:

export default new Router({
  mode:'history',
     
     // ....省略不用代码

})

开启了history模式,注释掉后iOS吊起扫一扫正常;


因为history模式造成了,传入后台的url不对导致微信配置信息返回不正确,所以显示签名失败;

除了扫一扫外,分享等功能应该也会有这样的问题;


下面记录下weixin-js-sdk的配置和功能使用,以扫一扫为例:


步骤一:绑定JS接口安全域名


在'微信公众平台->设置->公众号设置->功能设置'中, 填写JS接口安全域名. 设置后, 公众号开发者才能在该域名下调用微信开放的JS接口. 


注:后台的端口号必须以 80开头;微信官方要求;



步骤二:引入JS文件


在项目根目录下的index.html文件中直接引入:

<!-- WXJSAPI -->
<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

注:如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,否则将无法在iOS9.0以上系统中成功使用JSSDK


步骤三:配置微信config


然后在你需要调用微信功能的界面中注册即可,如果项目需要多次调用或者需要微信多个功能,可以全局注册;


下面以微信扫一扫为例:


在界面初始化时注册wx.config:



// 初始化界面调用
// 传入的参数是要使用的功能对应的接口
// 其他功能对应的名字在官方文档中找(下面的是扫一扫)
mounted() {
            this.RegisterWxJsApi(["scanQRCode"]);
}

// 先通过后台接口获取微信配置的一些信息,一些保密或者动态信息放在后台处理是正常逻辑
// 后台具体逻辑在下面后台部分记录
// 下面的请求参数是按照ReliableA_Wechat项目走的,因为是公司文档,所以参数注释掉了
RegisterWxJsApi: function(jsApiList) {
    var url = "/后台配置信息获取接口";
    var req = {
        AppType: "xxxx",
        RequestUrl: window.location.href.split('#')[0]
    };
    this.$http.get(url, {
        params: req
    }).then(response => {
        wx.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: response.data.AppId, // 必填,公众号的唯一标识
            timestamp: response.data.TimeStamp, // 必填,生成签名的时间戳
            nonceStr: response.data.NonceStr, // 必填,生成签名的随机串
            signature: response.data.Sign, // 必填,签名,见附录1
            jsApiList: jsApiList // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        });
    });
}


 步骤四:吊起微信功能



按钮点击时吊起微信扫一扫


// 点击事件
clickEvent: function() {
                var _this = this;
                wx.ready(function() {
                    wx.scanQRCode({
                        needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                        scanType: ["barCode"], // 可以指定扫二维码还是一维码,默认二者都有
                        success: function(res) {
                            var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
                            var resultArr = result.split(",");
                            _this.Bind(resultArr[1]);
                        }
                    });
                    wx.error(function(res) {
                        var str = JSON.stringify(res);
                        alert(str);
                    })
                });
            },



2017-12-19 17:52:05 ij_fantasy 阅读数 2315

微信扫一扫功能在我们日常生活中很常见,那么微信jsapi是如何实现扫一扫功能的呢,接来下给大家详细介绍,并附有代码实现。

微信扫一扫

调起微信扫一扫接口

1
2
3
4
5
6
7
wx.scanQRCode({
    needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
    scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
    success: function (res) {
    var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
}
});


第一、新建jsp页面,并引入js库

1
2
<script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"> </script> 
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>

jweixin-1.1.0.js是调用微信jsapi的库,所以必须引入,第二行是本案例使用了jquery,所以引入的是jquery库

第二、引入界面样式,由于几节界面案例样式太难看,所以这次案例美化了一下界面。

1
<link rel="stylesheet" href="http://203.195.235.76/jssdk/css/style.css"/>

第三、<body></body>之间的html代码

1
2
3
4
5
6
7
8
<center><h3>欢迎来到微信jsapi测试界面-V型知识库</h3></center>
    <div class="lbox_close wxapi_form">
     <h3 id="menu-scan">微信扫一扫</h3>
      <span class="desc">调起微信扫一扫接口</span>
      <button class="btn btn_primary" id="scanQRCode0">scanQRCode(微信处理结果)</button>
      <button class="btn btn_primary" id="scanQRCode1">scanQRCode(直接返回结果)</button>
      
     </div>

第四、<script></script>之间初始化微信jsapi库添加接口函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
wx.config({  
    debug: true// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。  
    appId: '${appId}'// 必填,公众号的唯一标识  
    timestamp: '${ timestamp}' // 必填,生成签名的时间戳  
    nonceStr: '${ nonceStr}'// 必填,生成签名的随机串  
    signature: '${ signature}',// 必填,签名,见附录1  
    jsApiList: ['checkJsApi',
                'chooseImage',
                'previewImage',
                 'uploadImage',
                 'downloadImage',
                  'getNetworkType',//网络状态接口
                  'openLocation',//使用微信内置地图查看地理位置接口
                  'getLocation'//获取地理位置接口
                  'hideOptionMenu',//界面操作接口1
                  'showOptionMenu',//界面操作接口2
                  'closeWindow' ,  ////界面操作接口3
                  'hideMenuItems',////界面操作接口4
                  'showMenuItems',////界面操作接口5
                  'hideAllNonBaseMenuItem',////界面操作接口6
                  'showAllNonBaseMenuItem',////界面操作接口7
                  'scanQRCode'// 微信扫一扫接口
               // 必填,需要使用的JS接口列表,所有JS接口列表见附录2  
});

jsApiList数组中,最后一项就是我们调用微信扫一扫接口的函数,此函数必须在jsapi库中初始化,否则微信扫一扫功能无法调起。

第五、调用第三步button按钮的功能js代码,在wx.ready中添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 9 微信原生接口 开始---------------------
  // 9.1.1 扫描二维码并返回结果
  document.querySelector('#scanQRCode0').onclick = function () {
    wx.scanQRCode();
  };
  // 9.1.2 扫描二维码并返回结果
  document.querySelector('#scanQRCode1').onclick = function () {
    wx.scanQRCode({
      needResult: 1,
      desc: 'scanQRCode desc',
      success: function (res) {
        alert(JSON.stringify(res));
      }
    });
  };
 // 9 微信原生接口 结束---------------------

第六、完整的jsp页面代码,读者可直接复制运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <!-- www.vxzsk.com原创 -->
    <title>微信jsapi测试-V型知识库</title>
    <meta name="viewport" content="width=320.1,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
    <link rel="stylesheet" href="http://203.195.235.76/jssdk/css/style.css"/>
   <script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"> </script
   <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
    <style type="text/css">
    .desc{
    color: red;
    }
    </style>
  </head>
   
  <body>
  <center><h3>欢迎来到微信jsapi测试界面-V型知识库</h3></center>
    <div class="lbox_close wxapi_form">
     <h3 id="menu-scan">微信扫一扫</h3>
      <span class="desc">调起微信扫一扫接口</span>
      <button class="btn btn_primary" id="scanQRCode0">scanQRCode(微信处理结果)</button>
      <button class="btn btn_primary" id="scanQRCode1">scanQRCode(直接返回结果)</button>
      
     </div>
       
      
     <div style="display: none;"
     <h3 id="menu-webview">界面操作接口</h3><br>
      <span class="desc"  >隐藏右上角菜单接口</span><br>
      <button class="btn btn_primary" id="hideOptionMenu">hideOptionMenu</button><br>
      <span class="desc">显示右上角菜单接口</span><br>
      <button class="btn btn_primary" id="showOptionMenu">showOptionMenu</button><br>
      <span class="desc">关闭当前网页窗口接口</span><br>
      <button class="btn btn_primary" id="closeWindow">closeWindow</button><br>
      <span class="desc">批量隐藏功能按钮接口</span><br>
      <button class="btn btn_primary" id="hideMenuItems">hideMenuItems</button><br>
      <span class="desc">批量显示功能按钮接口</span><br>
      <button class="btn btn_primary" id="showMenuItems">showMenuItems</button><br>
      <span class="desc">隐藏所有非基础按钮接口</span><br>
      <button class="btn btn_primary" id="hideAllNonBaseMenuItem">hideAllNonBaseMenuItem</button><br>
      <span class="desc">显示所有功能按钮接口</span><br>
      <button class="btn btn_primary" id="showAllNonBaseMenuItem">showAllNonBaseMenuItem</button><br>
      <p>基础接口之判断当前客户端是否支持指定的js接口</p>   
     <input type="button" value="checkJSAPI" id="checkJsApi"><br>
     <span class="desc" style="color: red">地理位置接口-使用微信内置地图查看位置接口</span><br>
      <button class="btn btn_primary" id="openLocation">openLocation</button><br>
      <span class="desc" style="color: red">地理位置接口-获取地理位置接口</span><br>
      <button class="btn btn_primary" id="getLocation">getLocation</button><br>
     <span class="desc" style="color: red">获取网络状态接口</span><br>
      <button class="btn btn_primary" id="getNetworkType">getNetworkType</button><br>
      <h3 id="menu-image">图像接口</h3>
      <span class="desc">拍照或从手机相册中选图接口</span><br>
      <button class="btn btn_primary" id="chooseImage">chooseImage</button><br>
      <span class="desc">预览图片接口</span><br>
      <button class="btn btn_primary" id="previewImage">previewImage</button><br>
      <span class="desc">上传图片接口</span><br>
      <button class="btn btn_primary" id="uploadImage">uploadImage</button><br>
      <span class="desc">下载图片接口</span><br>
      <button class="btn btn_primary" id="downloadImage">downloadImage</button><br>
     
  <br>
  显示图片<img alt="" src="" id="faceImg">
  </div>
   
   
  <script type="text/javascript">
  wx.config({  
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。  
    appId: '${appId}', // 必填,公众号的唯一标识  
    timestamp: '${ timestamp}' , // 必填,生成签名的时间戳  
    nonceStr: '${ nonceStr}', // 必填,生成签名的随机串  
    signature: '${ signature}',// 必填,签名,见附录1  
    jsApiList: ['checkJsApi',
                'chooseImage',
                'previewImage',
                 'uploadImage',
                 'downloadImage',
                  'getNetworkType',//网络状态接口
                  'openLocation',//使用微信内置地图查看地理位置接口
                  'getLocation', //获取地理位置接口
                  'hideOptionMenu',//界面操作接口1
                  'showOptionMenu',//界面操作接口2
                  'closeWindow' ,  ////界面操作接口3
                  'hideMenuItems',////界面操作接口4
                  'showMenuItems',////界面操作接口5
                  'hideAllNonBaseMenuItem',////界面操作接口6
                  'showAllNonBaseMenuItem',////界面操作接口7
                  'scanQRCode'// 微信扫一扫接口
               ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2  
});  
   
wx.ready(function(){  
    // 5 图片接口
  // 5.1 拍照、本地选图
  var images = {
    localId: [],
    serverId: []
  };
  document.querySelector('#chooseImage').onclick = function () {
    wx.chooseImage({
      success: function (res) {
        images.localId = res.localIds;
        alert('已选择 ' + res.localIds.length + ' 张图片');
         $("#faceImg").attr("src", res.localIds[0]);//显示图片到页面上
      }
    });
  };
 
  // 5.2 图片预览
  document.querySelector('#previewImage').onclick = function () {
    wx.previewImage({
      current: 'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg',
      urls: [
        'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg',
        'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg',
        'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg'
      ]
    });
  };
 
  // 5.3 上传图片
  document.querySelector('#uploadImage').onclick = function () {
    if (images.localId.length == 0) {
      alert('请先使用 chooseImage 接口选择图片');
      return;
    }
    var i = 0, length = images.localId.length;
    images.serverId = [];
    function upload() {
      wx.uploadImage({
        localId: images.localId[i],
        success: function (res) {
          i++;
          //alert('已上传:' + i + '/' + length);
          images.serverId.push(res.serverId);
          if (i < length) {
            upload();
          }
        },
        fail: function (res) {
          alert(JSON.stringify(res));
        }
      });
    }
    upload();
  };
 
  // 5.4 下载图片
  document.querySelector('#downloadImage').onclick = function () {
    if (images.serverId.length === 0) {
      alert('请先使用 uploadImage 上传图片');
      return;
    }
    var i = 0, length = images.serverId.length;
    images.localId = [];
    function download() {
      wx.downloadImage({
        serverId: images.serverId[i],
        success: function (res) {
          i++;
          alert('已下载:' + i + '/' + length);
          images.localId.push(res.localId);
          if (i < length) {
            download();
          }
        }
      });
    }
    download();
  };
   
  // 6 设备信息接口
  // 6.1 获取当前网络状态
  document.querySelector('#getNetworkType').onclick = function () {
    wx.getNetworkType({
      success: function (res) {
        alert(res.networkType);
      },
      fail: function (res) {
        alert(JSON.stringify(res));
      }
    });
  };
  //网络接口结束
   
  // 7 地理位置接口 开始
  // 7.1 查看地理位置
  document.querySelector('#openLocation').onclick = function () {
    wx.openLocation({
      latitude: 23.099994,
      longitude: 113.324520,
      name: 'TIT 创意园',
      address: '广州市海珠区新港中路 397 号',
      scale: 14,
      infoUrl: 'http://weixin.qq.com'
    });
  };
 
  // 7.2 获取当前地理位置
  document.querySelector('#getLocation').onclick = function () {
    wx.getLocation({
      success: function (res) {
        alert(JSON.stringify(res));
      },
      cancel: function (res) {
        alert('用户拒绝授权获取地理位置');
      }
    });
  };
  // 7 地理位置接口 结束 
   
  // 8 界面操作接口 开始-----------
  // 8.1 隐藏右上角菜单
  document.querySelector('#hideOptionMenu').onclick = function () {
    wx.hideOptionMenu();
  };
 
  // 8.2 显示右上角菜单
  document.querySelector('#showOptionMenu').onclick = function () {
    wx.showOptionMenu();
  };
 
  // 8.3 批量隐藏菜单项
  document.querySelector('#hideMenuItems').onclick = function () {
    wx.hideMenuItems({
      menuList: [
        'menuItem:readMode', // 阅读模式
        'menuItem:share:timeline', // 分享到朋友圈
        'menuItem:copyUrl' // 复制链接
      ],
      success: function (res) {
        alert('已隐藏“阅读模式”,“分享到朋友圈”,“复制链接”等按钮');
      },
      fail: function (res) {
        alert(JSON.stringify(res));
      }
    });
  };
 
  // 8.4 批量显示菜单项
  document.querySelector('#showMenuItems').onclick = function () {
    wx.showMenuItems({
      menuList: [
        'menuItem:readMode', // 阅读模式
        'menuItem:share:timeline', // 分享到朋友圈
        'menuItem:copyUrl' // 复制链接
      ],
      success: function (res) {
        alert('已显示“阅读模式”,“分享到朋友圈”,“复制链接”等按钮');
      },
      fail: function (res) {
        alert(JSON.stringify(res));
      }
    });
  };
 
  // 8.5 隐藏所有非基本菜单项
  document.querySelector('#hideAllNonBaseMenuItem').onclick = function () {
    wx.hideAllNonBaseMenuItem({
      success: function () {
        alert('已隐藏所有非基本菜单项');
      }
    });
  };
 
  // 8.6 显示所有被隐藏的非基本菜单项
  document.querySelector('#showAllNonBaseMenuItem').onclick = function () {
    wx.showAllNonBaseMenuItem({
      success: function () {
        alert('已显示所有非基本菜单项');
      }
    });
  };
 
  // 8.7 关闭当前窗口
  document.querySelector('#closeWindow').onclick = function () {
    wx.closeWindow();
  };
 // 8 界面操作接口  结束------------------------------------------
  
 // 9 微信原生接口 开始---------------------
  // 9.1.1 扫描二维码并返回结果
  document.querySelector('#scanQRCode0').onclick = function () {
    wx.scanQRCode();
  };
  // 9.1.2 扫描二维码并返回结果
  document.querySelector('#scanQRCode1').onclick = function () {
    wx.scanQRCode({
      needResult: 1,
      desc: 'scanQRCode desc',
      success: function (res) {
        alert(JSON.stringify(res));
      }
    });
  };
 // 9 微信原生接口 结束---------------------
   
});  
 //初始化jsapi接口 状态
wx.error(function (res) {
  alert("调用微信jsapi返回的状态:"+res.errMsg);
});
   
 </script>
    
  </body>
</html>

上述jsp代码中有四个参数,这四个参数是成功调用微信jsapi的凭证,分别为appId(必填,公众号的唯一标识),timestamp(必填,生成签名的时间戳), nonceStr(必填,生成签名的随机串) ,signature(必填,签名),关于如何生成这四个参数,如果不知道的读者,请查看本页面左上角的菜单,里面有详细介绍,在这里不在累述。 

第六、上述代码运行后,效果如下

最后一张效果图是扫描二维码后返回的结果数据

此文章本站原创,地址 http://www.vxzsk.com/122.html   转载请注明出处!谢谢!

2017-07-28 16:14:28 Longyu144714 阅读数 4472

最近忙于工作,没有写博客,再做上个项目的时候遇到ios系统,苹果手机在微信公众号中调用微信扫码的时候失败了,其个中原因听下面细细道来

先来说说微信公众号web开发调用微信扫码,先要验证,然后再调用(首先要引入jweixin.js),其代码如下:

var url = "";
var req = {
    AppType:"XX",
    RequestUrl:window.location.href.split('#')[0]       
};  
this.$http.get(url,{params:req}).then(response =>{
    wx.config({
    debug:false, //开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打开,仅在pc端时才会打印。  
    appId: response.data.AppId, // 必填,公众号的唯一标识
    timestamp: response.data.TimeStamp, // 必填,生成签名的时间戳
    nonceStr: response.data.NonceStr, //必填,生成签名的随机串
    signature: response.data.Sign, // 必填,签名
    jsApiList: jsApiList // 必填,需要使用的JS接口列表,所用的JS接口列表见官方文档   
    });
})  

上面为初始化代码,接下来是调用代码:

wx.ready(function(){
    wx.scanQRCode({
        needResult:1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果  
        scanType:["barCode"], // 可以指定扫二维码还是一维码,默认二者都有
        success: function(res){
            var result = res.resultStr; // 当needResult 为1时,扫码返回的结果
            /*此处写对结果的处理*/           
        }   
    })  
})

上面的整个过程就是初始化及调用扫码,其中在初始化的时候,url,req的参数是自己所定义的,上面的仅供参考,在这个过程中一定要注意req的属性 RequestUrl,平常的获取URL中的服务器地址对于ios系统来说会验证失败的,例如使用

window.location.origin

这段代码获取在ios系统中会失败,必须用字符串截取方式,截取到固定的服务器地址,此问题困扰了我两天,只能这样解决!

2016-06-14 11:26:45 Edisonliao666 阅读数 4004

微信支付相信很多同学都做过,正常的流程是:app ->商户后台 ->微信支付后台,而微信开发者中提供的SDK也是指引我们去搭建一个自己的后台,然后去跟微信后台对接,微信SDK位置:

说完正常流程,说说不正常的流程–app直接跟微信后台对接,也就是说正常流程中的商户后台在app中去实现,当听到这个需求我真他妈醉了……

由于微信支提供了一份由于搭建后台的SDK,所以只好死马当活马医了,微信这样做也是好理解的,因为支付涉及到安全问题,把证书放在终端是不安全的,所以微信也没有弄个andoird的支付SDK,幸好微信给的这份SDK是java写的………..

既然是后台的代码,那我们先用强大的Eclipse瞅一眼长啥样
这里写图片描述
看到工程左上角蓝色的M吗?这是个maven工程,再次说明微信是指引我们去搭建一个自己的后台!

然后我强行把这个工程转移到Android Studio里面…..蛋蛋马上要碎
这里写图片描述
这里我把libs里面用到的其它jar包P掉,还原刚开始转移的情况,我建包按照maven工程项目结构来命名,意思就是Android Studio与Eclipse的项目结构是一样样的,好,然后天真的运行app…..
这里写图片描述
咦…这么少错误,好嗨森,我没有还原最初的app运行情况,第一次运行的时候是一大堆红色感叹号一大堆Error,内容的大概意思都跟这个一样,就是Jar包冲突!

jar包冲突的原因是,有两个或者多个jar包都实现了相同的功能,就如图,xpp3-1.1.4c跟xpp3_min-1.1.4c都用了apache的org.xmlpull.v1.XmlPullParserFactory,你可能会问,既然jar包冲突的话,为什么腾讯还把功能相同的jar包引进来呢?我个人觉得有两种情况,第一是这份SDK是要来开发后台用的,对于后台开发来说不存在这种问题;第二是腾讯让我们在几个jar包中选一个来用……但是我觉得应该是第一种情况

解决办法:既然是实现了相同的功能,那就留其中一个,这里选择xpp3-1.1.4c……类似的情况还有http开头的四个jar包,最后我只选择了httpclient-4.3.5这个

解决了这个问题,基本上就可以进行自己的开发,这里要夸一下微信的技术支持还是做得很好的!
这里写图片描述
最后,还是要吐槽一下这份微信支付SDK,除了代码里有注释说明,没有文档去说明这SDK咋用啊,差评!

2019-05-22 09:40:48 Candy_mi 阅读数 1016

因为项目里有个扫描快递单直接得到快递单号的需求,就顺便研究了一下wxjdk

关键代码如下:

1.提前获取扫一扫获取权限   先调用后台的接口成功之后根据后台返回的值获取授权 wx.config 

2.调用微信wx.scanQRCode  成功的回调得到结果(res.resultStr)然后做自己页面的逻辑

// 扫一扫获取授权
    author_WX() {
      getWeix({
        url: window.location.href
      }).then(function(data) {
        console.log(data);
        if (data.code == "100") {
          var getWeixData = data.extend.jsArr;
          wx.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: getWeixData[0], // 必填,公众号的唯一标识
            timestamp: getWeixData[2], // 必填,生成签名的时间戳
            nonceStr: getWeixData[1], // 必填,生成签名的随机串
            signature: getWeixData[4], // 必填,签名,见附录1
            jsApiList: ["scanQRCode"] // 必填,需要使用的JS接口列表,这里只说扫描,例如分享等都可以,只要写在数组里面就可以调用
          });
          //权限验证出错
          wx.error(function(res) {
            alert("出错了:" + res.errMsg);
          });
        }
      });

      
    },

    //扫码得到快递单号
    scan() {
      let that=this;
      console.log("扫码");
      wx.ready(function() {
        wx.checkJsApi({
          jsApiList: ["scanQRCode"],
          success: function(res) {
            wx.scanQRCode({
              needResult: 1,  // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
              scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
              success: function(res) {
                var result=res.resultStr.split(",");
                that.order_no=result[1];
                // Toast({
                //   message: result,
                //   position: "middle",
                //   duration: 5000
                // });
              },
              error: function(err) {
                alert("扫描失败::扫描码=" + err);
              }
            });
          }
        });
      });
    }

 

iOS扫码的那些事

阅读数 1231

没有更多推荐了,返回首页