前端+后端(node.js)淘宝授权

淘宝用户授权并且获取用户资料

次功能可以做一个给自己的网站嵌入淘宝扫码登录之类的、

1.生成授权二维码

淘宝开放平台
1.首先要在淘宝开放平台注册一个应用
注册应用的详细地址
2.拼接授权码url

https://oauth.taobao.com/authorize?response_type=code&client_id=11111111&redirect_uri=http://www.taobao.com&state=1212&view=web

在这里插入图片描述
示例中的client_id和redirect_uri需要替换成您创建应用的实际数据。client_id可在“控制台-应用管理-管理-概览”的APP证书中找到,App Secret也在此处;redirect_uri和“控制台-应用管理-管理-应用设置-基本信息”中的回调地址保持一致。
前端+后端(node.js)淘宝授权_第1张图片
前端+后端(node.js)淘宝授权_第2张图片
拼接好url后 就可以制作二维码 在我理解二维码就是一张图片我们可以
前端有很多包可以实现url 转成二维码 如 paynowqr qrcode

这里因为是本地调试所以直接访问拼接的url
前端+后端(node.js)淘宝授权_第3张图片
由于前端生成的二维码只是一个url 用户扫描就是打开这个url 所以前端根本无法捕获这个二维码被扫描 更别提可以直接获取到用户资料了

2.用户扫描二维码授权获取资料

由于之前拼接的url中和项目中都配置的回调url 这两个必须保持一致
然后用户扫描点击授权后他会跳转到这个url并且在url中带入个code参数

我们只要在生成url的时候和后端做一个WebSocket连接 扫描二维码跳转后后端感知到再通过code参数查询access_token
我后端使用的node简单写了一个

const express = require('express')
const app = express()
var fs = require('fs');
var https = require('https')

const { ApiClient } = require('./nodejs')
const port = 3000
const host = "localhost"

var key = fs.readFileSync('private.key');
var cert = fs.readFileSync('mydomain.crt');
var options = {
  key: key,
  cert: cert
};
var server = https.createServer(options, app)
var expressWs = require('express-ws')(app, server);

app.get('/', (req, res) => {
  res.send('Hello World!')
})
//长连接
app.ws('/echo', function (ws, req) {
  ws.on('message', function (msg) {

用户跳转url
    app.get('/hello', function (reqs, res) {
      console.log(reqs.query.code)
      var client = new ApiClient({
        'appkey': 'appkey',
        'appsecret': 'appsecret',
        'url': 'https://eco.taobao.com/router/rest'
      });
		获取access_token
      client.execute('taobao.top.auth.token.create', {
        'code': reqs.query.code,

      }, function (error, response) {
        if (!error) {
           console.log(JSON.parse(response.token_result))
        
        }
        else console.log(error);

      })

      taobao.user.seller.get
      ws.send('hello');
      res.send('授权成功')
    })
    ws.send(123);

  });

})
  .get('/echo', (req, res) => res.send('hello world'))
server.listen(port, () => {
  console.log(`Example app listening on port ${port}!`)
});

前端触发webSocket

 var ws = new WebSocket("wss://localhost:3000/echo");

    ws.onopen = function (evt) {
      ws.send("Hello WebSockets!");
      console.log("Connection open ...");
    };

    ws.onmessage = function (evt) {
      console.log("Received Message: " + evt.data);
      // 	ws.close();
    };

    ws.onclose = function (evt) {
      console.log("Connection closed.");

    }

你可能感兴趣的:(it,javascript,node.js)