官方參考資料
查詢訂單
理論實戰
官方提供兩種查詢訂單的方式,一種是根據商戶自己生成的訂單號查詢,一種方式是根據微信生成的訂單號查詢,而我使用的就是第一種方式,
呼叫微信支付的查詢訂單,需要生成簽名,按照微信支付的介面規則構造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); }
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/264660.html
標籤:.NET Core
