Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

增加 微信代扣 - 乘车码代扣 - 用户状态查询 (直连模式) #130

Merged
merged 8 commits into from
Mar 21, 2022
Original file line number Diff line number Diff line change
@@ -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
{
/// <summary>
/// 微信代扣 - 乘车码代扣 - 用户状态查询 (直连模式)
/// </summary>
public class WeChatPayTransitPayQueryStateRequest : IWeChatPayRequest<WeChatPayTransitPayQueryStateResponse>
{
/// <summary>
/// 委托代扣协议id
/// </summary>
public string ContractId { get; set; }

/// <summary>
/// 微信OpenId
/// </summary>
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<string, string> 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
}
}
Original file line number Diff line number Diff line change
@@ -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
{
/// <summary>
/// 返回状态码
/// </summary>
[XmlElement("return_code")]
public string ReturnCode { get; set; }

/// <summary>
/// 返回信息
/// </summary>
[XmlElement("return_msg")]
public string ReturnMsg { get; set; }

/// <summary>
/// 应用号
/// </summary>
[XmlElement("appid")]
public string AppId { get; set; }

/// <summary>
/// 商户号
/// </summary>
[XmlElement("mch_id")]
public string MchId { get; set; }

/// <summary>
/// 随机字符串
/// </summary>
[XmlElement("nonce_str")]
public string NonceStr { get; set; }

/// <summary>
/// 签名
/// </summary>
[XmlElement("sign")]
public string Sign { get; set; }

/// <summary>
/// 业务结果
/// </summary>
[XmlElement("result_code")]
public string ResultCode { get; set; }

/// <summary>
/// 错误代码
/// </summary>
[XmlElement("err_code")]
public string ErrCode { get; set; }

/// <summary>
/// 错误描述
/// </summary>
[XmlElement("err_code_des")]
public string ErrCodeDes { get; set; }

/// <summary>
/// 用户状态
/// </summary>
[XmlElement("user_state")]
public string UserState { get; set; }

/// <summary>
/// 委托代扣协议id
/// </summary>
[XmlElement("contract_id")]
public string ContractId { get; set; }

/// <summary>
/// 签约模板id
/// </summary>
[XmlElement("plan_id")]
public string PlanId { get; set; }

/// <summary>
/// 签约协议号
/// </summary>
[XmlElement("contract_code")]
public string ContractCode { get; set; }

/// <summary>
/// 协议状态
/// </summary>
[XmlElement("contract_state")]
public string ContractState { get; set; }
}
}