微信公众号支付一个页面就搞定
更新时间:2024-01-12 21:18:01 阅读量: 教育文库 文档下载
- 微信公众号支付怎么开通推荐度:
- 相关推荐
using Ecode.WeiXin.Tools;
using Ecode.WeiXin.Tools.WxPayAPI; using Newtonsoft.Json.Linq; using System;
using System.Collections.Generic; using System.Linq;
using System.Security.Cryptography; using System.Text; using System.Web;
using System.Web.Mvc; using System.Xml;
namespace Ecode.WeiXin.WebUI.Controllers {
public class PayWeiXinController : Controller {
//
// GET: /PayWeiXin/ ///
/// 日期转换成unix时间戳 ///
/// ///
private static long DateTimeToUnixTimestamp(DateTime dateTime) {
var start = new DateTime(1970, 1, 1, 0, 0, 0, dateTime.Kind); return Convert.ToInt64((dateTime - start).TotalSeconds); }
private string ToMD5(string str) {
//MD5加密
var md5 = MD5.Create();
var bs = md5.ComputeHash(Encoding.UTF8.GetBytes(str)); var sb = new StringBuilder(); foreach (byte b in bs) {
sb.Append(b.ToString(\)); }
//所有字符转为大写
return sb.ToString(); }
public ActionResult Index() {
//获取从其他页面传递过来的订单号和用户ID string orderNumber = Request[\]; string userID = Request[\];
if (String.IsNullOrEmpty(orderNumber) || String.IsNullOrEmpty(userID)) {
return View(); }
//组装state的内容,根据情况来
string state = orderNumber + \ + userID;
//获取code后的回跳页面 string rediretUrl =
HttpUtility.UrlEncode(\);
string urlGetCode =
\ + WxPayConfig.APPID + \ + rediretUrl +
\ + state + \;
return Redirect(urlGetCode); }
public ActionResult Pay() {
string code = Request.QueryString[\]; string state = Request.QueryString[\];
string orderNumber = state.Split('_')[0]; string userID = state.Split('_')[1];
//调用接口,根据订单号和用户编号获取订单信息,避免被篡改页面支付信息
LiuLiuKangBa.BLL.APISDK.Models.ModelSOrder orderInfo = SDKApi.GetOrderInfo(orderNumber, userID); ViewBag.OrderInfo = orderInfo; ViewBag.Oid = orderNumber; ViewBag.Uid = userID;
if (orderInfo == null || orderInfo.AMount == 0) {
//无效的订单
Log.Error(\无效订单\, \ + orderNumber + \ + userID);
return View(); }
else if (orderInfo.Status == 0) {
//可以支付
string body = orderInfo.Name;
string out_trade_no = orderNumber.Trim();
string total_fee = Convert.ToInt32(orderInfo.AMount * 100).ToString();
string url =
\ +
WxPayConfig.APPID + \ + WxPayConfig.APPSECRET + \ + code + \;
string result = Helper.GetResponseData(\, url, Helper.RequestMethod.GET);
Log.Debug(\获取code时的返回值\, result);
JObject jsonObj = JObject.Parse(result);
//拿到openid,微信公众号支付,统一下单时,需要openid string openid = jsonObj[\].ToString();
//组装统一下单需要的参数
Dictionary
dataList.Add(\, WxPayConfig.APPID);
dataList.Add(\, WxPayConfig.MCHID); dataList.Add(\,
DateTime.Now.AddSeconds(Helper.GetRandomNumber(100, 5000)).Ticks.ToString());
dataList.Add(\, body);
dataList.Add(\, out_trade_no); dataList.Add(\, total_fee); dataList.Add(\, Request.UserHostAddress);
dataList.Add(\, WxPayConfig.NOTIFY_URL); dataList.Add(\, \); dataList.Add(\, openid);
//按关键字排序
var orderDataList = dataList.OrderBy(g => g.Key);
StringBuilder strBuilder = new StringBuilder();
foreach (var keyValue in orderDataList) {
strBuilder.Append(keyValue.Key); strBuilder.Append(\);
strBuilder.Append(keyValue.Value);
strBuilder.Append(\); }
//MD5加上key
strBuilder.Append(\ + WxPayConfig.KEY);
Log.Debug(\前\, strBuilder.ToString());
//得到加密的sign string sign =
ToMD5(strBuilder.ToString()).ToUpper();
//组装统一下单需要的xml
StringBuilder xmlBuiler = new StringBuilder(); xmlBuiler.Append(\);
foreach (var keyValue in orderDataList) {
xmlBuiler.Append(\ + keyValue.Key + \ + keyValue.Value + \ + keyValue.Key + \); }
xmlBuiler.Append(\ + sign + \); xmlBuiler.Append(\);
Log.Debug(\提交统一下单的XML\, xmlBuiler.ToString());
string urlUnifiedorder =
\; string resultUnifiedorder =
Helper.GetResponseData(xmlBuiler.ToString(), urlUnifiedorder, Helper.RequestMethod.POST);
Log.Debug(\统一下单返回的XML:\, resultUnifiedorder);
string prepay_id = \; try {
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(resultUnifiedorder);
XmlNode node_return_cod = xmlDoc.SelectSingleNode(\); if
(node_return_cod.InnerText.Equals(\)) {
//通信成功
XmlNode node_result_code = xmlDoc.SelectSingleNode(\); if
(node_result_code.InnerText.Equals(\)) {
//交易成功
//获取到统一下单返回的prepay_id prepay_id =
xmlDoc.SelectSingleNode(\).InnerText; Log.Info(\提交微信支付成功\, \ + orderNumber + \ + userID); } else {
//交易失败
Log.Error(\提交微信支付失败\, \ + orderNumber + \ + userID);
} } else {
//通信失败
Log.Error(\时间:\, DateTime.Now.ToString()); Log.Error(\通信失败\, node_return_cod.InnerText); } }
catch (Exception exc) {
Log.Error(\时间\, DateTime.Now.ToString()); Log.Error(\, exc.Message); Log.Error(\, exc.Source); }
//组装JSAPI支付需要的sign
dataList = new Dictionary
DateTimeToUnixTimestamp(DateTime.Now).ToString()); dataList.Add(\,
DateTime.Now.AddSeconds(Helper.GetRandomNumber(100, 5000)).Ticks.ToString());
dataList.Add(\, \ + prepay_id); dataList.Add(\, \);
//按关键字排序
orderDataList = dataList.OrderBy(g => g.Key);
strBuilder = new StringBuilder();
foreach (var keyValue in orderDataList) {
strBuilder.Append(keyValue.Key); strBuilder.Append(\);
strBuilder.Append(keyValue.Value);
strBuilder.Append(\); }
//加上key
strBuilder.Append(\ + WxPayConfig.KEY);
Log.Debug(\前\, strBuilder.ToString());
//获取MD5后的sign
sign = ToMD5(strBuilder.ToString()).ToUpper();
ViewBag.appId = dataList[\];
ViewBag.timeStamp = dataList[\]; ViewBag.nonceStr = dataList[\]; ViewBag.package = dataList[\]; ViewBag.signType = dataList[\]; ViewBag.paySign = sign;
} else {
//其他情况
Log.Error(\订单状态异常\, \ +
orderNumber + \ + userID + \ + orderInfo.Status); return View(); }
return View(); }
} }
正在阅读:
微信公众号支付一个页面就搞定01-12
无菌医疗器械生产车间的建设标准与要求09-18
结识有缘人 关于这两年的灾 - 图文04-10
某钢厂焦化二期干熄焦工程04-16
老家后花园的四季作文500字07-04
尴尬的经历作文500字06-17
建筑公司新员工培训心得体会五篇04-20
四川省成都市2014届高三上学期(高二下学期期末)摸底测试数学(理)试题 Word版含答案09-06
红蜻蜓集团企业文化体系手册06-03
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 搞定
- 公众
- 支付
- 页面
- 一个
- 三 我的老师 教案
- 四川省广元市广元中学2015-2016学年高二下学期第一次段考
- 听徐斌老师的课有感
- 1011-江苏省电力公司变电站倒闸操作规范(修订稿1123)
- 班主任工作自我鉴定
- 微生物学作业汇总及参考答案
- CAD Select方法如何设置FilterType, FilterData
- 最新八年级物理--第2课时 连通器、液体压强的综合应用用(教案)
- 2013陕西公务员安康市行政系统面试复审名单
- 函授毕业论文
- 河北省衡水市武邑中学2017届高三(上)第五次调考数学试卷(文科)(解析版)(1)
- 第1课时1--5的认识简案
- java复习题
- 地大会计硕士考研就业前景怎么样
- 颜色、占空比、亮度对闪光频率融合临界影响的研究报告
- 小学数学 举一反三 强化训练
- 战略管理习题
- 东莞市第七高级中学2013届高三上学期第一次月考(语文)
- 分子热运动 巩固练习
- 銆