C# 微支付退款查询接口 V3.3.6

#region 微支付退款查询

string Nonce = CreateRandomCode(15).ToLower(); //生成15个随机字符
string sign1 = "appid=" + PayHandle.AppID.ToString() + //微信公众号的APPID
"&mch_id=" + PayHandle.MechID.ToString() + //商户号
"&nonce_str=" + Nonce + //随机字符串
"&out_trade_no=" + row["WXO_OCode"].ToString(); //商户订单号
string sign2 = sign1 + "&key=" + PayHandle.PayKey.ToString(); //商户key
string sign = T9.Util.EncryptUtil.md5(sign2, 32).ToUpper(); //MD5加密
//调用退款查询接口
string URL = "https://api.mch.weixin.qq.com/pay/refundquery";
string RequstContext = "<xml>" +
"<appid><![CDATA[" + PayHandle.AppID.ToString() + "]]></appid>" +
"<mch_id><![CDATA[" + PayHandle.MechID.ToString() + "]]></mch_id>" +
"<nonce_str><![CDATA[" + Nonce + "]]></nonce_str>" +
"<sign><![CDATA[" + sign + "]]></sign>" +
"<out_trade_no><![CDATA[" + row["WXO_OCode"].ToString() + "]]></out_trade_no>" +
"</xml>";
string refundquery = SendInfo(URL, RequstContext); //调用向服务器发送请求的方法

XmlDocument doc = new XmlDocument();
doc.LoadXml(refundquery);
XmlElement rootElement = doc.DocumentElement;
string Code = rootElement.SelectSingleNode("return_code").InnerText; //协议级判断
if (Code == "SUCCESS") //协议级验证
{
string result_code = rootElement.SelectSingleNode("result_code").InnerText;
if (result_code == "SUCCESS")//业务级验证
{
int count = Convert.ToInt32(rootElement.SelectSingleNode("refund_count").InnerText);//退款记录数
if (count >= 2)
{
//数据处理
}
else
{
//数据处理
}
}
else
{
this.ClientScript.RegisterStartupScript(GetType(), "", "<script>ShowFW(‘出现未知的错误,请联系管理员!‘);</script>");
}
}
else
{
this.ClientScript.RegisterStartupScript(GetType(), "", "<script>ShowFW(‘出现未知的错误,请联系管理员!‘);</script>");
}
#endregion
#region 生成随机字符串
/// <summary>
/// 生成随机字符串
/// </summary>
/// <param name="codeCount"></param>
/// <param name="allChar"></param>
/// <returns></returns>
public static string CreateRandomCode(int codeCount)
{
//验证码中的出现的字符,避免了一些容易混淆的字符。
string allChar = "3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,M,N,P,Q,R,S,T,U,W,X,Y";
string[] allCharArray = allChar.Split(‘,‘);
string randomCode = "";
int temp = -1;
bool breCreate = (codeCount < 6 && allCharArray.Length > 15);

Random rand = new Random();
for (int i = 0; i < codeCount; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
}
int t = rand.Next(allCharArray.Length);
if (temp == t && breCreate)
{
return CreateRandomCode(codeCount);
}
temp = t;
randomCode += allCharArray[t];
}
return randomCode;
}
#endregion
#region 向微信服务器发送信息
/// <summary>
/// 向微信服务器发送信息
/// </summary>
/// <param name="posturl"></param>
/// <param name="postData"></param>
/// <returns></returns>
public string SendInfo(string posturl, string postData)
{
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
Encoding encoding = Encoding.UTF8;
byte[] data = encoding.GetBytes(postData);
// 准备请求...
try
{
// 设置参数
request = WebRequest.Create(posturl) as HttpWebRequest;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
string err = string.Empty;
return content;
}
catch (Exception ex)
{
T9.Util.LogUtil.WriteLog(ex.Message + "\r\n" + ex.StackTrace, "WebLog");
return string.Empty;
}
}
#endregion

时间: 2024-12-19 06:25:25

C# 微支付退款查询接口 V3.3.6的相关文章

C# 微支付退款申请接口 V3.3.6

