diff --git a/src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayTransitPayQueryStateRequest.cs b/src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayTransitPayQueryStateRequest.cs new file mode 100644 index 000000000..02ccf3d4e --- /dev/null +++ b/src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayTransitPayQueryStateRequest.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Essensoft.Paylink.WeChatPay.V2.Response; + +namespace Essensoft.Paylink.WeChatPay.V2.Request +{ + /// + /// 微信代扣 - 乘车码代扣 - 用户状态查询 (直连模式) + /// + public class WeChatPayTransitPayQueryStateRequest : IWeChatPayRequest + { + /// + /// 委托代扣协议id + /// + public string ContractId { get; set; } + + /// + /// 微信OpenId + /// + public string OpenId { get; set; } + + #region IWeChatPayRequest Members + + private string requestUrl = "https://api.mch.weixin.qq.com/transit/pay/querystate"; + private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256; + + public string GetRequestUrl() + { + return requestUrl; + } + + public void SetRequestUrl(string url) + { + requestUrl = url; + } + + public IDictionary GetParameters() + { + var parameters = new WeChatPayDictionary + { + { "contract_id", ContractId }, + { "openid", OpenId }, + }; + return parameters; + } + + public WeChatPaySignType GetSignType() + { + return signType; + } + + public void SetSignType(WeChatPaySignType signType) + { + this.signType = signType switch + { + WeChatPaySignType.HMAC_SHA256 => signType, + _ => throw new WeChatPayException("api only support HMAC_SHA256!"), + }; + } + + public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options) + { + sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr()); + sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId); + sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId); + + sortedTxtParams.Add(WeChatPayConsts.sign_type, signType); + sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType)); + } + + #endregion + } +} diff --git a/src/Essensoft.Paylink.WeChatPay/V2/Response/WeChatPayTransitPayQueryStateResponse.cs b/src/Essensoft.Paylink.WeChatPay/V2/Response/WeChatPayTransitPayQueryStateResponse.cs new file mode 100644 index 000000000..6f9f9a1f9 --- /dev/null +++ b/src/Essensoft.Paylink.WeChatPay/V2/Response/WeChatPayTransitPayQueryStateResponse.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Serialization; + +namespace Essensoft.Paylink.WeChatPay.V2.Response +{ + [XmlRoot("xml")] + public class WeChatPayTransitPayQueryStateResponse : WeChatPayResponse + { + /// + /// 返回状态码 + /// + [XmlElement("return_code")] + public string ReturnCode { get; set; } + + /// + /// 返回信息 + /// + [XmlElement("return_msg")] + public string ReturnMsg { get; set; } + + /// + /// 应用号 + /// + [XmlElement("appid")] + public string AppId { get; set; } + + /// + /// 商户号 + /// + [XmlElement("mch_id")] + public string MchId { get; set; } + + /// + /// 随机字符串 + /// + [XmlElement("nonce_str")] + public string NonceStr { get; set; } + + /// + /// 签名 + /// + [XmlElement("sign")] + public string Sign { get; set; } + + /// + /// 业务结果 + /// + [XmlElement("result_code")] + public string ResultCode { get; set; } + + /// + /// 错误代码 + /// + [XmlElement("err_code")] + public string ErrCode { get; set; } + + /// + /// 错误描述 + /// + [XmlElement("err_code_des")] + public string ErrCodeDes { get; set; } + + /// + /// 用户状态 + /// + [XmlElement("user_state")] + public string UserState { get; set; } + + /// + /// 委托代扣协议id + /// + [XmlElement("contract_id")] + public string ContractId { get; set; } + + /// + /// 签约模板id + /// + [XmlElement("plan_id")] + public string PlanId { get; set; } + + /// + /// 签约协议号 + /// + [XmlElement("contract_code")] + public string ContractCode { get; set; } + + /// + /// 协议状态 + /// + [XmlElement("contract_state")] + public string ContractState { get; set; } + } +}