C#微信開發之旅(十三):V2訂單查詢&退款(完結)


訂單查詢

用處同V3訂單查詢,直接上代碼:

 1         /// <summary>
 2         /// V2訂單查詢
 3         /// </summary>
 4         public void QueryOrder()
 5         {
 6             string orderNo = string.Empty;
 7  
 8             WxPayModel model = WxPayModel.Create(orderNo);
 9             OrderQueryMessage message = WeiXinHelper.OrderQuery(model.CreateOrderQueryPackage());
10         }

生成訂單查詢json方法:

 1         /// <summary>
 2         /// 生成訂單查詢Json  (已測試通過)
 3         /// </summary>
 4         /// <returns></returns>
 5         public string CreateOrderQueryPackage()
 6         {
 7             Dictionary<string, string> nativeObj = new Dictionary<string, string>();
 8             if (CheckOrderQueryParameters() == false)
 9             {
10                 throw new SDKRuntimeException("生成package參數缺失!");
11             }
12             nativeObj.Add("appid", AppId);
13             nativeObj.Add("package", GetCftPackage());
14             nativeObj.Add("timestamp", ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString());
15             nativeObj.Add("app_signature", GetBizSign(nativeObj));
16             nativeObj.Add("sign_method", SignType);
17 
18             var entries = nativeObj.Select(d => string.Format("\"{0}\": \"{1}\"", d.Key, d.Value));
19 
20             return "{" + string.Join(",", entries.ToArray()) + "}";
21         }

退款

退款操作只是向財付通發出退款通知,成功與否需要查詢:

 1         /// <summary>
 2         /// V2退款
 3         /// </summary>
 4         /// <returns>提交退款結果</returns>
 5         public bool OrderRefund()
 6         {
 7             string orderNo = string.Empty;
 8             string transactionId = string.Empty;
 9             string totalFee = string.Empty;
10             string refundNo = string.Empty;
11             string refundFee = string.Empty;
12 
13             /*
14              TenpayHelper.Refund()方法中  這兩段代碼是在  管理員賬號的密碼默認為111111時使用 ,請根據情況修改
15             reqHandler.setParameter("op_user_id", partnerId); //todo:配置(op_user_id,op_user_passwd)
16             reqHandler.setParameter("op_user_passwd", MD5Util.GetMD5("111111", "GBK"));
17              */
18 
19             return TenpayHelper.Refund(WeiXinConst.PartnerId, WeiXinConst.PartnerKey,
20                orderNo, transactionId, totalFee, refundNo, refundFee,
21                WeiXinConst.CertPath, WeiXinConst.CertPwd);
22         }

TenpayHelper.Refund()方法是對V2官方demo再次封裝的,相關方法做了一點修改:

 1     /// <summary>
 2     /// V2 接口 退款幫助類
 3     /// </summary>
 4     public class TenpayHelper
 5     {
 6         /// <summary>
 7         /// 申請退款
 8         /// </summary>
 9         /// <param name="partnerId">商戶號</param>
10         /// <param name="partnerKey">財付通密鑰</param>
11         /// <param name="orderNo">商戶訂單號</param>
12         /// <param name="transanctionId">微信訂單號</param>
13         /// <param name="totalFee">總金額(單位:分)</param>
14         /// <param name="refundNo">退款單號</param>
15         /// <param name="refundFee">退款金額(單位:分)</param>
16         /// <param name="Context">MVC頁面請求上下文對象</param>
17         /// <returns></returns>
18         public static bool Refund(string partnerId, string partnerKey, string orderNo,
19             string transanctionId, string totalFee, string refundNo, string refundFee,
20             string certPath, string certPwd)
21         {
22             //商戶號
23             string partner = partnerId;
24             //創建請求對象
25             RequestHandler reqHandler = new RequestHandler();
26             //通信對象
27             TenpayHttpClient httpClient = new TenpayHttpClient();
28             //應答對象
29             ClientResponseHandler resHandler = new ClientResponseHandler();
30 
31             //-----------------------------
32             //設置請求參數
33             //-----------------------------
34             reqHandler.init();
35             reqHandler.setKey(partnerKey); //財付通密鑰
36 
37             reqHandler.setGateUrl("https://mch.tenpay.com/refundapi/gateway/refund.xml");
38 
39             reqHandler.setParameter("partner", partner);
40             //out_trade_no和transaction_id至少一個必填,同時存在時transaction_id優先
41             if (string.IsNullOrEmpty(transanctionId))
42             {
43                 if (string.IsNullOrEmpty(orderNo))
44                     throw new Exception("訂單號不能為空!");
45 
46                 reqHandler.setParameter("out_trade_no", orderNo);
47             }
48             else
49             {
50                 reqHandler.setParameter("transaction_id", transanctionId);
51             }
52 
53             reqHandler.setParameter("out_refund_no", refundNo); //退款單號
54             reqHandler.setParameter("total_fee", totalFee); //總金額
55             reqHandler.setParameter("refund_fee", refundFee); //退款金額
56             reqHandler.setParameter("op_user_id", partnerId); //todo:配置(op_user_id,op_user_passwd)
57             reqHandler.setParameter("op_user_passwd", MD5Util.GetMD5("111111", "GBK"));
58             reqHandler.setParameter("service_version", "1.1");
59 
60             string requestUrl = reqHandler.getRequestURL();
61             httpClient.setCertInfo(certPath, certPwd);
62             //設置請求內容
63             httpClient.setReqContent(requestUrl);
64             //設置超時
65             httpClient.setTimeOut(10);
66 
67             string rescontent = "";
68             //后台調用
69             if (httpClient.call())
70             {
71                 //獲取結果
72                 rescontent = httpClient.getResContent();
73 
74                 resHandler.setKey(partnerKey);
75                 //設置結果參數
76                 resHandler.setContent(rescontent);
77                 //判斷簽名及結果
78                 if (resHandler.isTenpaySign() && resHandler.getParameter("retcode") == "0")
79                 {
80                     return true;
81                 }
82                 else
83                 {
84                     return false;
85                 }
86             }
87             else
88             {
89                 return false;
90             }
91         }
92     }

結束語:

  C#微信開發之旅是我在博客園首篇隨筆系列,寫的虎頭蛇尾,就先結束了。。。。

  以后會繼續堅持寫博客,分享工作中總結的微小經驗用以記錄,也希望能幫到大家!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM