WeiXinMPSDK icon indicating copy to clipboard operation
WeiXinMPSDK copied to clipboard

企业微信订阅OA审批申请状态变化回调通知(sys_approval_change)事件,RequestMessageEvent_SysApprovalChange对象上的ApprovalInfo属性为null

Open zhouatnet opened this issue 2 years ago • 13 comments

问题描述

当在自定义的WorkCustomMessageHandler里重写OnEvent_Sys_Approval_Change_Status_ChangeRequest(RequestMessageEvent_SysApprovalChange requestMessage)方法时,从RequestMessageEvent_SysApprovalChange上取ApprovalInfo,当审批刚刚新建时,ApprovalInfo能正常取到值,但是当审批同意或者驳回时,ApprovalInfo为null

微信官方文档 URL

https://developer.work.weixin.qq.com/document/path/91815

发现问题的模块
  • [x] Senparc.Weixin.Work 版本:3.14.10.0
模块对应的 .net 版本
  • [x] .net core 3.x
开发环境
  • [x] Visual Studio 2019
缓存环境
  • [x] 服务器内存缓存(默认)
系统环境
  • [x] Windows,版本:
联系方式

Email:[email protected]

(也可将问题地址及联系方式发送到 [email protected]

发布问题后,请保持对 issue 的关注,有时会有需要进一步沟通的信息,很长时间内没有得到答复的 issue 将被关闭。

zhouatnet avatar May 10 '22 08:05 zhouatnet

经过测试是可用的,您可以根据这个单元测试跑一下自己的数据:

https://github.com/JeffreySu/WeiXinMPSDK/blob/0f3d11fb0d421c20a8cad4c4cdcf5ff594f21385/src/Senparc.Weixin.Work/Senparc.Weixin.Work.Test/MessageHandlers/WorkMessageHandlerTest.Approval.cs#L24-L24

JeffreySu avatar May 11 '22 08:05 JeffreySu

用你测试提供的数据没问题,可是用微信实际返回的xml就有问题。

你用这个数据测一下:

<xml> <ToUserName><![CDATA[ww347c3f221bdb85ad]]></ToUserName> <FromUserName><![CDATA[sys]]></FromUserName> <CreateTime>1652167771</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[sys_approval_change]]></Event> <AgentID>3010040</AgentID> <ApprovalInfo> <SpNo>202205100003</SpNo> <SpName><![CDATA[物品领用]]></SpName> <SpStatus>2</SpStatus> <TemplateId><![CDATA[3TmmDEDyvCbnHeLiszG5rBwUB9dhVNcMU3qxwH1K]]></TemplateId> <ApplyTime>1652167758</ApplyTime> <Applyer> <UserId><![CDATA[JiangYueYe]]></UserId> <Party><![CDATA[3]]></Party> </Applyer> <SpRecord> <SpStatus>2</SpStatus> <ApproverAttr>1</ApproverAttr> <Details> <Approver> <UserId><![CDATA[JiangYueYe]]></UserId> </Approver> <Speech><![CDATA[]]></Speech> <SpStatus>2</SpStatus> <SpTime>1652167770</SpTime> </Details> <Details> <Approver> <UserId><![CDATA[XuJianBing]]></UserId> </Approver> <Speech><![CDATA[]]></Speech> <SpStatus>1</SpStatus> <SpTime>0</SpTime> </Details> </SpRecord> <StatuChangeEvent>2</StatuChangeEvent> </ApprovalInfo> </xml>

会报异常

image

zhouatnet avatar May 12 '22 07:05 zhouatnet

我用你上面的数据测试也没有问题:

image

JeffreySu avatar May 14 '22 15:05 JeffreySu

那就奇怪了,麻烦你再用这个代码测试下:

