开发者社区> 问答> 正文

钉钉中,大佬们,请问一下我想做一个钉钉HTTP回调,一直提示url连接超时是为什么?

钉钉中,大佬们,请问一下我想做一个钉钉HTTP回调,一直提示url连接超时,我写的接口程序里没接收到encrypt参数,是为什么?from flask import Flask, request, jsonify

app = Flask(name)
@app.route('/api', methods=['POST'])
def api_endpoint():
if request.headers['Content-Type'] == 'application/json':
data = request.json
print(data)
return jsonify({'message': 'Successfully received the request'})
else:
return jsonify({'error': 'Invalid content type. Only application/json is supported'}), 400

if name == 'main':
app.run(host='10.10.20.193', port=443)

展开
收起
多麻辣哦 2024-01-03 20:36:58 71 0
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    根据您提供的代码,我发现了一些问题。首先,您的代码中缺少了对encrypt参数的处理。其次,您的代码中使用了name作为Flask应用的名称,但是没有在代码中定义它。最后,您的代码中使用了10.10.20.193作为服务器地址,这可能会导致连接超时。

    为了解决这些问题,您可以按照以下步骤进行操作:

    1. 在代码中添加对encrypt参数的处理。您可以使用request.args.get('encrypt')来获取encrypt参数的值。

    2. name替换为一个具体的字符串,例如'my_app'

    3. 将服务器地址更改为您的计算机的实际IP地址或局域网内的其他可用地址。

    以下是修改后的代码:

    from flask import Flask, request, jsonify
    
    app = Flask('my_app')
    @app.route('/api', methods=['POST'])
    def api_endpoint():
        if request.headers['Content-Type'] == 'application/json':
            data = request.json
            print(data)
            encrypt = request.args.get('encrypt')
            print(encrypt)
            return jsonify({'message': 'Successfully received the request'})
        else:
            return jsonify({'error': 'Invalid content type. Only application/json is supported'}), 400
    
    if __name__ == '__main__':
        app.run(host='your_ip_address', port=443)
    

    请确保将your_ip_address替换为您的计算机的实际IP地址或局域网内的其他可用地址。希望这些修改能帮助您解决问题。

    2024-01-04 15:21:17
    赞同 展开评论 打赏
  • 您好,在填写套件回调URL的时候,需要验证第三方应用填写的回调URL是可用的。钉钉服务器通过回调URL推送一条『验证回调URL有效性事件』来判断回调URL是否可用。

    具体流程您可以点击此处查看HTTP回调相关文档。https://developers.dingtalk.com/document/app/configure-synchttp-push

    2024-01-04 15:11:46
    赞同 展开评论 打赏
  • 根据您提供的代码,我发现了一些问题。首先,您的代码中缺少了对encrypt参数的处理。其次,您的代码中使用了Content-Type来判断请求是否为JSON格式,但是钉钉的HTTP回调可能不会发送Content-Type头。

    为了解决这个问题,您可以在代码中添加对encrypt参数的处理,并使用其他方法来判断请求是否为JSON格式。以下是一个修改后的示例:

    from flask import Flask, request, jsonify
    import base64
    import hashlib
    import hmac
    import json
    
    app = Flask(__name__)
    
    @app.route('/api', methods=['POST'])
    def api_endpoint():
        if request.headers.get('Content-Type') == 'application/json':
            data = request.get_data()
            print(data)
    
            # 处理加密参数
            encrypt = request.headers.get('encrypt')
            if encrypt:
                # 对加密参数进行解码和验证
                signature = base64.b64decode(encrypt)
                timestamp = signature[:10]
                nonce = signature[10:26]
                secret = "your_secret_key".encode("utf-8")
                message = f"{timestamp}\n{nonce}".encode("utf-8")
                expected_signature = hmac.new(secret, message, digestmod=hashlib.sha256).digest()
    
                if hmac.compare_digest(expected_signature, signature):
                    print("签名验证成功")
                else:
                    print("签名验证失败")
                    return jsonify({'error': 'Invalid signature'}), 400
    
            return jsonify({'message': 'Successfully received the request'})
        else:
            return jsonify({'error': 'Invalid content type. Only application/json is supported'}), 400
    
    if __name__ == '__main__':
        app.run(host='10.10.20.193', port=443)
    

    请注意,您需要将your_secret_key替换为您自己的密钥。希望这对您有所帮助!

    2024-01-04 11:52:24
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
问答排行榜
最热
最新

相关电子书

更多
钉钉小程序——为工作方式插上翅膀 立即下载
钉钉客户端自动化的应用 立即下载
使命必达 —— 钉钉企业级 消息服务的机遇与挑战 立即下载