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; }
+ }
+}