开发者社区> 问答> 正文

注册业务事件回调接口返回错误:71010 POST的JSON数据不包含所需要的参数字段或包含的参数格

以下为接口调用截图: image.png 以下为服务端API代码:

    public Dictionary<String, String> Post(string signature, string msg_signature, string timestamp, string nonce, [FromBody] object body)
    {

        try
        {
            JObject jo = JObject.Parse(body.ToString());
            #region 获取套件配置参数
            string mToken = "l8AqNBnSFNUBuynAHidkFJfP3N";
            string mSuiteKey = "ding99e16cab248b3ea7a132XXXXXXXXXX";
            string mEncodingAesKey = "WGoY9iYLACkhAZJld5JOYgw5KNPc46nGSfKdQLNexLD";
            #endregion
            #region 获取回调URL里面的参数
            //url中的签名
            string mySignature = signature;
            //url中的时间戳
            string myTimeStamp = timestamp;
            //url中的随机字符串
            string myNonce = nonce;
            //post数据包数据中的加密数据'
            string encryptStr = jo["encrypt"].ToString();
            #endregion
            string sEchoStr = "";
            #region
            //构造DingTalkCrypt
            DingTalkCrypt dingTalk = new DingTalkCrypt(mToken, mEncodingAesKey, mSuiteKey);

            string plainText = "";
            dingTalk.DecryptMsg(mySignature, myTimeStamp, myNonce, encryptStr, ref plainText);
            Hashtable tb = (Hashtable)JsonConvert.DeserializeObject(plainText, typeof(Hashtable));
            string eventType = tb["EventType"].ToString();
            string res = "success";
            switch (eventType)
            {
                case "suite_ticket"://定时推送Ticket
                    //ConfigurationManager.AppSettings["SuiteTicket"] = tb["SuiteTicket"].ToString();
                    mSuiteKey = tb["SuiteKey"].ToString();
                   break;
                case "tmp_auth_code"://钉钉推送过来的临时授权码
                    //ConfigurationManager.AppSettings["TmpAuthCode"] = tb["AuthCode"].ToString();
                   break;
                case "change_auth":// do something;
                    break;
                case "check_update_suite_url":
                    res = tb["Random"].ToString();
                    mSuiteKey = tb["TestSuiteKey"].ToString();
                    break;
            }

            myTimeStamp = Helper.GetTimeStamp().ToString();
            string encrypt = "";
            string newSignature = "";
            dingTalk = new DingTalkCrypt(mToken, mEncodingAesKey, mSuiteKey);
            dingTalk.EncryptMsg(res, myTimeStamp, myNonce, ref encrypt, ref newSignature);
            Dictionary<String, String> jObject = new Dictionary<string, string>
            {
                { "msg_signature", mySignature },
                { "timestamp", myTimeStamp },
                { "nonce", myNonce },
                { "encrypt", encrypt }
            };
            return jObject;
            #endregion
        }
        catch (Exception e)
        {
            throw e;
        }
    }

大神们,帮忙看下哪里错了啊,要怎么改?

展开
收起
游客lqzxapuaf4ivg 2021-01-29 09:32:57 844 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载