微信开发者文档
微信H5支付官方文档 请阅读清楚 最起码把所有参数看一遍 这个地方也可以看看
微信案例
http://wxpay.wxutil.com/mch/pay/h5.v2.php,请在微信外浏览器打开。
<button type="button" οnclick="pay()">支 付</button>
//判断是否是微信浏览器的函数
function isWeiXin() {
//window.navigator.userAgent属性包含了浏览器类型、版本、操作系统类型、浏览器引擎类型等信息,这个属性可以用来判断浏览器类型
var ua = window.navigator.userAgent.toLowerCase();
//通过正则表达式匹配ua中是否含有MicroMessenger字符串
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
return true;
} else {
return false;
}
}
function pay() {
if (isWeiXin()) {
$(".instructions_box").removeClass("dn");
} else {
if ($("#total_fee").val() > 0) {
var postData = {
//自行传参到后台
};
$.ajax({
url: "后台地址",
data: postData,
type: 'post',
success: function (data) {
if (data != null) {
$('.weui-mask').toggleClass('weui-mask--visible');
$('.weui-dialog').toggleClass('weui-dialog--visible');
window.location.href = data;
}
}
})
} else {
$.toast("金额输入有误", "forbidden");
}
}
}
/// <summary>
/// 微信支付
/// </summary>
/// <returns></returns>
public ActionResult WechatPay()
{
int pId = Convert.ToInt32(Request["pid"]);
project p = pManage.GetModel(pId);//获取商品
var url = System.Configuration.ConfigurationManager.AppSettings["url"];
var appId = System.Configuration.ConfigurationManager.AppSettings["AppId"];//公众号id
var mch_id = System.Configuration.ConfigurationManager.AppSettings["mch_id"];//商户号
var nonceStr = WechatPayCommon.CreateNonce_str();//随机字符串
var body = p.name;//商品名称
var detail = p.depict;//商品描述
var out_trade_no = Guid.NewGuid().ToString("N");//商户系统内部的订单号,32个字符内、可包含字母
var total_fee = Math.Round(Convert.ToDecimal(Request["total_fee"]) * 100, 0);//收钱总额 分为单位 前台传过来后需要处理成分
var spbill_create_ip = WechatPayCommon.GetWebClientIp();//终端ip
var time_start = DateTime.Now.ToString("yyyyMMddHHmmss");//订单生成时间
var time_expire = DateTime.Now.AddHours(1).ToString("yyyyMMddHHmmss");//默认1个小时订单过期,开发者可自定义其他超时机制,原则上微信订单超时时间不超过2小时
var notify_url = string.Format("{0}/Pay/Notify", esluo);//接收微信支付异步通知回调地址,不可带参,与下面的Notify对应,开发者可自定义其他url地址
var trade_type = "MWEB";//交易类型H5支付的交易类型为MWEB
var scene_info = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \"" + esluo + "\",\"wap_name\": \"" + body + "\"}}";
var partnerKey = System.Configuration.ConfigurationManager.AppSettings["PartnerKey"];//API密钥
var returnXML = "";
var paramaterXml = "";
var content = WechatPayCommon.UnifiedOrder(
appId, mch_id, nonceStr,
body, detail, out_trade_no, total_fee, spbill_create_ip, time_start, time_expire,
notify_url, trade_type, partnerKey, out returnXML, out paramaterXml);
LogWriter.Default.WriteInfo("returnXML:" + returnXML.ToString());//记录请求关键信息到日志中去
LogWriter.Default.WriteInfo("paramaterXml:" + paramaterXml.ToString());//记录请求关键信息到日志中去
LogWriter.Default.WriteInfo("content:" + content);//记录请求关键信息到日志中去
var timestamp = Util.CreateTimestamp();
var prepay_id = content.prepay_id.Value;
var sign = WechatPayCommon.SignPay(appId, timestamp.ToString(), nonceStr, prepay_id, partnerKey);//签名
var isUnifiedOrderSuccess = false;
var return_code = "";
var return_msg = "";
var mweb_url = "";
if (content.return_code.Value == "SUCCESS" && content.result_code.Value == "SUCCESS")
{
trade_type = content.trade_type.Value;
prepay_id = content.prepay_id.Value;
mweb_url = content.mweb_url.Value;
isUnifiedOrderSuccess = true;
}
else
{
return_code = content.return_code.Value;
return_msg = content.return_msg.Value;
isUnifiedOrderSuccess = false;
}
if (!isUnifiedOrderSuccess)
{
return RedirectToAction("Failed", new { msg = return_msg });
}
tpay_payrecord c = new tpay_payrecord();//支付记录
c.name = p.name;
c.out_trade_no = out_trade_no;
c.pid = p.id;
c.time_start = DateTime.Now;
c.spbill_create_ip = spbill_create_ip;
c.pay_fee = Convert.ToDecimal(Request["total_fee"]);
c.remark = Request["remark"];
c.state = 9;
cManage.Add(c);
//=============1.会刷新当前页=================
//return Json(mweb_url, JsonRequestBehavior.AllowGet);
//=============2.带参数据延时=================
var resultUrl = string.Format(mweb_url + "&redirect_url={0}/Pay/Result?no=" + c.out_trade_no, url);
return Json(resultUrl, JsonRequestBehavior.AllowGet);
//=============3.不带参去结果页=================
//var resultUrl = string.Format(mweb_url + "&redirect_url={0}/Pay/Result", url);
//return Json(resultUrl, JsonRequestBehavior.AllowGet);
}
//微信支付帮助类
public class WechatPayCommon
{
private static string[] strs = new string[]
{
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
};
/// <summary>
/// 创建随机字符串
/// </summary>
/// <returns></returns>
public static string CreateNonce_str()
{
Random r = new Random();
var sb = new StringBuilder();
var length = strs.Length;
for (int i = 0; i < 15; i++)
{
sb.Append(strs[r.Next(length - 1)]);
}
return sb.ToString();
}
/// <summary>
/// 获取终端IP地址
/// </summary>
/// <returns></returns>
public static string GetWebClientIp()
{
string userIP = "";
try
{
if (System.Web.HttpContext.Current == null
|| System.Web.HttpContext.Current.Request == null
|| System.Web.HttpContext.Current.Request.ServerVariables == null)
return "";
string CustomerIP = "";
//CDN加速后取到的IP simone 090805
CustomerIP = System.Web.HttpContext.Current.Request.Headers["Cdn-Src-Ip"];
if (!string.IsNullOrEmpty(CustomerIP))
{
return CustomerIP;
}
CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!String.IsNullOrEmpty(CustomerIP))
{
return CustomerIP;
}
if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
{
CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (CustomerIP == null)
CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
else
{
CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (string.Compare(CustomerIP, "unkn