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


    官方参考资料

      查询订单

    理论实战

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

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

      生成签名可以参考我的文章:《ASP.NET Core 微信支付(一)【统一下单 APIV3】》《ASP.NET Core 微信支付(二)【 发布到服务器上签名加密时报错:系统找不到指定的文件 APIV3】》

    代码

      数据实体映射类  

        public class WxPayStatusRespModel
        {
            /// <summary>
            ///  商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一
            /// </summary>
            public string out_trade_no { get; set; }
    
            /// <summary>
            ///  微信支付系统生成的订单号。
            /// </summary>
            public string transaction_id { get; set; }
    
            /// <summary>
            ///  交易类型,枚举值:
            ///  JSAPI:公众号支付
            ///  NATIVE:扫码支付
            ///  APP:APP支付
            ///  MICROPAY:付款码支付
            ///  MWEB:H5支付
            ///  FACEPAY:刷脸支付
            /// </summary>
            public string trade_type { get; set; }
    
            /// <summary>
            /// 交易状态,枚举值:
            /// SUCCESS:支付成功
            /// REFUND:转入退款
            /// NOTPAY:未支付
            /// CLOSED:已关闭
            /// REVOKED:已撤销(付款码支付)
            /// USERPAYING:用户支付中(付款码支付)
            /// PAYERROR:支付失败(其他原因,如银行返回失败)
            /// ACCEPT:已接收,等待扣款
            /// </summary>
            public string trade_state { get; set; }
    
            /// <summary>
            /// 交易状态描述
            /// </summary>
            public string trade_state_desc { get; set; }
    
            /// <summary>
            /// 支付者信息
            /// </summary>
            public WxPayerModel payer { set; get; }
        }
    
        /// <summary>
        /// 支付用户信息实体
        /// </summary>
        public class WxPayerModel
        {
            /// <summary>
            /// 用户在直连商户appid下的唯一标识。
            /// </summary>
            public string openid { get; set; }
        }

      查询订单接口请求代码

                var url = $"https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/{orderNumber}?mchid={WxPayConst.mchid}";
                var client = new HttpClient(new HttpHandler());
                var resp = await client.GetAsync(url);
                NlogHelper.Debug("查询订单状态");
                var respStr = await resp.Content.ReadAsStringAsync();//这里就是微信支付查询订单返回的json数据了,自己进行解析就可以了
                var payModel = respStr.ToObject<WxPayStatusRespModel>();

      类型转换工具方法

            /// <summary>
            /// json字符串转化为相应的类型
            /// </summary>
            /// <typeparam name="T">转化后的类型</typeparam>
            /// <param name="json">json字符串</param>
            /// <returns>转化后的类型</returns>
            public static T ToObject<T>(this string json)
            {
                return json == null ? default(T) : JsonConvert.DeserializeObject<T>(json);
            }
  • 相关阅读:
    通道符和xargs命令
    Linux中sudo的用法
    yum中查找程序由哪个包提供
    SELinux 宽容模式(permissive) 强制模式(enforcing) 关闭(disabled)
    Centos7中一次性安装开发者工具
    数据库设计步骤
    校验表单demo
    javascript之DOM总结
    javascript之BOM对象总结
    javascript之正则表达式
  • 原文地址:https://www.cnblogs.com/dawenyang/p/14458717.html
Copyright © 2020-2023  润新知