C#微信开发之旅十三:V2订单查询&退款(完结)

订单查询

用处同V3订单查询,直接上代码:

 1         /// <summary>
 2         /// V2订单查询
 3         /// </summary>
 4         public void QueryOrder)
 5         {
 6             string orderNo = string.Empty;
 7  
 8             WxPayModel model = WxPayModel.CreateorderNo);
 9             OrderQueryMessage message = WeiXinHelper.OrderQuerymodel.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", GetBizSignnativeObj));
16             nativeObj.Add"sign_method", SignType);
17 
18             var entries = nativeObj.Selectd => 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.RefundWeiXinConst.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 Refundstring 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.setKeypartnerKey); //财付通密钥
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.IsNullOrEmptytransanctionId))
42             {
43                 if string.IsNullOrEmptyorderNo))
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.setCertInfocertPath, certPwd);
62             //设置请求内容
63             httpClient.setReqContentrequestUrl);
64             //设置超时
65             httpClient.setTimeOut10);
66 
67             string rescontent = "";
68             //后台调用
69             if httpClient.call))
70             {
71                 //获取结果
72                 rescontent = httpClient.getResContent);
73 
74                 resHandler.setKeypartnerKey);
75                 //设置结果参数
76                 resHandler.setContentrescontent);
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#微信开发之旅是我在博客园首篇随笔系列,写的虎头蛇尾,就先结束了。。。。

  以后会继续坚持写博客,分享工作中总结的微小经验用以记录,也希望能帮到大家!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注