<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 == "-99") {
alert("请先关注该公众号,再进行下单操作!");
} else if (msg == "1") {
alert("出现未知的错误,请联系管理员!");
} else if (msg == "2") {
alert("请选择您要支付的订单!");
} else { //返回预支付ID

var argument = msg.split(",");
//前台H5调用
WeixinJSBridge.invoke('getBrandWCPayRequest', {
"appId": argument[0], //公众号AppID
"timeStamp": argument[1], //时间戳
"nonceStr": argument[2], //随机串
"package": argument[3], //扩展包
"signType": "MD5", //微信签名方式:MD5
"paySign": argument[4] //微信签名
}, function (res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
alert("支付完成");
}
});
}
}
});
}
</script>

#region 使用微支付统一接口,返回预支付ID
/// <summary>
/// 使用微支付统一接口,返回预支付ID
/// </summary>
/// <param name="context"></param>
/// <param name="returnMsg"></param>
/// <returns></returns>
private bool PayAccount(HttpContext context,ref string returnMsg)
{
int UID = 0;
int Address = 0;
string OIDs = ""; //订单号

if (context.Request["ids"].TrimStart(',').TrimEnd(',').Length > 0)
{
OIDs = context.Request["ids"].TrimStart(',').TrimEnd(',');
order = *BLL.GetModel(Convert.ToInt32(OIDs)); //获取订单实体
}
else
{
returnMsg = "选择您要支付的订单";//选择您要支付的订单
return false;
}
//判断是否使用优惠券
int privilege = 0; //优惠的money
if(order.**ID.ToString()!="0" && order.**ID.ToString()!="") //有优惠券的ID 则使用
{
privilege = Convert.ToInt32((order.*Price)*100); //优惠的money
}
int Money = 0;
int isWZTest =Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["isWZFTest"]);
if (isWZTest == 1) //测试
{
Money = 1;
}
else //正常计费
{
Money =Convert.ToInt32 (Convert.ToInt32(((order.**Price + order.**ight) * 100))-privilege);//支付金额为订单总金额加运费减去优惠的money
}
string Nonce = CreateRandomCode(15).ToLower(); //生成15个随机字符
string sign1 = "appid=" +PayHandle.AppID.ToString()+ //微信公众号的AppID
"&body=" + ProtectName + //商品描述
"&mch_id=" +PayHandle.MechID.ToString()+ //商户号
"&nonce_str=" + Nonce + //随机字符串
"&notify_url=http://***.com/***/Notify/PayNotify.aspx" + //微支付支付成功的通知路径
"&openid=" + **.OpenID + //微信用户的OpenID
"&out_trade_no=" + ***.Code + //商户的订单标识
"&spbill_create_ip=***.**.**.**" + //服务器IP
//订单失效时间为创建订单时间后15天
"&time_expire=" + **.CreateTime.AddDays(15).ToString("yyyyMMddHHmmss") +
"&time_start=" + **.CreateTime.ToString("yyyyMMddHHmmss") + //订单创建时间
//支付的价钱 以分为单位
"&total_fee=" + Money +
"&trade_type=JSAPI"; //交易类型

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/unifiedorder"; //统一支付接口
string RequstContext = "<xml>" +
"<appid><![CDATA[" + PayHandle.AppID.ToString() + "]]></appid>" +
"<mch_id>"+ PayHandle.MechID.ToString() +"</mch_id>" +
"<nonce_str><![CDATA[" + Nonce + "]]></nonce_str>" +
"<sign><![CDATA[" + sign + "]]></sign>" +
"<body><![CDATA[" + ProtectName + "]]></body>" +
"<out_trade_no><![CDATA[" + **.Code + "]]></out_trade_no>" +//商户的订单标识
"<total_fee>" + Money + "</total_fee>" +//支付金额(以分为单位)
"<spbill_create_ip>***.**.**.**</spbill_create_ip>" +//服务器的IP
"<time_start>" + **.CreateTime.ToString("yyyyMMddHHmmss") + "</time_start>" + //订单创建时间
"<time_expire>" + **.CreateTime.AddDays(15).ToString("yyyyMMddHHmmss") + "</time_expire>" +//订单失效时间
"<notify_url>http://***.com/***/Notify/PayNotify.aspx</notify_url>" + //微支付支付成功的通知路径
"<trade_type><![CDATA[JSAPI]]></trade_type>" +
"<openid><![CDATA[" + **.OpenID + "]]></openid>" + //微信用户的OpenID
"</xml>";
string PayInfo = SendInfo(URL, RequstContext); //微支付返回的数据

