JeffreySu / WeiXinMPSDK

微信全平台 .NET SDK, Senparc.Weixin for C#,支持 .NET Framework 及 .NET Core、.NET 8.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.
https://weixin.senparc.com
Apache License 2.0
8.43k stars 4.35k forks source link

关于微信会员卡信息更新 #196

Closed hello2008zj closed 8 years ago

hello2008zj commented 8 years ago

1、Card_MemberCardData缺少背景url字段:public string background_pic_url { get; set; }

public CustomField custom_field3 { get; set; } ///

    /// 自定义会员信息类目,会员卡激活后显示
    /// 非必填
    /// </summary>

    public CustomCell custom_cell1 { get; set; }
    /// <summary>
    /// 会员卡背景图片,非必填
    /// </summary>
    public string background_pic_url { get; set; }

2、UserinfoGetResult 修改:增加对自定义字段的支持,去掉 UserinfoGetResult 对象的custom_field_list属性,移动到BaseForm的对象中心

public UserinfoGetResult_UserInfo user_info { get; set; } /////

    ///// 开发者设置的会员卡会员信息类目,如等级。
    ///// </summary>

    //public string custom_field_list { get; set; }
    /// <summary>

    /// 当前用户的会员卡状态
    /// </summary>

    public UserCardStatus user_card_status { get; set; }
}
public class UserinfoGetResult_UserInfo
{
    /// <summary>
    /// 
    /// </summary>
    public List<UserinfoGetResult_UserInfo_Item> common_field_list { get; set; }

    /// <summary>
    /// 开发者设置的会员卡会员信息类目,如等级。
    /// </summary>
    public List<UserinfoGetResult_UserInfo_Item> custom_field_list { get; set; }
}

//以下两条修改的目的是增加ResponseMsgType.NoResponse的支持,同时支持其他自定义响应类型

3、修改 public static ResponseMessageBase CreateFromRequestMessage(IRequestMessageBase requestMessage, ResponseMsgType msgType)

case ResponseMsgType.Transfer_Customer_Service: responseMessage = new ResponseMessageTransfer_Customer_Service(); break; default: return null; //现在 //throw new UnknownRequestMsgTypeException(string.Format("ResponseMsgType没有为 {0} 提供对应处理程序。", msgType), new ArgumentOutOfRangeException()); //原来 }

4、修改 public static T CreateFromRequestMessage(IRequestMessageBase requestMessage) where T : ResponseMessageBase

try { var tType = typeof(T); var responseName = tType.Name.Replace("ResponseMessage", ""); //请求名称 ResponseMsgType msgType = (ResponseMsgType)Enum.Parse(typeof(ResponseMsgType), responseName);

            //add begin
            T response = CreateFromRequestMessage(requestMessage, msgType) as T;

            if (response==null)
            {  
                response = Activator.CreateInstance(tType) as T;

                response.ToUserName = requestMessage.FromUserName;
                response.FromUserName = requestMessage.ToUserName;
                response.CreateTime = DateTime.Now; //使用当前最新时间

                return response;
            }               

            return response;
            //add end

            //delete
            //return CreateFromRequestMessage(requestMessage, msgType) as T;
        }
        catch (Exception ex)
        {
            throw new WeixinException("ResponseMessageBase.CreateFromRequestMessage<T>过程发生异常!", ex);
        }
JeffreySu commented 8 years ago

你可以用pull request功能,先fork一个项目,然后把你的代码pull过来。

JeffreySu commented 8 years ago

答复:

1 - 已经添加到v13.7.8中 2 - 没看懂,格式也有点乱 3 - 这里设计的时候就是需要抛出异常,如果有新的官方的回复类型,就在这里统一添加,有新的类型出现了吗? 4 - 和3有关

非常感谢!

hello2008zj commented 8 years ago

关于2:在UserinfoGetResult 原来有个属性custom_field_list ,这个定义有问题,不应该出现在这里。正确的位置应放到UserinfoGetResult_UserInfo 对象中,如上所术。

关于3和4,ResponseMsgType中NoResponse定义,但实际上不支持,主要解决此问题。另外:这里不一定需要抛出异常,对于不存在的响应,返回为null也是可行的。我这样改动后,后面有新的官方回复类型,只要增加回复类型和ResponseMsgType定义就可以了,避免这里还要修改代码?

JeffreySu commented 8 years ago

谢谢!

1、已升级到v13.7.10 将在下一个稳定版本发布到Nuget。

2、NoResponse是我们自己加上去的,为了让系统识别不返回任何消息,当你return 一个NoResponse的实例时,等同于处理return null的效果,其实还没有启用,被你发现了:)这是一个给未来准备的接口,既然提到了,我已经将相关的代码更新到了Senparc.Weixin v4.5.20和Senparc.Weixin.MP.Mvc v4.1.0以及Senparc.Weixin.QY v3.3.6中,稳定后会在Nuget发布。 关于用法此处我觉得暂时还是有理由坚持约定胜于配置的原则,这里的case类型最好和“合法”的ResponseMessage类型是一致的,如果需要自己扩展,则两边都需要扩展。

如果还有疑问或者异议非常欢迎继续讨论!