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