nodejsの二次元コードスキャン-両替自動照合を実現します.
34878 ワード
nodejs二次元コードスキャン—両替自動照合を実現します.背景 概略実装 開発環境 依存症 マイクロクレジットのウェブページのライセンス 第一歩:ユーザーが授権に同意し、コード を取得する.第二ステップ:codeを通じてウェブページを交換してaccess_を授権します.token 第3ステップ:ユーザ情報を引く(scopeがsnsaphiuuserinfoである必要がある) ドラックコード 第1ステップクライアント要求 第2ステップバックグラウンドは、第1ステップ分のタグのsrc要求 を受信する.第3段階のバックグラウンドは、WeChatウェブページの許可のコールバック を受信する.注意 背景
この文章は主に、掃符号器がない場合にどのユーザが掃走査を用いているかを識別するための二次元コードを実現するためである.設計の由来:主に会社のプロジェクトの機能は、クーポンのような為替コードを二次元コードに生成した後、ユーザーは二次元コードを商店に展示し、商店が二次元コードをスキャンして照合します.このように関連するどのように判断するかは、一般のユーザーがスキャンしたものではなく、事業体がスキャンしたものですか?
概観を実現する
ユーザーがクーポンをクリックすると、対応する二次元コード(該当商品の情報付き)->ユーザー/取引先が二次元コードをスキャンします.WeChatページのライセンスを行います.(両替情報などの一般情報のみ表示)
開発環境
1.nodejs
依存関係
1.Qr-inmage(実はまだユーザー数が多いnode-qrcodeがありますが、本機能の実現が煩雑なので、小衆のqr-mageを選択しました.):主に二次元コードを動的に表示するために、バックグラウンドで二次元コード画像を保存する必要がありません.2.WeChatページのライセンス:どのユーザがスキャンしたかを識別するための二次元コードです.
WeChatのホームページのライセンス
第一歩:ユーザーが授権に同意し、コードを取得する
WeChat公衆アカウントがライセンススコープ(scopeパラメータ)の権限を持っていることを確認した上で(サービス番号が高度なインターフェースを獲得した後、デフォルトではscopeパラメータの中のsnsapeiとsnsaphiuuserinfoを保有しています)、注目者に次のページを開くように案内します.
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 「このリンクはアクセスできません.」と表示されたら、パラメータが間違っているかどうかを確認してください.scopeパラメータに対応する権限を持っていますか?(WeChatを自分のルートに戻したい時に自分のパラメータを持っています.コールバックルートに自分のパラメータを追加して、url符号化を行います.これで自分のパラメータを持って帰ってきます.具体的には下を見て実現できます.)
第二ステップ:codeを通じてウェブページを交換してaccesst tokenを授権します.
まず注意してください.ここでcodeを通じて交換したのは特殊なウェブページのライセンスaccessatokenであり、基本的なサポートのaccesstokenであります.異なっています.公式アカウントは次のインターフェースを通じてウェブページのライセンスaccessautkenを取得できます.ウェブページのライセンスの役割領域がsnsapi ubaseであれば、このステップでウェブページのライセンスaccessatokenを取得するとともに、openidを取得しました.snsapiスタイルのウェブページのライセンスプロセスはここで終了します.
特に、公衆番号のsecretと取得したaccessatokenのセキュリティレベルは非常に高いので、サーバのみに保存し、クライアントに転送することはできません.accessatokenの更新、ユーザー情報の取得などの手順もサーバから開始しなければなりません.
請求方法
コードを取得した後、以下のリンクにaccessatokenを取得してください.https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
ステップ3:ユーザ情報を引き出す(scopeがsnsaphiuuserinfoである必要がある)
ウェブページのライセンスのスコープがsnsaphiuuserinfoの場合、開発者はaccessonとopenidを通じてユーザー情報を引き出すことができます.
請求方法
http:GET(httpsプロトコルを使用してください.)https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
この呼び出しは、主として、ユーザの詳細情報を取得して、バックグラウンドのチェックに用い、自分のバックグラウンドの中の取引先かそれとも普通のユーザかを識別するためである.
ドライコード
第一歩クライアント要求
二次元コードをスキャンする時は、WeChatのスキャンを使ってください.他のスキャンツールを使うと、WeChatクライアントを使って開くなどの情報が提示されます.
より良い解決策を提案することを歓迎します.
この文章は主に、掃符号器がない場合にどのユーザが掃走査を用いているかを識別するための二次元コードを実現するためである.設計の由来:主に会社のプロジェクトの機能は、クーポンのような為替コードを二次元コードに生成した後、ユーザーは二次元コードを商店に展示し、商店が二次元コードをスキャンして照合します.このように関連するどのように判断するかは、一般のユーザーがスキャンしたものではなく、事業体がスキャンしたものですか?
概観を実現する
ユーザーがクーポンをクリックすると、対応する二次元コード(該当商品の情報付き)->ユーザー/取引先が二次元コードをスキャンします.WeChatページのライセンスを行います.(両替情報などの一般情報のみ表示)
開発環境
1.nodejs
依存関係
1.Qr-inmage(実はまだユーザー数が多いnode-qrcodeがありますが、本機能の実現が煩雑なので、小衆のqr-mageを選択しました.):主に二次元コードを動的に表示するために、バックグラウンドで二次元コード画像を保存する必要がありません.2.WeChatページのライセンス:どのユーザがスキャンしたかを識別するための二次元コードです.
WeChatのホームページのライセンス
第一歩:ユーザーが授権に同意し、コードを取得する
WeChat公衆アカウントがライセンススコープ(scopeパラメータ)の権限を持っていることを確認した上で(サービス番号が高度なインターフェースを獲得した後、デフォルトではscopeパラメータの中のsnsapeiとsnsaphiuuserinfoを保有しています)、注目者に次のページを開くように案内します.
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 「このリンクはアクセスできません.」と表示されたら、パラメータが間違っているかどうかを確認してください.scopeパラメータに対応する権限を持っていますか?(WeChatを自分のルートに戻したい時に自分のパラメータを持っています.コールバックルートに自分のパラメータを追加して、url符号化を行います.これで自分のパラメータを持って帰ってきます.具体的には下を見て実現できます.)
第二ステップ:codeを通じてウェブページを交換してaccesst tokenを授権します.
まず注意してください.ここでcodeを通じて交換したのは特殊なウェブページのライセンスaccessatokenであり、基本的なサポートのaccesstokenであります.異なっています.公式アカウントは次のインターフェースを通じてウェブページのライセンスaccessautkenを取得できます.ウェブページのライセンスの役割領域がsnsapi ubaseであれば、このステップでウェブページのライセンスaccessatokenを取得するとともに、openidを取得しました.snsapiスタイルのウェブページのライセンスプロセスはここで終了します.
特に、公衆番号のsecretと取得したaccessatokenのセキュリティレベルは非常に高いので、サーバのみに保存し、クライアントに転送することはできません.accessatokenの更新、ユーザー情報の取得などの手順もサーバから開始しなければなりません.
請求方法
コードを取得した後、以下のリンクにaccessatokenを取得してください.https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
ステップ3:ユーザ情報を引き出す(scopeがsnsaphiuuserinfoである必要がある)
ウェブページのライセンスのスコープがsnsaphiuuserinfoの場合、開発者はaccessonとopenidを通じてユーザー情報を引き出すことができます.
請求方法
http:GET(httpsプロトコルを使用してください.)https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
この呼び出しは、主として、ユーザの詳細情報を取得して、バックグラウンドのチェックに用い、自分のバックグラウンドの中の取引先かそれとも普通のユーザかを識別するためである.
ドライコード
第一歩クライアント要求
//bms.js
router.get("/QRcode",BMSServer.qrcode);
//bmsserver.js
//
qrcode:function(req,res){
let pid=req.body.pid;// ( ID)
res.render(renderPath+'qrcode',{pid:pid});
},
//qrcode.ejs
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='/stylesheets/style.css'/>
</head>
<body>
<h1 style="position:absolute;left:43%;top:5%"> </h1>
<img src="/Data/create_qrcode?url=https://xxxx.xxxxx.xxxx/xxx/qrcodeInfo&pid=" style="width: 100%;height:100%;margin-top:10%"/>
</body>
</html>
第二のステップバックグラウンドは、第一歩のタグのsrc要求を受信する.//1. img src create_qrcode
//data.js
router.get("/create_qrcode",DataServer.create_qrcode);
//dataserver.js
create_qrcode:function(req,res){
var url = req.query.url;//img src
var pid=req.query.pid;
let text=`${url}?pid=${pid}`;
try {
//text=" ";
var img = qr.image(text,{size :10});// , qrcodeInfo
res.writeHead(200, {'Content-Type': 'image/png'});
img.pipe(res);
} catch (e) {
res.writeHead(414, {'Content-Type': 'text/html'});
res.end('414 Request-URI Too Large'
);
}
},
//2.
//bms.js
//
router.get("/qrcodeInfo",BMSServer.qrcodeInfo);
//bmsserver.js
qrcodeInfo:function(req,res){
let pid=req.query['pid'];
res.render(renderPath+'qrcodeInfo',{pid:pid,title:" "});
},
//qrcodeInfo.ejs
//
<html>
<head>
<title><%=title%></title>
<link rel='stylesheet' href='/stylesheets/style.css'/>
<script src="/js/jquery.js"></script>
<script src="/js/jquery.mCustomScrollbar.concat.min.js"></script>
<link href="http://fonts.googleapis.com/css?family=Oxygen|Marck+Script" rel="stylesheet" type="text/css">
<link href="/css/bootstrap.css" rel="stylesheet">
<link href="/css/font-awesome.css" rel="stylesheet">
<link href="/css/admin.css" rel="stylesheet">
<script src="/js/jquery.min.js"></script>
<script src="/js/bootstrap.js"></script>
<script src="/js/excanvas.min.js"></script>
<script src="/js/jquery.flot.min.js"></script>
<script src="/js/jquery.flot.resize.js"></script>
</head>
<script>
(function($){
$(window).load(function(){// ,
let pid=$("#pid").val();
let newUrl=escape(`https://xxxx.xxxxx.xxx/xxx/webLogin?pid=${pid}`);// url
location.href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxd53d8ea8fc7e67cb&redirect_uri="+newUrl+"&response_type=code&scope=snsapi_base&state=123#wechat_redirect";//
});
})(jQuery);
</script>
<body>
<input type="text" value="" id="pid" style="display: none">
</body>
</html>
第三段階のバックグラウンドは、WeChatのウェブページに許可されたコールバックを受信する.//bms.js
router.get("/webLogin",BMSServer.weblogin);//
//bmsserver.js
weblogin:function(req,res){
let body=isAvailableData(req.query).data;
let code=body.code;// code access_token
let state=body.state;
let pid=body.pid;//
request('https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code='+code+'&grant_type=authorization_code ', async function(error,respone,body){
if(!error&&respone.statusCode==200){
var wxData = JSON.parse(body);
console.log(wxData)
let access_token=wxData.access_token;// access_token
let openid=wxData.openid;// openid, , , :
request("https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+openid+"&lang=zh_CN ",async function(error,respone,body){
if(!error&&respone.statusCode==200){
let userInfo = JSON.parse(body);//
console.log(userInfo)
let qrcodeUser=new QrCodeUser();// model
let qrcodeuser=await qrcodeUser.findQrCodeUserByOpenid(userInfo.openid);// openid
let title="";
if(qrcodeuser==null){
title=" ";
res.render(renderPath+'webLoginPage',{title:title,userInfo:null,msg:cdkey});
}else{
//
title=" ";
res.render(renderPath+'webLoginPage',{title:title,userInfo:"hahah",msg:" "});
}
}
});
}
});
}
//webLoginPage.ejs
//weui: ui。 :https://www.w3cschool.cn/weixinkaifawendang/k72f1qe4.html
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0,viewport-fit=cover">
<title> </title>
<link rel="stylesheet" href="/weui/dist/style/weui.css"/>
<link rel="stylesheet" href="/weui/dist/example/example.css"/>
</head>
<body ontouchstart>
<%if(userInfo!=null){%>
<%=title%>: <%=msg%>
<%}else{%>
<%=title%>: <%=msg%>
<%}%>
</body>
</html>
注意二次元コードをスキャンする時は、WeChatのスキャンを使ってください.他のスキャンツールを使うと、WeChatクライアントを使って開くなどの情報が提示されます.
より良い解決策を提案することを歓迎します.