C#微信开发之旅(十三):V2订单查询&退款(完结)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#微信开发之旅(十三):V2订单查询&退款(完结),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4775字,纯文字阅读大概需要7分钟。
内容图文
订单查询
用处同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>(); 8if (CheckOrderQueryParameters() == false) 9 { 10thrownew 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); 1718var entries = nativeObj.Select(d => string.Format("\"{0}\": \"{1}\"", d.Key, d.Value)); 1920return"{" + string.Join(",", entries.ToArray()) + "}"; 21 }
退款
退款操作只是向财付通发出退款通知,成功与否需要查询:
1 /// <summary> 2 /// V2退款 3 /// </summary> 4 /// <returns> 提交退款结果 </returns> 5 public bool OrderRefund() 6 { 7 string orderNo = string.Empty; 8string transactionId = string.Empty; 9string totalFee = string.Empty; 10string refundNo = string.Empty; 11string refundFee = string.Empty; 1213/*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*/1819return 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, 19string transanctionId, string totalFee, string refundNo, string refundFee, 20string certPath, string certPwd) 21 { 22//商户号23string partner = partnerId; 24//创建请求对象25 RequestHandler reqHandler = new RequestHandler(); 26//通信对象27 TenpayHttpClient httpClient = new TenpayHttpClient(); 28//应答对象29 ClientResponseHandler resHandler = new ClientResponseHandler(); 3031//----------------------------- 32//设置请求参数 33//-----------------------------34 reqHandler.init(); 35 reqHandler.setKey(partnerKey); //财付通密钥3637 reqHandler.setGateUrl("https://mch.tenpay.com/refundapi/gateway/refund.xml"); 3839 reqHandler.setParameter("partner", partner); 40//out_trade_no和transaction_id至少一个必填,同时存在时transaction_id优先41if (string.IsNullOrEmpty(transanctionId)) 42 { 43if (string.IsNullOrEmpty(orderNo)) 44thrownew Exception("订单号不能为空!"); 4546 reqHandler.setParameter("out_trade_no", orderNo); 47 } 48else49 { 50 reqHandler.setParameter("transaction_id", transanctionId); 51 } 5253 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"); 5960string requestUrl = reqHandler.getRequestURL(); 61 httpClient.setCertInfo(certPath, certPwd); 62//设置请求内容63 httpClient.setReqContent(requestUrl); 64//设置超时65 httpClient.setTimeOut(10); 6667string rescontent = ""; 68//后台调用69if (httpClient.call()) 70 { 71//获取结果72 rescontent = httpClient.getResContent(); 7374 resHandler.setKey(partnerKey); 75//设置结果参数76 resHandler.setContent(rescontent); 77//判断签名及结果78if (resHandler.isTenpaySign() && resHandler.getParameter("retcode") == "0") 79 { 80returntrue; 81 } 82else83 { 84returnfalse; 85 } 86 } 87else88 { 89returnfalse; 90 } 91 } 92 }
结束语:
C#微信开发之旅是我在博客园首篇随笔系列,写的虎头蛇尾,就先结束了。。。。
以后会继续坚持写博客,分享工作中总结的微小经验用以记录,也希望能帮到大家!
原文:http://www.cnblogs.com/hetring/p/4076938.html
内容总结
以上是互联网集市为您收集整理的C#微信开发之旅(十三):V2订单查询&退款(完结)全部内容,希望文章能够帮你解决C#微信开发之旅(十三):V2订单查询&退款(完结)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。