qq_35793148 2017-04-25 08:42 采纳率: 0%
浏览 635

Node.js 项目:微信回调模式认证,为什么没人接?

项目详情链接(可报名竞标):微信回调模式认证微信回调模式认证
需求如下:
1、微信回调模式认证
微信企业号开启回调模式时,需要进行验证,通过微信页面传递给服务器的参数如下
appID: "wx0086c685d14beb7e"
encodingAESKey: "EpMLuAwo035P2yg1c7AHcvXuh8jqCfB2bexP78ywsw1",
token: "FVKXUDLMqDcdpLuEPzL6xbb3VCG",
echostr:"i1MnawJvJlOC9RnByQyBUjnI4iNh5RQWplPfzsbMzZdHPBdJC00JBtgpDsFFprTGV5n6v6TtNL0PysXGQ3D3D"
用Node.js将上面的echostr进行解密,返回给微信企业号验证通过
项目采用Node.js+express框架,Node.js的版本为4.4.3,express的版本为4.13.1
2、微信企业号中网页打开时需要进行验证,并取得员工的ID和头像,
3、在后台将员工和部门数据同步到微信企业号
4、完成时间4/27为止,预算金额:2000元
5、提交源代码和相关package

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-06 21:51
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    首先,我要强调的是,微信企业号的回调模式认证是一个复杂的过程,涉及到许多步骤和技术细节。以下是一些可能有助于解决此问题的关键点。

    1. 解密echostr:这一步需要使用Base64编码来解密echostr。你可以使用Node.js中的crypto模块来进行这个操作。
    const crypto = require('crypto');
    const base64Url = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    
    function encrypt(str) {
        const cipher = crypto.createCipher(base64Url, process.env.CRYPTO_KEY);
        let encrypted = cipher.update(str + '', 'utf8', 'hex');
        encrypted += cipher.final('hex');
        return encrypted;
    }
    
    function decrypt(encryptedStr) {
        const decipher = crypto.createDecipher(base64Url, process.env.CRYPTO_KEY);
        let decrypted = decipher.update(encryptedStr, 'hex', 'utf8');
        decrypted += decipher.final('utf8');
        return decrypted;
    }
    
    1. 将加密后的echostr发送给微信企业号进行验证。你需要在Express应用中设置一个POST路由来处理这个请求。
    app.post('/api/callback', function (req, res) {
        // 加密echostr
        const encryptedEchoStr = encrypt(req.body.echostr);
    
        // 发送POST请求给微信企业号验证
        req.app.get('server').post('/cgi-bin/mmwebwx-bin/webwxcallback', { method: 'POST' }, function (err, httpResponse) {
            if (!httpResponse.ok) {
                console.error(`Error in webwxcallback response: ${httpResponse.status} - ${httpResponse.statusText}`);
                res.status(httpResponse.status).send({ error: httpResponse.statusText });
                return;
            }
    
            // 解析响应
            const result = JSON.parse(httpResponse.body);
            const appid = result.appid;
            const timestamp = result.timestamp;
            const nonce = result.nonce;
            const signature = result.signature;
            const encryptedEchoStrFromWeb = result.encryptedEchoStr;
    
            // 比较加密后的echostr与原始echostr是否相同
            if (encryptedEchoStr !== encryptedEchoStrFromWeb) {
                res.status(403).send({ error: 'Invalid callback.' });
                return;
            }
    
            // 如果验证通过,更新数据库或执行其他操作
            // ...
    
            res.status(200).json({ success: true });
        });
    });
    
    1. 在Node.js中,你需要获取用户的ID和头像。你可以在Express应用中设置一个GET路由来处理这个请求。
    app.get('/api/user', function (req, res) {
        // 获取用户信息
        // ...
        res.json(user);
    });
    
    // 为了简化示例,我将在这里编写一个假的用户对象
    let user = {
        id: '123',
        avatar: 'https://example.com/avatar.png'
    };
    

    以上是解决微信回调模式认证的一个基本解决方案。请注意,这只是一个简化的示例,实际的实现可能会更复杂,包括处理各种异常情况、错误处理等。

    评论

报告相同问题?