Quellcode durchsuchen

微信获取signature

SanHQin vor 2 Wochen
Ursprung
Commit
8abfb40934
1 geänderte Dateien mit 78 neuen und 0 gelöschten Zeilen
  1. 78 0
      cocoflow.js

+ 78 - 0
cocoflow.js

@@ -40,6 +40,8 @@ const { WECHAT_APPID, WECHAT_SECRET } = { WECHAT_APPID: "wx2d69589899b7ecd6", WE
 //   WECHAT_SECRET: "4014c49f54d2fc31150d654f5d7ad1b8",
 // }; 
 
+// qgt
+// const { WECHAT_APPID, WECHAT_SECRET } = { WECHAT_APPID: "wxbb3ac888b7d39c86", WECHAT_SECRET: "b9a978b1570b0da7242627b856dbafc6" };
 
 
 // const WECHAT_REDIRECT_URI = "https://liyuan.cocorobo.cn/#/login"; // 微信授权后的回调地址
@@ -83,6 +85,8 @@ router.route("/wechat-callback").all(async (req, res) => {
       status: tokenResponse.status,
       statusText: tokenResponse.statusText
     });
+
+    
   } catch (error) {
     console.log(error);
     res.status(500).json({ 
@@ -258,4 +262,78 @@ function generateAPIKey(username) {
   return digest;
 }
 
+
+// 微信获取用户的accept_token
+router.route("/wechat-get-signature").all(async (req, res) => {
+  
+  try {
+    // 使用授权码换取 access_token
+    // const tokenResponse = await axios.get(
+    //   `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${WECHAT_APPID}&secret=${WECHAT_SECRET}&code=${code}&grant_type=authorization_code`
+    // );
+
+    const tokenResponse = await axios.get(
+      `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${WECHAT_APPID}&secret=${WECHAT_SECRET}`
+    );
+
+    if(tokenResponse.status=='200'){
+       const tticketResponse = await axios.get(`https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=${tokenResponse.data.access_token}&type=jsapi`)
+       console.log("tticketResponse",tticketResponse)
+       if(tticketResponse.data.errcode==0){
+        const url = decodeURIComponent(req.query.url);
+        let params = {
+          jsapi_ticket: tticketResponse.data.ticket,   // 获取到的 jsapi_ticket
+          nonceStr: 'wechat-signature-'+new Date().getTime(),      // 随机字符串
+          timestamp: new Date().getTime(),         // 时间戳
+          url: url         // 当前页面的 URL
+        }
+        var string = 'jsapi_ticket=' + params.jsapi_ticket + '&noncestr=' + params.nonceStr + '&timestamp=' + params.timestamp + '&url=' + params.url;
+        // 使用crypto模块的SHA1算法生成签名
+        var signature = crypto.createHash('sha1').update(string, 'utf8').digest('hex');
+        // let _signature = crypto.createHash('sha1').update(string, 'utf8').digest('hex');
+
+        res.status(200).json({
+          success:true,
+          data:{
+            params,
+            signature,
+            appId:WECHAT_APPID,
+          }
+        })
+       }else{
+        res.status(500).json({ 
+          success: false, 
+          error: "获取jsapi_ticket失败",
+          message: tticketResponse.data.errmsg || "获取jsapi_ticket失败"
+        });
+       }
+      //  res.status(200).json({ 
+      //   success: true,
+      //   data: tticketResponse.data, 
+      // });
+      //  if(tticketResponse.status=='200'){
+      //   res.status(200).json({ 
+      //     success: true,
+      //     data: tticketResponse.data,  // 只发送响应数据,不发送整个响应对象
+      //     status: tticketResponse.status,
+      //     statusText: tticketResponse.statusText
+      //   });
+      //  }
+    }else{
+      res.status(500).json({ 
+        success: false, 
+        error: "获取access_token失败",
+        message: tokenResponse.data.statusText || "微信API返回错误"
+      });
+    }
+  } catch (error) {
+    console.log(error);
+    res.status(500).json({ 
+      success: false, 
+      error: "授权失败",
+      message: error.message 
+    });
+  }
+});
+
 module.exports = router;