/// <summary>/// 微支付退款申请/// </summary>/// <param name="context"></param>/// <param name="returnMsg"></param>/// <returns></returns>public bool Refund(HttpContext context, ref string retur

java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式

1.场景 在做微信支付退款通知接口时,微信对通知的内容做了加密,并且指定用 AES256 解密,官方指定的解密方式如下: 2.导包 <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on --> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</art

浅析微信支付:申请退款、退款回调接口、查询退款

本文是[浅析微信支付]系列文章的第八篇,主要讲解商户如何处理微信申请退款.退款回调.查询退款接口,其中有一些坑的地方,会着重强调. 浅析微信支付系列已经更新七篇了哟-,没有看过的朋友们可以看一下哦. 浅析微信支付:查询订单和关闭订单 浅析微信支付:支付结果通知 浅析微信支付:统一下单接口 在实际场景中,申请退款和退款回调接口是比较常用到的微信支付接口,这里我们会讲原路返回方式的退款,还有的是使用直接为用户付款到零钱.现金红包等方式来退款,此种情况主要会出现在客服退款时,不是全部退款的情况,也有的

利用微信支付的订单查询接口可以在APP 中提高支付的可靠性

最近公司有一个应用,用户可以在微信公众号上面下单,也可以在APP 中下单. 当用户在公共号上面下单时,微信支付成功可以返回微信支付单号,但是在APP 中用户微信支付时,个别时候会出现用户没有付款成功,却在支付后的回调逻辑中执行了订单支付成功的逻辑. 显然在APP中微信支付的这种回调逻辑是不可靠的. (1)首先说明下为什么要拿到微信支付订单号 微信支付订单号是微信系统在支付成功后返回的订单号,比如这样的订单号:4007322001201705049543255213, 拿到这个订单号可以调用微信查

微信支付之退款查询

应用场景 提交退款申请后,通过调用该接口查询退款状态.退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态. 官方文档: http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_5 参考代码: package com.wingo.action.config; import java.util.Map; import java.util.SortedMap; import java.util.Tre

C# 微支付 JSAPI支付方式 V3.3.6版本

<script type="text/javascript">//结算 (订单号) function PayClearing(num) { $.ajax({ type: "POST", url: "/***/handler/***.ashx", data: "otype=Account&ids=" + num , async: false, success: function (msg) { if (msg

微支付开发(.net)

最近一周多进行微支付开发工作,总结一下关于微支付开发中遇到的问题. 如写得不对请大家提出,第一次自己写文章.嘿嘿... 1.申请微支付,登陆公众平台后(公众号为服务号并已认证),进入“服务”-“服务中心"-“商户功能”,完成基本资料的填写: JS API与Native API JS API:就是通过微信端进入你的微商城,在你的微商城中选购好要购买商品,然后再通过微支付进行付款,通过getBrandWCPayRequest接口来调用微支付 Native API:商家自己生成特定的URL,用户只需要

微信、支付宝各种支付退款

java 版微信.支付宝各种支付退款 前言 最近整理了一下自己做过的各种支付退款的业务,并整理如下,只是大致思路代码不保证百分百没有问题但是都是经过我以前实际验证过并投入生产环境的,省略了一些和支付无关的业务流程. java 微信App支付 参考时序图了解大致流程. 微信App支付文档 大致步骤: 步骤1:用户在商户APP中选择商品,提交订单,选择微信支付. 步骤2:商户后台收到用户支付单,调用微信支付统一下单接口.参见统一下单API. 步骤3:统一下单接口返回正常的prepay_id,再按签名

支付宝手机网页支付即时到账接口

mycncart的前后台均为移动设备方便访问,支付宝方面单独针对移动设备访问网站设立了支付接口,普通的支付宝即时到账接口无法在手机网页上正常支付 本支付插件是支付宝手机网页即时到账接口. 本插件需要解决生成商家公钥和私钥等,以及与支付宝方面的技术接洽,请与我联系获取此免费技术支持. 主要功能: 1. 针对有资格申请支付宝手机网页即时到账的中国国内公司商家设计使用: 2. 可设置最低启用金额; 3. 可设置适用的国家和地区用户; 4. 设定相关订单状态: 5. 当支付款项成功时,支付宝将相关操作异