[TestMethod]
        public void TestFillEntityWithXml()
        {
            //客服回调
            var doc = XDocument.Parse(@"
<xml>
  <ToUserName><![CDATA[ww347c3f221bdb85ad]]></ToUserName>
  <FromUserName><![CDATA[sys]]></FromUserName>
  <CreateTime>1652167771</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[sys_approval_change]]></Event>
  <AgentID>3010040</AgentID>
  <ApprovalInfo>
    <SpNo>202205100003</SpNo>
    <SpName><![CDATA[物品领用]]></SpName>
    <SpStatus>2</SpStatus>
    <TemplateId><![CDATA[3TmmDEDyvCbnHeLiszG5rBwUB9dhVNcMU3qxwH1K]]></TemplateId>
    <ApplyTime>1652167758</ApplyTime>
    <Applyer>
      <UserId><![CDATA[JiangYueYe]]></UserId>
      <Party><![CDATA[3]]></Party>
    </Applyer>
    <SpRecord>
      <SpStatus>2</SpStatus>
      <ApproverAttr>1</ApproverAttr>
      <Details>
        <Approver>
          <UserId><![CDATA[JiangYueYe]]></UserId>
        </Approver>
        <Speech><![CDATA[]]></Speech>
        <SpStatus>2</SpStatus>
        <SpTime>1652167770</SpTime>
      </Details>
      <Details>
        <Approver>
          <UserId><![CDATA[XuJianBing]]></UserId>
        </Approver>
        <Speech><![CDATA[]]></Speech>
        <SpStatus>1</SpStatus>
        <SpTime>0</SpTime>
      </Details>
    </SpRecord>
    <StatuChangeEvent>2</StatuChangeEvent>
  </ApprovalInfo>
</xml>");
            RequestMessageEvent_SysApprovalChange reqPack = new RequestMessageEvent_SysApprovalChange();
            reqPack.FillEntityWithXml(doc);
            Assert.IsNotNull(reqPack.ApprovalInfo);
            Assert.AreEqual((ulong)202205100003, reqPack.ApprovalInfo.SpNo);
        }

看看测试能不能通过

zhouatnet avatar May 15 '22 10:05 zhouatnet

也是正常的: image

所有其他测试也是通过的(错误的是因为需要输入appId、secret进行解密): image

JeffreySu avatar May 15 '22 11:05 JeffreySu

那就奇怪了,我的一直会报错: image 我用的是vs2019 17.0.1 运行环境.net core 3.1 nuget包版本 image

zhouatnet avatar May 16 '22 00:05 zhouatnet

你的SDK是最新的吗?

JeffreySu avatar May 17 '22 14:05 JeffreySu

是最新的啊

zhouatnet avatar May 18 '22 08:05 zhouatnet

那就奇怪了,麻烦你再用这个代码测试下:

[TestMethod]
        public void TestFillEntityWithXml()
        {
            //客服回调
            var doc = XDocument.Parse(@"
<xml>
  <ToUserName><![CDATA[ww347c3f221bdb85ad]]></ToUserName>
  <FromUserName><![CDATA[sys]]></FromUserName>
  <CreateTime>1652167771</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[sys_approval_change]]></Event>
  <AgentID>3010040</AgentID>
  <ApprovalInfo>
    <SpNo>202205100003</SpNo>
    <SpName><![CDATA[物品领用]]></SpName>
    <SpStatus>2</SpStatus>
    <TemplateId><![CDATA[3TmmDEDyvCbnHeLiszG5rBwUB9dhVNcMU3qxwH1K]]></TemplateId>
    <ApplyTime>1652167758</ApplyTime>
    <Applyer>
      <UserId><![CDATA[JiangYueYe]]></UserId>
      <Party><![CDATA[3]]></Party>
    </Applyer>
    <SpRecord>
      <SpStatus>2</SpStatus>
      <ApproverAttr>1</ApproverAttr>
      <Details>
        <Approver>
          <UserId><![CDATA[JiangYueYe]]></UserId>
        </Approver>
        <Speech><![CDATA[]]></Speech>
        <SpStatus>2</SpStatus>
        <SpTime>1652167770</SpTime>
      </Details>
      <Details>
        <Approver>
          <UserId><![CDATA[XuJianBing]]></UserId>
        </Approver>
        <Speech><![CDATA[]]></Speech>
        <SpStatus>1</SpStatus>
        <SpTime>0</SpTime>
      </Details>
    </SpRecord>
    <StatuChangeEvent>2</StatuChangeEvent>
  </ApprovalInfo>
</xml>");
            RequestMessageEvent_SysApprovalChange reqPack = new RequestMessageEvent_SysApprovalChange();
            reqPack.FillEntityWithXml(doc);
            Assert.IsNotNull(reqPack.ApprovalInfo);
            Assert.AreEqual((ulong)202205100003, reqPack.ApprovalInfo.SpNo);
        }

看看测试能不能通过

这个是您收到的最原始的XML信息吗?

JeffreySu avatar May 18 '22 13:05 JeffreySu

是的

zhouatnet avatar May 19 '22 00:05 zhouatnet

那你直接运行一下这个单元测试,结果是什么?

JeffreySu avatar May 19 '22 01:05 JeffreySu

image

zhouatnet avatar May 27 '22 06:05 zhouatnet

你看一下源码是不是最新的,如果是最新的不应该有这个问题了。

JeffreySu avatar May 29 '22 13:05 JeffreySu