您的位置:首页 > 移动开发 > 微信开发

微信网页二维码扫描

2016-12-06 15:08 417 查看
微信扫一扫文档
 
 
1先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”
备注:登录后可在“开发者中心”查看对应的接口权限。
 
2在页面中引入js: https://res.wx.qq.com/open/js/jweixin-1.0.0.js 
 
3配置wx
wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见附录1
    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
 
注意:signature的生成最为关键
1)获取token https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=公众号id&secret=公众号秘钥 2)获取ticket   https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=上一步获取的token&type=jsapi
 
 
3)生成nature  function
getsignature(ticket) {

var nonceStr
= "1564sdf2s1d2f5";

Var timeStamp =
parseInt(new
Date().getTime() /
1000)
+ "";

var signatrue
= 'jsapi_ticket=' +
ticket +
'&noncestr=' +
nonceStr +
'×tamp=' +
timeStamp +
'&url=本网页的网络地址';

hex_sha1(signature);//进行sha1加密

}

sha1加密算法见附录1

4调用扫一扫接口

wx.scanQRCode({

desc:
'scanQRCode desc',

needResult:
0,

// 默认为0,扫描结果由微信处理,1则直接返回扫描结果,

scanType:
["qrCode",
"barCode"],

// 可以指定扫二维码还是一维码,默认二者都有

success:
function(res) {

alert("scan:" +
JSON.stringify(res));

var result
= res.resultStr;

// 当needResult 为 1 时,扫码返回的结果

},

fail:function(res){

alert("fail:" +
JSON.stringify(res));

}

});

 

 

附录1

var hexcase
= 0;
/*   hex   output   format.   0   -   lowercase;   1   -   uppercase                 */

var b64pad
= "";
/*   base-64   pad   character.   "="   for   strict   RFC   compliance       */

var chrsz
= 8;
/*   bits   per   input   character.   8   -   ASCII;   16   -   Unicode             */

 

function hex_sha1(s) {

return binb2hex(core_sha1(str2binb(s), s.length
* chrsz));

}

 

function b64_sha1(s) {

return binb2b64(core_sha1(str2binb(s), s.length
* chrsz));

}

 

function str_sha1(s) {

return binb2str(core_sha1(str2binb(s), s.length
* chrsz));

}

 

function hex_hmac_sha1(key,
data) {

return binb2hex(core_hmac_sha1(key, data));

}

 

function b64_hmac_sha1(key,
data) {

return binb2b64(core_hmac_sha1(key, data));

}

 

function str_hmac_sha1(key,
data) {

return binb2str(core_hmac_sha1(key, data));

}

 

/*   

 *   Perform   a   simple   self-test   to   see   if   the   VM   is   working   

 */

function sha1_vm_test() {

return hex_sha1("abc")
== "a9993e364706816aba3e25717850c26c9cd0d89d";

}

function core_sha1(x, len)
{

/*   append   padding   */

x[len >>
5]
|= 0x80
<< (24
- len
% 32);

x[((len +
64 >>
9)
<< 4)
+ 15]
= len;

 

var w
= Array(80);

var a
= 1732584193;

var b
= -271733879;

var c
= -1732584194;

var d
= 271733878;

var e
= -1009589776;

 

for(var
i =
0; i
< x.length; i
+= 16) {

var olda
= a;

var oldb
= b;

var oldc
= c;

var oldd
= d;

var olde
= e;

 

for(var
j =
0; j
< 80; j++) {

if(j
< 16) w[j]
= x[i
+ j];

else w[j]
= rol(w[j
- 3]
^ w[j
- 8]
^ w[j
- 14]
^ w[j
- 16],
1);

var t
= safe_add(safe_add(rol(a,
5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j)));

e =
d;

d =
c;

c =
rol(b, 30);

b =
a;

a =
t;

}

a =
safe_add(a, olda);

b =
safe_add(b, oldb);

c =
safe_add(c, oldc);

d =
safe_add(d, oldd);

e =
safe_add(e, olde);

}

return Array(a, b, c, d, e);

 

}

function sha1_ft(t,
b,
c,
d) {

if(t
< 20)
return(b
& c)
| ((~b)
& d);

if(t
< 40)
return b
^ c
^ d;

if(t
< 60)
return(b
& c)
| (b
& d)
| (c
& d);

return b
^ c
^ d;

}

 

function sha1_kt(t) {

return(t
< 20)
? 1518500249
: (t <
40)
? 1859775393
: (t <
60)
? -1894007588
: -899497514;

}

function core_hmac_sha1(key,
data) {

var bkey
= str2binb(key);

if(bkey.length
> 16) bkey
= core_sha1(bkey,
key.length
* chrsz);

 

var ipad
= Array(16),

opad =
Array(16);

for(var
i =
0; i
< 16; i++) {

ipad[i] =
bkey[i] ^
0x36363636;

opad[i] =
bkey[i] ^
0x5C5C5C5C;

}

 

var hash
= core_sha1(ipad.concat(str2binb(data)),
512 +
data.length *
chrsz);

return core_sha1(opad.concat(hash),
512 +
160);

}

 

function safe_add(x,
y) {

var lsw
= (x
& 0xFFFF)
+ (y
& 0xFFFF);

var msw
= (x
>> 16)
+ (y
>> 16)
+ (lsw
>> 16);

return(msw
<< 16)
| (lsw
& 0xFFFF);

}

 

/*   

 *   Bitwise   rotate   a   32-bit   number   to   the   left.   

 */

function rol(num,
cnt) {

return(num
<< cnt)
| (num
>>> (32
- cnt));

}

function str2binb(str) {

var bin
= Array();

var mask
= (1
<< chrsz)
- 1;

for(var
i =
0; i
< str.length
* chrsz; i
+= chrsz)

bin[i >>
5]
|= (str.charCodeAt(i
/ chrsz)
& mask)
<< (24
- i
% 32);

return bin;

}

function binb2str(bin) {

var str
= "";

var mask
= (1
<< chrsz)
- 1;

for(var
i =
0; i
< bin.length
* 32; i
+= chrsz)

str +=
String.fromCharCode((bin[i >>
5]
>>> (24
- i
% 32))
& mask);

return str;

}

function binb2hex(binarray) {

var hex_tab
= hexcase
? "0123456789ABCDEF" : "0123456789abcdef";

var str
= "";

for(var
i =
0; i
< binarray.length
* 4; i++) {

str +=
hex_tab.charAt((binarray[i >>
2]
>> ((3
- i
% 4)
* 8
+ 4))
& 0xF)
+ hex_tab.charAt((binarray[i
>> 2]
>> ((3
- i
% 4)
* 8))
& 0xF);

}

return str;

}

 

function binb2b64(binarray) {

var tab
= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

var str
= "";

for(var
i =
0; i
< binarray.length
* 4; i
+= 3) {

var triplet
= (((binarray[i
>> 2]
>> 8
* (3
- i
% 4))
& 0xFF)
<< 16)
| (((binarray[i
+ 1
>> 2]
>> 8
* (3
- (i
+ 1)
% 4))
& 0xFF)
<< 8)
| ((binarray[i
+ 2
>> 2]
>> 8
* (3
- (i
+ 2)
% 4))
& 0xFF);

for(var
j =
0; j
< 4; j++) {

if(i
* 8
+ j
* 6
> binarray.length
* 32) str
+= b64pad;

else str
+= tab.charAt((triplet
>> 6
* (3
- j))
& 0x3F);

}

}

return str;

}

 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信