XmlDocument doc = new XmlDocument();
doc.LoadXml(PayInfo);
XmlElement rootElement = doc.DocumentElement;
string Code = rootElement.SelectSingleNode("return_code").InnerText; //协议级判断
if (Code == "SUCCESS")
{
string ResultCode=rootElement.SelectSingleNode("result_code").InnerText;//业务及判断
if (ResultCode == "SUCCESS")
{
string prepay = rootElement.SelectSingleNode("prepay_id").InnerText; //预支付ID
if (prepay.ToString() != "")
{
int timeStamp = ConvertDateTimeInt(DateTime.Now); //时间戳
string appId = PayHandle.AppID.ToString(); //公众号的APPID
string nonceStr = CreateRandomCode(15).ToLower(); //15个随机字符串
string package="prepay_id="+prepay;
string signTemp = "appId=" + appId +
"&nonceStr=" + nonceStr +
"&package=" + package +
"&signType=MD5" +
"&timeStamp=" + timeStamp +
"&key=" + PayHandle.PayKey.ToString();
string strsign = T9.Util.EncryptUtil.md5(signTemp, 32).ToUpper(); //签名
returnMsg = appId + "," + timeStamp + "," + nonceStr + "," + package + "," + strsign; //返回H5支付需要的参数,方便调用

return true;
}
else
{
returnMsg = "出现未知的错误,请联系管理员";//出现未知的错误,请联系管理员
return false;
}
}
else
{
returnMsg = "出现未知的错误,请联系管理员";//出现未知的错误,请联系管理员
return false;
}
}
else
{
returnMsg = "出现未知的错误,请联系管理员";//出现未知的错误,请联系管理员
return false;
}
}
#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

#region datetime转换为unixtime
/// <summary>
/// datetime转换为unixtime
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
public int ConvertDateTimeInt(System.DateTime time)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(time - startTime).TotalSeconds;
}
#endregion

