diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayApi.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayApi.cs index 411987ce81..d75fb5ca0d 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayApi.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayApi.cs @@ -312,6 +312,132 @@ public static WxJsonResult BindTransferAccout(string accessToken, string pay_sig var url = string.Format(Config.ApiMpHost + "/xpay/create_funds_bill?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); return CommonJsonSend.Send(null, url, data, CommonJsonSendType.POST, timeOut); } + + /// + /// 查询广告金充值记录 + /// + /// + /// + /// 请求参数 + /// + /// + public static QueryFundsBillJsonResult QueryFundsBill(string accessToken, string pay_sig, QueryFundsBillRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/query_funds_bill?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return CommonJsonSend.Send(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 查询广告金回收记录 + /// + /// + /// + /// 请求参数 + /// + /// + public static QueryRecoverBillJsonResult QueryRecoverBill(string accessToken, string pay_sig, QueryRecoverBillRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/query_recover_bill?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return CommonJsonSend.Send(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 获取投诉列表 + /// + /// + /// + /// 请求参数 + /// + /// + public static GetComplaintListJsonResult GetComplaintList(string accessToken, string pay_sig, GetComplaintListRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/get_complaint_list?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return CommonJsonSend.Send(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 获取投诉详情 + /// + /// + /// + /// 请求参数 + /// + /// + public static GetComplaintDetailJsonResult GetComplaintDetail(string accessToken, string pay_sig, GetComplaintDetailRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/get_complaint_detail?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return CommonJsonSend.Send(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 获取协商历史 + /// + /// + /// + /// 请求参数 + /// + /// + public static GetNegotiationHistoryJsonResult GetNegotiationHistory(string accessToken, string pay_sig, GetNegotiationHistoryRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/get_negotiation_history?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return CommonJsonSend.Send(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 回复用户 + /// + /// + /// + /// 请求参数 + /// + /// + public static WxJsonResult ResponseComplaint(string accessToken, string pay_sig, ResponseComplaintRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/response_complaint?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return CommonJsonSend.Send(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 完成投诉处理 + /// + /// + /// + /// 请求参数 + /// + /// + public static WxJsonResult CompleteComplaint(string accessToken, string pay_sig, CompleteComplaintRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/complete_complaint?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return CommonJsonSend.Send(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 上传媒体文件(如图片,凭证等) + /// + /// + /// + /// 请求参数 + /// + /// + public static UploadVpFileJsonResult UploadVpFile(string accessToken, string pay_sig, UploadVpFileRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/upload_vp_file?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return CommonJsonSend.Send(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 获取微信支付反馈投诉图片的签名头部 + /// + /// + /// + /// 请求参数 + /// + /// + public static GetUploadFileSignJsonResult GetUploadFileSign(string accessToken, string pay_sig, GetUploadFileSignRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/get_upload_file_sign?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return CommonJsonSend.Send(null, url, data, CommonJsonSendType.POST, timeOut); + } #endregion #region 异步方法 @@ -583,6 +709,132 @@ public static async Task BindTransferAccoutAsync(string accessToke var url = string.Format(Config.ApiMpHost + "/xpay/create_funds_bill?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); return await CommonJsonSend.SendAsync(null, url, data, CommonJsonSendType.POST, timeOut); } + + /// + /// 查询广告金充值记录 + /// + /// + /// + /// 请求参数 + /// + /// + public static async Task QueryFundsBillAsync(string accessToken, string pay_sig, QueryFundsBillRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/query_funds_bill?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return await CommonJsonSend.SendAsync(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 查询广告金回收记录 + /// + /// + /// + /// 请求参数 + /// + /// + public static async Task QueryRecoverBillAsync(string accessToken, string pay_sig, QueryRecoverBillRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/query_recover_bill?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return await CommonJsonSend.SendAsync(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 获取投诉列表 + /// + /// + /// + /// 请求参数 + /// + /// + public static async Task GetComplaintListAsync(string accessToken, string pay_sig, GetComplaintListRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/get_complaint_list?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return await CommonJsonSend.SendAsync(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 获取投诉详情 + /// + /// + /// + /// 请求参数 + /// + /// + public static async Task GetComplaintDetailAsync(string accessToken, string pay_sig, GetComplaintDetailRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/get_complaint_detail?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return await CommonJsonSend.SendAsync(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 获取协商历史 + /// + /// + /// + /// 请求参数 + /// + /// + public static async Task GetNegotiationHistoryAsync(string accessToken, string pay_sig, GetNegotiationHistoryRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/get_negotiation_history?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return await CommonJsonSend.SendAsync(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 回复用户 + /// + /// + /// + /// 请求参数 + /// + /// + public static async Task ResponseComplaintAsync(string accessToken, string pay_sig, ResponseComplaintRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/response_complaint?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return await CommonJsonSend.SendAsync(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 完成投诉处理 + /// + /// + /// + /// 请求参数 + /// + /// + public static async Task CompleteComplaintAsync(string accessToken, string pay_sig, CompleteComplaintRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/complete_complaint?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return await CommonJsonSend.SendAsync(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 上传媒体文件(如图片,凭证等) + /// + /// + /// + /// 请求参数 + /// + /// + public static async Task UploadVpFileAsync(string accessToken, string pay_sig, UploadVpFileRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/upload_vp_file?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return await CommonJsonSend.SendAsync(null, url, data, CommonJsonSendType.POST, timeOut); + } + + /// + /// 获取微信支付反馈投诉图片的签名头部 + /// + /// + /// + /// 请求参数 + /// + /// + public static async Task GetUploadFileSignAsync(string accessToken, string pay_sig, GetUploadFileSignRequestData data, int timeOut = Config.TIME_OUT) + { + var url = string.Format(Config.ApiMpHost + "/xpay/get_upload_file_sign?access_token={0}&pay_sig={1}", accessToken.AsUrlData(), pay_sig.AsUrlData()); + return await CommonJsonSend.SendAsync(null, url, data, CommonJsonSendType.POST, timeOut); + } #endregion } } \ No newline at end of file diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/CompleteComplaintRequestData.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/CompleteComplaintRequestData.cs new file mode 100644 index 0000000000..a9c1129fe7 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/CompleteComplaintRequestData.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// 完成投诉处理 + /// + public class CompleteComplaintRequestData + { + /// + /// 投诉id,get_complaint_list接口返回 + /// + public string complaint_id { get; set; } + + /// + /// 0-正式环境 1-沙箱环境 + /// + public int env { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintDetailJsonResult.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintDetailJsonResult.cs new file mode 100644 index 0000000000..20f4488ecf --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintDetailJsonResult.cs @@ -0,0 +1,15 @@ +using Senparc.Weixin.Entities; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// + /// + public class GetComplaintDetailJsonResult : WxJsonResult + { + /// + /// 与get_complaint_list接口的complaints一致 + /// + public ComplaintItem complaint { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintDetailRequestData.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintDetailRequestData.cs new file mode 100644 index 0000000000..0b7668c788 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintDetailRequestData.cs @@ -0,0 +1,18 @@ +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// 获取投诉详情 + /// + public class GetComplaintDetailRequestData + { + /// + /// 投诉id,get_complaint_list接口返回 + /// + public string complaint_id { get; set; } + + /// + /// 0-正式环境 1-沙箱环境 + /// + public int env { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintListJsonResult.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintListJsonResult.cs new file mode 100644 index 0000000000..a7fafa0d73 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintListJsonResult.cs @@ -0,0 +1,176 @@ +using Senparc.Weixin.Entities; +using System.Collections.Generic; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// + /// + public class GetComplaintListJsonResult : WxJsonResult + { + /// + /// 投诉列表 + /// + public List complaints { get; set; } + + /// + /// 总条数 + /// + public int total { get; set; } + } + + /// + /// 投诉列表 + /// + public class ComplaintItem + { + /// + /// 投诉id + /// + public string complaint_id { get; set; } + + /// + /// 投诉时间 格式为yyyy-mm-dd'T'HH:MM:ssXXX,其中XXX为时区偏移,例如:2023-11-28T11:11:49+08:00 + /// + public string complaint_time { get; set; } + + /// + /// 投诉内容 + /// + public string complaint_detail { get; set; } + + /// + /// 投诉状态 PENDING-待处理;PROCESSING-处理中;PROCESSED-已处理完成 + /// + public string complaint_state { get; set; } + + /// + /// 投诉人联系方式 + /// + public string payer_phone { get; set; } + + /// + /// 投诉人在商户AppID下的唯一标识 + /// + public string payer_openid { get; set; } + + /// + /// 投诉单关联订单信息 + /// + public List complaint_order_info { get; set; } + + /// + /// 投诉单下所有订单是否已全部全额退款 + /// + public bool complaint_full_refunded { get; set; } + + /// + /// 投诉单是否有待回复的用户留言 + /// + public bool incoming_user_response { get; set; } + + /// + /// 用户投诉次数。用户首次发起投诉记为1次,用户每有一次继续投诉就加1 + /// + public int user_complaint_times { get; set; } + + /// + /// 户上传的投诉相关资料,包括图片凭证等 + /// + public List complaint_media_list { get; set; } + + /// + /// 用户发起投诉前选择的faq标题 + /// + public string problem_description { get; set; } + + /// + /// 问题类型为申请退款的单据是需要最高优先处理的单据。REFUND: 申请退款;SERVICE_NOT_WORK: 服务权益未生效;OTHERS: 其他类型 + /// + public string problem_type { get; set; } + + /// + /// 当问题类型为申请退款时, 有值, (单位:分) + /// + public int apply_refund_amount { get; set; } + + /// + /// 用户标签列表,每一项内容为string。TRUSTED: 此类用户满足极速退款条件;HIGH_RISK: 高风险投诉,请按照运营要求优先妥善处理 + /// + public List user_tag_list { get; set; } + + /// + /// 投诉单关联服务单信息 + /// + public List service_order_info { get; set; } + } + + /// + /// complaint_order_info + /// + public class ComplaintOrderInfoItem + { + /// + /// 投诉单关联的微信支付交易单号 + /// + public string transaction_id { get; set; } + + /// + /// 渠道单号,query_order接口返回的channel_order_id + /// + public string out_trade_no { get; set; } + + /// + /// 订单金额,单位(分) + /// + public int amount { get; set; } + + /// + /// 商户单号,商家在拉走支付时传的单号 + /// + public string wxa_out_trade_no { get; set; } + + /// + /// 小程序侧单号 + /// + public string wx_order_id { get; set; } + + } + + /// + /// complaint_media_list + /// + public class ComplaintMediaItem + { + /// + /// 体文件对应的业务类型,USER_COMPLAINT_IMAGE: 用户提交投诉时上传的图片凭证;OPERATION_IMAGE: 用户、商户、微信支付客服在协商解决投诉时,上传的图片凭证 + /// + public string media_type { get; set; } + + /// + /// 每一项的内容为string,媒体文件请求url + /// + public List media_url { get; set; } + } + + /// + /// service_order_info + /// + public class ComplaintServiceOrderInfoItem + { + /// + /// 微信支付服务订单号,每个微信支付服务订单号与商户号下对应的商户服务订单号一一对应 + /// + public string order_id { get; set; } + + /// + /// 商户系统内部服务订单号(不是交易单号),与创建订单时一致 + /// + public string out_order_no { get; set; } + + /// + /// 此处上传的是用户发起投诉时的服务单状态,不会实时更新。DOING: 服务订单进行中;REVOKED: 服务订单已取消;WAITPAY: 服务订单待支付;DONE: 服务订单已完成 + /// + public string state { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintListRequestData.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintListRequestData.cs new file mode 100644 index 0000000000..c01954e2e1 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetComplaintListRequestData.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// 获取投诉列表 + /// + public class GetComplaintListRequestData + { + /// + /// 筛选偏移,从0开始 + /// + public int offset { get; set; } + + /// + /// 筛选最多返回条数 + /// + public int limit { get; set; } + + /// + /// 筛选开始时间,格式为yyyy-mm-dd,如“2023-01-01” + /// + public string begin_date { get; set; } + + /// + /// 筛选结束时间,格式为yyyy-mm-dd,如“2023-01-01” + /// + public string end_date { get; set; } + + /// + /// 0-正式环境 1-沙箱环境 + /// + public int env { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetNegotiationHistoryJsonResult.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetNegotiationHistoryJsonResult.cs new file mode 100644 index 0000000000..6b42744908 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetNegotiationHistoryJsonResult.cs @@ -0,0 +1,60 @@ +using Newtonsoft.Json; +using Senparc.Weixin.Entities; +using System.Collections.Generic; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// + /// + public class GetNegotiationHistoryJsonResult : WxJsonResult + { + /// + /// 协商历史 + /// + public List history { get; set; } + + /// + /// 总条数 + /// + public int total { get; set; } + } + + /// + /// 协商历史 + /// + public class HistoryItem + { + /// + /// 操作流水号 + /// + public string log_id { get; set; } + + /// + /// 当前投诉协商记录的操作人 + /// 增加了JsonProperty,因为operator为关键词 + /// + [JsonProperty("operator")] + public string operator_ { get; set; } + + /// + /// 当前操作时间,格式为yyyy-mm-dd'T'HH:MM:ssXXX,其中XXX为时区偏移,例如:2023-11-28T11:11:49+08:00 + /// + public string operate_time { get; set; } + + /// + /// 当前投诉协商记录的操作类型,对应枚举: USER_CREATE_COMPLAINT: 用户提交投诉 USER_CONTINUE_COMPLAINT: 用户继续投诉 USER_RESPONSE: 用户留言 PLATFORM_RESPONSE: 平台留言 MERCHANT_RESPONSE: 商户留言 MERCHANT_CONFIRM_COMPLETE: 商户申请结单 USER_CREATE_COMPLAINT_SYSTEM_MESSAGE: 用户提交投诉系统通知 COMPLAINT_FULL_REFUNDED_SYSTEM_MESSAGE: 投诉单发起全额退款系统通知 USER_CONTINUE_COMPLAINT_SYSTEM_MESSAGE: 用户继续投诉系统通知 USER_REVOKE_COMPLAINT: 用户主动撤诉(只存在于历史投诉单的协商历史中) USER_COMFIRM_COMPLAINT: 用户确认投诉解决(只存在于历史投诉单的协商历史中) PLATFORM_HELP_APPLICATION: 平台催办 USER_APPLY_PLATFORM_HELP: 用户申请平台协助 MERCHANT_APPROVE_REFUND: 商户同意退款申请 MERCHANT_REFUSE_RERUND: 商户拒绝退款申请, 此时操作内容里展示拒绝原因 USER_SUBMIT_SATISFACTION: 用户提交满意度调查结果,此时操作内容里会展示满意度分数 SERVICE_ORDER_CANCEL: 服务订单已取消 SERVICE_ORDER_COMPLETE: 服务订单已完成 COMPLAINT_PARTIAL_REFUNDED_SYSTEM_MESSAGE: 投诉单发起部分退款系统通知 COMPLAINT_REFUND_RECEIVED_SYSTEM_MESSAGE: 投诉单退款到账系统通知 COMPLAINT_ENTRUSTED_REFUND_SYSTEM_MESSAGE: 投诉单受托退款系统通知 + /// + public string operate_type { get; set; } + + /// + /// 当前投诉协商记录的具体内容 + /// + public string operate_details { get; set; } + + /// + /// 投诉单执行操作时上传的资料凭证,包含用户、商户、微信支付客服等角色操作 + /// + public List complaint_media_list { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetNegotiationHistoryRequestData.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetNegotiationHistoryRequestData.cs new file mode 100644 index 0000000000..853cc652ed --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetNegotiationHistoryRequestData.cs @@ -0,0 +1,28 @@ +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// 获取协商历史 + /// + public class GetNegotiationHistoryRequestData + { + /// + /// 筛选偏移,从0开始 + /// + public int offset { get; set; } + + /// + /// 筛选最多返回条数 + /// + public int limit { get; set; } + + /// + /// 投诉id,get_complaint_list接口返回 + /// + public string complaint_id { get; set; } + + /// + /// 0-正式环境 1-沙箱环境 + /// + public int env { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetUploadFileSignJsonResult.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetUploadFileSignJsonResult.cs new file mode 100644 index 0000000000..75676c0d9e --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetUploadFileSignJsonResult.cs @@ -0,0 +1,20 @@ +using Senparc.Weixin.Entities; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// + /// + public class GetUploadFileSignJsonResult : WxJsonResult + { + /// + /// 返回微信支付图片请求的Authorization头部值,具体使用方法可查看备注 + /// + public string sign { get; set; } + + /// + /// 当convert_cos为true时才有意义,返回转存后的url地址,30分钟有效 + /// + public string cos_url { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetUploadFileSignRequestData.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetUploadFileSignRequestData.cs new file mode 100644 index 0000000000..f95d8d49b9 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/GetUploadFileSignRequestData.cs @@ -0,0 +1,28 @@ +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// 获取微信支付反馈投诉图片的签名头部 + /// + public class GetUploadFileSignRequestData + { + /// + /// 微信支付的图片地址格式为"https://api.mch.weixin.qq.com/v3/merchant-service/images/{xxxxxx}" + /// + public string wxpay_url { get; set; } + + /// + /// 是否转存到cos,转存后可以获得图片的临时下载地址,30分钟有效 + /// + public bool convert_cos { get; set; } + + /// + /// 对应的反馈投诉id + /// + public string complaint_id { get; set; } + + /// + /// 0-正式环境 1-沙箱环境 + /// + public int env { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryAdverFundsJsonResult.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryAdverFundsJsonResult.cs index e888ba6cd6..7a20b630d2 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryAdverFundsJsonResult.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryAdverFundsJsonResult.cs @@ -57,5 +57,10 @@ public class QueryAdverFundsItem /// 广告金发放原因, 0:广告激励,1:通用赠送 /// public int fund_type { get; set; } + + /// + /// 广告金发放ID + /// + public string fund_id { get; set; } } } diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryFundsBillJsonResult.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryFundsBillJsonResult.cs new file mode 100644 index 0000000000..b980edf534 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryFundsBillJsonResult.cs @@ -0,0 +1,72 @@ +using Senparc.Weixin.Entities; +using System.Collections.Generic; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// + /// + public class QueryFundsBillJsonResult : WxJsonResult + { + /// + /// 广告金充值记录列表 + /// + public List bill_list { get; set; } + + /// + /// 查询命中总的页数 + /// + public int total_page { get; set; } + } + + /// + /// 广告金充值记录列表 + /// + public class QueryFundsBillItem + { + /// + /// 充值单 ID + /// + public string bill_id { get; set; } + + /// + /// 充值时间,unix秒级时间戳 + /// + public long oper_time { get; set; } + + /// + /// 对应广告金结算周期开始时间,unix秒级时间戳 + /// + public long settle_begin { get; set; } + + /// + /// 对应广告金结算周期结束时间,unix秒级时间戳 + /// + public long settle_end { get; set; } + + /// + /// 对应广告金ID + /// + public string fund_id { get; set; } + + /// + /// 充值账户 + /// + public string transfer_account_name { get; set; } + + /// + /// 充值账户UID + /// + public long transfer_account_uid { get; set; } + + /// + /// 充值金额,单位:分 + /// + public int transfer_amount { get; set; } + + /// + /// 广告金充值状态:0-充值中,1-充值成功,2-充值失败 + /// + public int status { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryFundsBillRequestData.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryFundsBillRequestData.cs new file mode 100644 index 0000000000..31dfa71f80 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryFundsBillRequestData.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// 查询广告金充值记录 + /// + public class QueryFundsBillRequestData + { + /// + /// 查询页码,不小于 1 + /// + public int page { get; set; } + + /// + /// 每页记录数量 + /// + public int page_size { get; set; } + + /// + /// 查询过滤条件 + /// + public QueryAdverFundsFilter filter { get; set; } + + /// + /// 0-正式环境 1-沙箱环境 + /// + public int env { get; set; } + } + + /// + /// 查询过滤条件 + /// + public class QueryFundsBillFilter + { + /// + /// 查询充值开始时间,unix秒级时间戳 + /// + public long oper_time_begin { get; set; } + + /// + /// 查询充值结束时间,unix秒级时间戳 + /// + public long oper_time_end { get; set; } + + /// + /// (可选)广告金充值单 ID + /// + public string bill_id { get; set; } + + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryRecoverBillJsonResult.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryRecoverBillJsonResult.cs new file mode 100644 index 0000000000..0e107c26e8 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryRecoverBillJsonResult.cs @@ -0,0 +1,67 @@ +using Senparc.Weixin.Entities; +using System.Collections.Generic; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// + /// + public class QueryRecoverBillJsonResult : WxJsonResult + { + /// + /// 广告金回收记录列表 + /// + public List bill_list { get; set; } + + /// + /// 查询命中总的页数 + /// + public int total_page { get; set; } + } + + /// + /// 广告金回收记录列表 + /// + public class QueryRecoverBillItem + { + /// + /// 充值单 ID + /// + public string bill_id { get; set; } + + /// + /// 回收时间,unix秒级时间戳 + /// + public long recover_time { get; set; } + + /// + /// 对应广告金结算周期开始时间,unix秒级时间戳 + /// + public long settle_begin { get; set; } + + /// + /// 对应广告金结算周期结束时间,unix秒级时间戳 + /// + public long settle_end { get; set; } + + /// + /// 对应广告金ID + /// + public string fund_id { get; set; } + + /// + /// 回收广告金账户 + /// + public string recover_account_name { get; set; } + + /// + /// 回收金额,单位:分 + /// + public int recover_amount { get; set; } + + /// + /// 对应的退款订单 id + /// + public List refund_order_list { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryRecoverBillRequestData.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryRecoverBillRequestData.cs new file mode 100644 index 0000000000..63d5395978 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryRecoverBillRequestData.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// 查询广告金回收记录 + /// + public class QueryRecoverBillRequestData + { + /// + /// 查询页码,不小于 1 + /// + public int page { get; set; } + + /// + /// 每页记录数量 + /// + public int page_size { get; set; } + + /// + /// 查询过滤条件 + /// + public QueryRecoverBillFilter filter { get; set; } + + /// + /// 0-正式环境 1-沙箱环境 + /// + public int env { get; set; } + } + + /// + /// 查询过滤条件 + /// + public class QueryRecoverBillFilter + { + /// + /// 查询回收开始时间,unix秒级时间戳 + /// + public long recover_time_begin { get; set; } + + /// + /// 查询回收结束时间,unix秒级时间戳 + /// + public long recover_time_end { get; set; } + + /// + /// (可选)广告金充值单 ID + /// + public string bill_id { get; set; } + + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryUserBalanceJsonResult.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryUserBalanceJsonResult.cs index 7c389e4a2f..0bea9003ac 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryUserBalanceJsonResult.cs +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/QueryUserBalanceJsonResult.cs @@ -45,6 +45,6 @@ public class QueryUserBalanceJsonResult : WxJsonResult /// /// 代币总余额,包括有价和赠送部分 /// - public int first_save_flag { get; set; } + public bool first_save_flag { get; set; } } } diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/ResponseComplaintRequestData.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/ResponseComplaintRequestData.cs new file mode 100644 index 0000000000..6fec1c86b8 --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/ResponseComplaintRequestData.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// 回复用户 + /// + public class ResponseComplaintRequestData + { + /// + /// 投诉id,get_complaint_list接口返回 + /// + public string complaint_id { get; set; } + + /// + /// 回复内容 + /// + public string response_content { get; set; } + + /// + /// 每一项的内容为string,传upload_vp_file接口返回的file_id + /// + public List response_images { get; set; } + + /// + /// 0-正式环境 1-沙箱环境 + /// + public int env { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/UploadVpFileJsonResult.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/UploadVpFileJsonResult.cs new file mode 100644 index 0000000000..c8ae7cb8de --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/UploadVpFileJsonResult.cs @@ -0,0 +1,15 @@ +using Senparc.Weixin.Entities; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// + /// + public class UploadVpFileJsonResult : WxJsonResult + { + /// + /// 返回文件id + /// + public string file_id { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/UploadVpFileRequestData.cs b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/UploadVpFileRequestData.cs new file mode 100644 index 0000000000..d2fe81893b --- /dev/null +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/AdvancedAPIs/XPay/XPayJson/UploadVpFileRequestData.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; + +namespace Senparc.Weixin.WxOpen.AdvancedAPIs.XPay +{ + /// + /// 上传媒体文件(如图片,凭证等) + /// + public class UploadVpFileRequestData + { + /// + /// 经base64编码后的图片内容,使用这个字段最多只能传1m的图片,超过1m请使用img_url字段 + /// + public string base64_img { get; set; } + + /// + /// 图片url,需要能直接下载,不能是返回302等返回码的地址,最高允许传2m图片(优先使用img_url) + /// + public string img_url { get; set; } + + /// + /// 图片名称 + /// + public string file_name { get; set; } + + /// + /// 0-正式环境 1-沙箱环境 + /// + public int env { get; set; } + } +} diff --git a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.net8.csproj b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.net8.csproj index d7d9cb1784..ba57c2a01c 100644 --- a/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.net8.csproj +++ b/src/Senparc.Weixin.WxOpen/src/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen/Senparc.Weixin.WxOpen.net8.csproj @@ -1,7 +1,7 @@ net462;netstandard2.0;netstandard2.1 - 3.17.5 + 3.17.6 9.0 Senparc.Weixin.WxOpen Senparc.Weixin.WxOpen @@ -179,6 +179,7 @@ v3.17.2 添加“小程序虚拟支付”功能 PR #2961 / Issue #2951 v3.17.3 添加小程序分类审核异步通知事件 / PR #2969 v3.17.5 新增小程序认证年审事件接口 / PR #2979 + v3.17.6 虚拟支付增加了接口从1.0.7~1.0.10,同步完善 / PR #2987 https://github.com/JeffreySu/WeiXinMPSDK