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

好久好久没写自己学到的东西了,由于最近自己弄的东西太散了,有时候看看书有时候写写自己模仿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回的测试页面~服务器与前端返回页面的信息如下
服务器

前端页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值