C# 微支付 JSAPI支付方式 V3.3.6版本的更多相关文章

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

    #region 微支付退款查询 string Nonce = CreateRandomCode(15).ToLower(); //生成15个随机字符string sign1 = "appid ...

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

    /// <summary>/// 微支付退款申请/// </summary>/// <param name="context"></par ...

  3. 微信支付JsAPI

    https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php_v3.zip 下载获取微信支付demo压缩包 打开压缩包,并将其中 Wxpay ...

  4. 微支付开发(.net)

    最近一周多进行微支付开发工作,总结一下关于微支付开发中遇到的问题. 如写得不对请大家提出,第一次自己写文章.嘿嘿... 1.申请微支付,登陆公众平台后(公众号为服务号并已认证),进入“服务”-“服务中 ...

  5. 微信支付java版V3验证数据合法性

    [TOC] 1. 微信支付java版V3验证数据合法性 概要:使用微信支付接口时,微信会返回或回调给商户XML数据,开发者需要验证微信返回的数据是否合法. 特别提醒:商户系统对于支付结果通知的内容一定 ...

  6. 微信原生支付 Native扫码支付( V3.3.7 版本)

    原文:微信原生支付 Native扫码支付( V3.3.7 版本) [尊重别人的劳动成果,转载请注明出处:一缕晨光工作室,www.wispdawn.com] 前言 辛苦研究三天,遇到各种困难,最终还是克 ...

  7. Delphi XE7 用indy开发微信公众平台所有功能,可刷阅读,可刷赞,可加推广(除微支付)

    http://www.cnblogs.com/devinlee/p/4565933.html Delphi XE7 用indy开发微信公众平台所有功能,可刷阅读,可刷赞,可加推广(除微支付) 关注作者 ...

  8. 微信支付JsApi 40163错误

    微信支付JsApi 40163错误错误:未定义数组索引:openid .经过检查发现是 :微信支付授权获取 openId {“errcode”:40163,“errmsg”:“code been us ...

  9. 微信接口出现“调用支付jsapi缺少参数appid”

    微信接口出现“调用支付jsapi缺少参数appid” 注意:@Html.Raw(ViewBag.wxJsApiParam),//json串ViewBag.wxJsApiParam是一个在后台拼的一个j ...

随机推荐

  1. 对比 Redis 中 RDB 和 AOF 持久化

    概念 Redis 是内存数据库,数据存储在内存中,一旦服务器进程退出,数据就丢失了,所以 Redis 需要想办法将存储在内存中的数据持久化到磁盘. Redis 提供了两种持久化功能: RDB (Red ...

  2. 用ajax获取后端数据,显示在前端,实现了基本计算器功能

    下午在看视频的时候,遇到一个问题:如何把后端 print_r或echo的数据显示在前端.百度了一下,说是用ajax,想着前一阵子学习了ajax,并且最近也想做一个计算器,于是就自己钻起来了. 计算器的 ...

  3. golang interface 类型学习

    接口类型变量的内存结构 动态类型 动态值 对于动态类型指的是当其他非接口类型变量赋值给接口类型变量时,接口类型变量中的动态类型就是当前非接口类型 对于动态值指的就是当其他非接口类型变量赋值给接口类型变 ...

  4. Hive 窗口函数sum() over()求当前行和前面n条数据的和

    前几天遇到一个这样的需求:销售总占比加起来超过75%的top分类.具体需求是这样的:商品一级分类标签下面有许多商品标签,例如运动户外一级标签,下面可能存在361°,CBA,Nike,Adidas... ...

  5. 刷题[GXYCTF2019]禁止套娃

    梳理思路 打开网站,发现很简单,只有flag在哪里的字样. 查看源码,常用后台目录,robots.txt,都未发现有任何东西. 扫描 直接拉进扫描器一扫,发现 思考可能是git源码泄露,可能可以恢复源 ...

  6. Python字符编码和二进制不得不说的故事

    二进制 核心思想: 冯诺依曼 + 图灵机 电如何表示状态,才能稳定? 计算机开始设计的时候并不是考虑简单,而是考虑能自动完成任务与结果的可靠性, 简单始终是建立再稳定.可靠基础上 经过尝试10进制,但 ...

  7. 插头 dp

    插头dp 洛谷 黑题板子? P5056 给出n×m的方格,有些格子不能铺线,其它格子必须铺,形成一个闭合回路.问有多少种铺法? 1.轮廓线 简单地说,轮廓线就是已决策格子和未决策格子的分界线: 2,插 ...

  8. IDEA2020.2的破解

    第一种方式:http://code.39sd.cn/ 直接获取二维码: 第二种:下载破解工具(本方法只是提供个人学习使用) 1.下载2020.2的idea 链接:https://pan.baidu.c ...

  9. Consul 学习笔记-服务注册

    Consul简介: Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面.这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格.Consul需要 ...

  10. 风车签名 - 让管理APP变成一件简单的事儿

    这是一款在Mac平台下安全可控的iOS签名管理软件,旨在对签名后的APP能够完全控制,包括APP的开启或禁用.设置到期时间锁.注入第三方动态库文件.设置安装限量.修改APP名称和自定义Bundle I ...