您的位置:首页 > 运维架构 > Linux

linux下配置node.js环境并实现微信授权

2017-01-12 22:22 1006 查看
好久好久没写自己学到的东西了,由于最近自己弄的东西太散了,有时候看看书有时候写写自己模仿acfun app的个人项目,实在不知道该写啥,今天因为拿到了一个外包单的服务器,所以想实现以下微信授权以及微信支付,生成带参数的二维码三个简单的微信接口并记录下来,方便以后使用~

首先这篇先写配置环境及微信授权吧。

linux下的环境配置

1、安装

wget [‘url’];

我是直接官方安装编译好的二进制包,所以直接在root目录下

wget https://nodejs.org/dist/v6.9.4/node-v6.9.4-linux-x64.tar.xz 下载解压包

哦对了,我是64位的,各位自己看一下linux的版本信息再装

cat /proc/version

2、解压

xz -d **.tar.xz

tar -xv -f **.tar

//或者

tar -Jxv -f **.tar.xz(大写的J)

第一种是先解压xz再解压tar,第二种则是一次解压,大家随意。

3、环境变量的配置

我不知道为啥我的这个服务器vim识别不了= =。。。我就用vi了,都一样可以改文本就好

首先进入vi模式修改环境变量

vi /etc/profile

按insert进入插入模式 将你的node的安装路径添加在PATH的前面



我因为是在root下所以是这样写

$PATH:[你的安装路径]

写完后Esc退出插入模式

:wq保存并退出vi模式即可

然后输出

source /etc/profile

将变量临时生效,最好还是重连服务器的好~

echo $PATH 查看是否有自己添加的环境变量



最后切换至任意目录下执行

node -v

nom -v



好的配置完成~

接下来开始微信授权吧

1、关注并申请微信测试号

首先我们先申请登录微信测试号,并且在里面扫描二维码关注自己的测试号,然后再网页授权那改好自己的回调域名,我这里就改了3000端口的,大家随意



2、开始写授权的后端代码

//wx_login.js
var express = require('express');
var app = express();
var router = express.Router();
var request = require('request');

/*微信登录*/
var AppID = 'xxxxxxxxxx';//测试号APPID
var AppSecret = 'xxxxxxxxxx';//测试号APPSECRET

//监控路由地址/wx_login
router.get('/wx_login',function(req,res,next){
//第一步:用户同意授权,获取code
var router = 'get_wx_access_token';
//编码后的回调地址,这里一定要记得加端口号,因为我们在测试号里设置过的
var return_uri = 'http%3A%2F%2Fwww.xxxxxx.cn%3A3000%2Foauth%2F'+router;
console.log(decodeURIComponent(return_uri));
var scope = 'snsapi_userinfo';

//重定向授权地址,回调页面是return_uri,中间有oauth是因为我下面写了虚拟目录的代理
res.redirect('https://open.weixin.qq.com/connect/oauth2/authorize?' +
'appid=' + AppID +
'&redirect_uri=' + return_uri +
'&response_type=code' +
'&scope=' + scope +
'&state=STATE#wechat_redirect');
});

//get授权页面回调后的code
router.get('/get_wx_access_token',function(req,res,next){
//第二步:通过code换取网页授权access_token
var code = req.query.code;
console.log(code);
//请求获取token和用户的openId
request.get(
{
url:'https://api.weixin.qq.com/sns/oauth2/access_token?appid='+AppID+'&secret='+AppSecret+'&code='+code+'&grant_type=authorization_code'
},
function(error,response,body){
if(response.statusCode == 200){
console.log(body);
var data = JSON.parse(body);
var access_token = data.access_token;
var openid = data.openid;
//第三步:利用token和openId请求用户信息
request.get(
{
url:'https://api.weixin.qq.com/sns/userinfo?access_token='+access_token+'&openid='+openid+'&lang=zh_CN'
},
function(error,response,body){
if(response.statusCode === 200){
//第四步:根据获取的用户信息进行操作
var userinfo = JSON.parse(body);
console.log('获取信息成功');
console.log(userinfo);

//测试
res.send(
"<h1>" + userinfo.nickname + " 的个人信息</h1>" +
"<p><img src=" + userinfo.headimgurl + "/></p>" +
"<p>" + userinfo.city + "," + userinfo.province + "," + userinfo.country + "</p>"
);
}
else{
console.log(response.statusCode);
}
}
);
}
else{
console.log(response.statusCode);
}
}
);
});

//静态资源下的虚拟目录,即所有的地址都通过http://[host]:3000/oauth来访问
app.use('/oauth',router);

//监听对应主机名及端口
var server = app.listen(3000,'www.xxxx.cn',function(){
var host = server.address().address;
var port = server.address().port;

console.log('Example app listening at http://%s:%s', host, port);
})


写完之后,将代码上传到服务器后,启动node服务器

node wx_login.js;

手机访问http://www.XXXXXX.cn:3000/oauth/wx_login即可看到授权申请,点击确认回调到res.send回的测试页面~服务器与前端返回页面的信息如下



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