博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#微信开发之旅(十三):V2订单查询&退款(完结)
阅读量:4658 次
发布时间:2019-06-09

本文共 5631 字,大约阅读时间需要 18 分钟。

订单查询

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

1         ///  2         /// V2订单查询 3         ///  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         ///  2         /// 生成订单查询Json  (已测试通过) 3         ///  4         /// 
5 public string CreateOrderQueryPackage() 6 { 7 Dictionary
nativeObj = new Dictionary
(); 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         ///  2         /// V2退款 3         ///  4         /// 
提交退款结果
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     ///  2     /// V2 接口 退款帮助类 3     ///  4     public class TenpayHelper 5     { 6         ///  7         /// 申请退款 8         ///  9         /// 商户号10         /// 财付通密钥11         /// 商户订单号12         /// 微信订单号13         /// 总金额(单位:分)14         /// 退款单号15         /// 退款金额(单位:分)16         /// MVC页面请求上下文对象17         /// 
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 else49 {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 else83 {84 return false;85 }86 }87 else88 {89 return false;90 }91 }92 }

结束语:

  C#微信开发之旅是我在博客园首篇随笔系列,写的虎头蛇尾,就先结束了。。。。

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

转载于:https://www.cnblogs.com/hetring/p/4076938.html

你可能感兴趣的文章
关于python做人工智能的一个网页(很牛逼)
查看>>
判断控件的CGRect是否重合,获取控件的最大XY值
查看>>
POJ-1128 Frame Stacking
查看>>
GET请求在Tomcat中的传递及URI传递
查看>>
P4878 道路修建-美国
查看>>
dp练习
查看>>
[javascript]9宫格拖拽拼图游戏 puzzle
查看>>
Entity Framework底层操作封装(3)
查看>>
InputStream 转换 InputStreamReader再转换BufferedReader
查看>>
在线程池中的使用spring aop事务增强
查看>>
javascript相关知识
查看>>
数组对象去重
查看>>
你未必知道的12个JavaScript技巧
查看>>
mysql的基本操作命令
查看>>
微信小程序---数据缓存
查看>>
Python网页正文转换语音文件的操作方法
查看>>
常用SQL查询语句
查看>>
Redis Windows版安装详解
查看>>
linux后台运行python程序 nohup
查看>>
吴裕雄--天生自然 高等数学学习:对面积的曲面积分
查看>>