ASP.NET Core 微信支付(三)【查询订单 APIV3】

官方参考资料 理论实战

  官方提供两种查询订单的方式,一种是根据商户自己生成的订单号查询,一种方式是根据微信生成的订单号查询。而我使用的就是第一种方式。

  调用微信支付的查询订单,需要生成签名,按照微信支付的接口规则构造http的header。

代码

  数据实体映射类  

    public class WxPayStatusRespModel

{<br/>
    /// &lt;summary&gt;<br/>
    ///  商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一<br/>
    /// &lt;/summary&gt;<br/>
    public string out_trade_no { get; set; }

/// &lt;summary&gt;

    ///  微信支付系统生成的订单号。<br/>
    /// &lt;/summary&gt;<br/>
    public string transaction_id { get; set; }

/// &lt;summary&gt;

    ///  交易类型,枚举值:<br/>
    ///  JSAPI:公众号支付<br/>
    ///  NATIVE:扫码支付<br/>
    ///  APP:APP支付<br/>
    ///  MICROPAY:付款码支付<br/>
    ///  MWEB:H5支付<br/>
    ///  FACEPAY:刷脸支付<br/>
    /// &lt;/summary&gt;<br/>
    public string trade_type { get; set; }

/// &lt;summary&gt;

    /// 交易状态,枚举值:<br/>
    /// SUCCESS:支付成功<br/>
    /// REFUND:转入退款<br/>
    /// NOTPAY:未支付<br/>
    /// CLOSED:已关闭<br/>
    /// REVOKED:已撤销(付款码支付)<br/>
    /// USERPAYING:用户支付中(付款码支付)<br/>
    /// PAYERROR:支付失败(其他原因,如银行返回失败)<br/>
    /// ACCEPT:已接收,等待扣款<br/>
    /// &lt;/summary&gt;<br/>
    public string trade_state { get; set; }

/// &lt;summary&gt;

    /// 交易状态描述<br/>
    /// &lt;/summary&gt;<br/>
    public string trade_state_desc { get; set; }

/// &lt;summary&gt;

    /// 支付者信息<br/>
    /// &lt;/summary&gt;<br/>
    public WxPayerModel payer { set; get; }<br/>
}

/// &lt;summary&gt;

/// 支付用户信息实体<br/>
/// &lt;/summary&gt;<br/>
public class WxPayerModel<br/>
{<br/>
    /// &lt;summary&gt;<br/>
    /// 用户在直连商户appid下的唯一标识。<br/>
    /// &lt;/summary&gt;<br/>
    public string openid { get; set; }<br/>
}</pre>

  查询订单接口请求代码

            var url = $“https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/{orderNumber}?mchid={WxPayConst.mchid}&#34;;

        var client = new HttpClient(new HttpHandler());<br/>
        var resp = await client.GetAsync(url);<br/>
        NlogHelper.Debug(&#34;查询订单状态&#34;);<br/>
        var respStr = await resp.Content.ReadAsStringAsync();//这里就是微信支付查询订单返回的json数据了,自己进行解析就可以了<br/>
        var payModel = respStr.ToObject&lt;WxPayStatusRespModel&gt;();</pre>

  类型转换工具方法

        /// &lt;summary&gt;

    /// json字符串转化为相应的类型<br/>
    /// &lt;/summary&gt;<br/>
    /// &lt;typeparam name=&#34;T&#34;&gt;转化后的类型&lt;/typeparam&gt;<br/>
    /// &lt;param name=&#34;json&#34;&gt;json字符串&lt;/param&gt;<br/>
    /// &lt;returns&gt;转化后的类型&lt;/returns&gt;<br/>
    public static T ToObject&lt;T&gt;(this string json)<br/>
    {<br/>
        return json == null ? default(T) : JsonConvert.DeserializeObject&lt;T&gt;(json);<br/>
    }</pre>