c# 小程序支付模板
c# 小程序支付模板
支付模板
public class PayHelper{public static readonly string appid = wxd678efh567hg6787;public static readonly string mchid = 62;public static rea
c# 小程序支付模板
支付模板
public class PayHelper{public static readonly string appid = wxd678efh567hg6787;public static readonly string mchid = 1490840662;public static readonly string key = dfd547fab; // 支付key/// <summary>/// 统一支付/// </summary>/// <param name=num>支付金额</param>/// <param name=openid>用户openid</param>/// <param name=orderum>订单号</param>/// <param name=bodyContent>订单内容</param>/// <param name=ip>客户端ip</param>/// <returns></returns>public static PayModel UnifiedOrder(int num, string openid, string orderum, string bodyContent, string ip){PayModel model = new PayModel();string url = ;string nonceStr = GetonceStr();Dictionary<string, string> dicParam = new Dictionary<string, string>();dicParam.Add(appid, appid); // 应用程序iddicParam.Add(mch_id, mchid); // 商户iddicParam.Add(nonce_str, nonceStr); // 随机字符串dicParam.Add(body, bodyContent);dicParam.Add(out_trade_no, orderum); // 单号dicParam.Add(total_fee, num.ToString()); // 支付金额dicParam.Add(spbill_create_ip, ip);dicParam.Add(notify_url, ); // 回调dicParam.Add(trade_type, JSAPI);dicParam.Add(openid, openid);string signValue = WxSignCalc(dicParam.ToList(), key);dicParam.Add(sign, signValue);var temp = dicParam.ToList();temp.Sort((item1, item2) => string.Compare(item1.Key, item2.Key));StringBuilder data = new StringBuilder();data.Append(<xml>);foreach (var item in temp){data.Append($<{item.Key}>{item.Value}</{item.Key}>);}data.Append(</xml>);HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;request.Method = POST;//设置数据类型和长度request.ContentType = text/xml; byte[] buf = System.Text.Encoding.UTF8.GetBytes(data.ToString());request.ContentLength = buf.Length;// 发送数据Stream reqStream = request.GetRequestStream();reqStream.Write(buf, 0, buf.Length);reqStream.Close();HttpWebRespe respe = request.GetRespe() as HttpWebRespe;string content = string.Empty;using (StreamReader rs = new StreamReader(respe.GetRespeStream())){content = rs.ReadToEnd();}XmlDocument xml = new XmlDocument();xml.LoadXml(content);string returnCode = xml.GetElementsByTagame(return_code).Item(0).InnerText;if (returnCode == FAIL)return model;string prepayId = xml.GetElementsByTagame(prepay_id).Item(0).InnerText;string timeStamp = Convert.ToInt64(( - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds).ToString();List<KeyValuePair<string, string>> datas = new List<KeyValuePair<string, string>>() {new KeyValuePair<string, string>(appId, appid),new KeyValuePair<string, string>(timeStamp, timeStamp),new KeyValuePair<string, string>(nonceStr, nonceStr),new KeyValuePair<string, string>(package, prepay_id=prepayId),new KeyValuePair<string, string>(signType, MD5)};model.paySign = WxSignCalc(datas, key); = timeStamp;model.Package = prepay_id= prepayId; = nonceStr;model.signType = MD5;return model;}/// <summary>/// 获得随机字符串/// </summary>/// <param name=num>获取个数</param>/// <returns></returns>private static string GetonceStr(int num = 0){Random random = new Random();string str = qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBM124567890;StringBuilder nonceStr = new StringBuilder();for (int i = 0; i < num; i)nonceStr.Append(str[(0, str.Length)]);return nonceStr.ToString();}/// <summary>/// 参数加密/// </summary>/// <param name=param></param>/// <param name=apiKey></param>/// <returns></returns>private static string WxSignCalc(List<KeyValuePair<string, string>> param, string apiKey){string signValue = string.Empty;StringBuilder data = new StringBuilder();// 1. 排序param.Sort((item1, item2) => string.Compare(item1.Key, item2.Key));// 2. 拼接param.ForEach(m =>{data.Append(${m.Key}={m.Value}&);});data.Append(key= apiKey);// . 加密MD5 md5 = new MD5CryptoServiceProvider();byte[] buf = Encoding.UTF8.GetBytes(data.ToString());byte[] crypto = md5.ComputeHash(buf);signValue = BitConverter.ToString(crypto).Replace(-, );return signValue;}}
支付返回 Model
public class PayModel{public string paySign { get; set; }public string timeStamp { get; set; }public string onceStr { get; set; }public string Package { get; set; }public string signType { get; set; }}
调用案例
- 后台
[HttpPost]
public JsonResult OrderPay(string GUID, int num)
{string ip = string.Empty;if (!string.IsullOrEmpty(System.Web.HttpContext.Current.Request.ServerVariables[HTTP_X_FORWARDED_FOR]))ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables[HTTP_X_FORWARDED_FOR].Split( , )[0]);if (string.IsullOrEmpty(ip))ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables[REMOTE_ADDR]);if (string.IsullOrEmpty(ip))ip = System.Web.HttpContext.Current.Request.UserHostAddress;PayModel payModel = PayHelper.UnifiedOrder(num * 100, OpenID, yyyyMMddHHmmss, 小程序支付, ip);msg.Data = payModel;if (payModel.signType != null){msg.Code = 1;msg.Msg = 支付创建成功;}return Json(msg);
}
2. 前台
wx.showLoading({title: 正在支付 ,
});
wx.request({url: http://localhost:8080/Order/OrderPay,method: POST,data: {gUID: sljdkflskjdflsdskdjf,num: 12},header: { content-type : application/x-www-form-urlencoded },success: function(res){if (res.data.Code === 1) {wx.requestPayment({ timeStamp : res.data., nonceStr : res.data., package : res.data.Data.Package, signType : res.data.Data.signType, paySign : res.data.Data.paySign, success : function(res){wx.showToast({title: 支付成功 ,});}, fail : function(res){wx.showToast({title: 支付失败 ,});}});}else{wx.showToast({title: res.data.Msg,});}}, fail: function(){wx.showLoading({title: 失败 ,});},complete: function(){wx.hideLoading();}
});
写在最后
这个模板测试了一下, 只需要改一下 appid, key, 商户号, 可以直接拿来使用.
本人小菜鸟, 代码写的有些垃圾, 各位笔下留字.
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2024-02-10 03:46:43
上一篇:驾考科目一必背干货
推荐阅读
留言与评论(共有 19 条评论) |
本站网友 mac输入法切换快捷键 | 15分钟前 发表 |
});}});}else{wx.showToast({title | |
本站网友 乳酶生 | 16分钟前 发表 |
buf.Length);reqStream.Close();HttpWebRespe respe = request.GetRespe() as HttpWebRespe;string content = string.Empty;using (StreamReader rs = new StreamReader(respe.GetRespeStream())){content = rs.ReadToEnd();}XmlDocument xml = new XmlDocument();xml.LoadXml(content);string returnCode = xml.GetElementsByTagame(return_code).Item(0).InnerText;if (returnCode == FAIL)return model;string prepayId = xml.GetElementsByTagame(prepay_id).Item(0).InnerText;string timeStamp = Convert.ToInt64(( - new DateTime(1970 | |
本站网友 电视购物网站排名 | 28分钟前 发表 |
function(){wx.hideLoading();} }); 写在最后 这个模板测试了一下 | |
本站网友 怎么退出相互宝 | 11分钟前 发表 |
string>(appId | |
本站网友 成都琴行 | 6分钟前 发表 |
res.data.Data.paySign | |
本站网友 江苏财经职业学院 | 12分钟前 发表 |
string>(nonceStr | |
本站网友 苏州北大青鸟 | 4分钟前 发表 |
);return signValue;}} 支付返回 Model public class PayModel{public string paySign { get; set; }public string timeStamp { get; set; }public string onceStr { get; set; }public string Package { get; set; }public string signType { get; set; }} 调用案例 后台 [HttpPost] public JsonResult OrderPay(string GUID | |
本站网友 苯丙酸诺龙 | 5分钟前 发表 |
支付成功 | |
本站网友 光启城 | 6分钟前 发表 |
res.data. | |
本站网友 合肥男科 | 26分钟前 发表 |
data | |
本站网友 徐家汇美食 | 11分钟前 发表 |
appid); // 应用程序iddicParam.Add(mch_id | |
本站网友 尿裤子吧 | 21分钟前 发表 |
sljdkflskjdflsdskdjf | |
本站网友 万达电影城团购 | 0秒前 发表 |
header | |
本站网友 白花蛇舌草的功效与作用 | 16分钟前 发表 |
data | |
本站网友 车险便宜 | 12分钟前 发表 |
1 | |
本站网友 星巴巴 | 0秒前 发表 |
{ content-type | |
本站网友 苏州搜房网 | 18分钟前 发表 |
支付失败 | |
本站网友 西红柿炒虾仁 | 14分钟前 发表 |
nonceStr); // 随机字符串dicParam.Add(body |