下面是对“C# MVC 微信支付教程系列之公众号支付代码”的完整攻略,包括安装微信支付SDK、生成订单、调用微信支付API等步骤。
安装微信支付SDK
在进行微信支付开发之前,需要下载并安装微信支付SDK,推荐使用官方提供的.NET版SDK。在官方网站(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1)中点击下载.NET版本,并解压缩。
将解压缩后的文件拷贝到开发的根目录中,然后导入以下两个命名空间:
using WxPayAPI;
using System.Web;
生成订单
在生成订单时,需要在开发者自己的网站上生成和维护订单信息。订单中应该包含以下信息:
- 交易金额
- 货币类型
- 订单标题
- 订单详情
- 唯一订单号
- 用户IP
唯一订单号可以使用 GUID 进行生成,用户 IP 可以通过 HttpRequest 的 RemoteAddr 属性获取。交易金额等信息需要根据实际业务情况进行修改。
下面是一个简单的订单生成的示例,生成的订单信息将存到 HttpContext 的 Session 中。
public ActionResult CreateOrder()
{
// 获取订单参数
string body = "test";
string attach = "test";
string out_trade_no = Guid.NewGuid().ToString("N");
int total_fee = 1;
string trade_type = "JSAPI";
// 获取用户 openid
string openid = GetOpenid();
if (string.IsNullOrEmpty(openid))
{
return Content("用户 openid 获取失败!");
}
// 组装订单信息
WxPayData data = new WxPayData();
data.SetValue("body", body);
data.SetValue("attach", attach);
data.SetValue("out_trade_no", out_trade_no);
data.SetValue("total_fee", total_fee);
data.SetValue("openid", openid);
data.SetValue("trade_type", trade_type);
data.SetValue("spbill_create_ip", Request.UserHostAddress);
// 发起统一下单API请求
WxPayData result = WxPayApi.UnifiedOrder(data);
if (result.GetValue("return_code").ToString().ToUpper() != "SUCCESS")
{
return Content(result.GetValue("return_msg").ToString());
}
// 保存订单信息到 Session 中
HttpContext.Session["order"] = result;
return RedirectToAction("Pay");
}
调用微信支付API
在调用微信支付API时,需要发送请求到微信支付后台,得到返回的结果。
首先需要将订单信息进行签名,签名方法如下:
public static string Sign(WxPayData data, string key)
{
// 根据参数名按字典序排序
IDictionary<string, string> dict = new SortedDictionary<string, string>();
foreach (string key in data.GetKeys())
{
dict.Add(key, data.GetValue(key).ToString());
}
// 拼接成字符串
string str = "";
foreach (KeyValuePair<string, string> item in dict)
{
if (item.Value != "")
{
str += item.Key + "=" + item.Value + "&";
}
}
str += "key=" + key;
// 计算签名
string sign = MD5Util.GetMD5(str).ToUpper();
return sign;
}
然后需要将签名后的订单信息一同传递给微信支付后台,并解析返回的结果。
public ActionResult Pay()
{
WxPayData order = (WxPayData)HttpContext.Session["order"];
// 生成支付信息
WxPayData data = new WxPayData();
data.SetValue("appId", order.GetValue("appid"));
data.SetValue("timeStamp", WXPayUtil.GetTimestamp().ToString());
data.SetValue("nonceStr", WXPayUtil.GetNonceStr());
data.SetValue("package", "prepay_id=" + order.GetValue("prepay_id"));
data.SetValue("signType", "MD5");
// 签名
string sign = Sign(data, WxPayConfig.KEY);
data.SetValue("paySign", sign);
// 保存支付信息到 ViewBag
ViewBag.PayInfo = data;
return View();
}
以上就是生成订单和调用微信支付API的完整流程。实际开发中可能还需要进行其他的参数设置和订单信息校验等步骤,具体可以参考微信支付官方文档和SDK源码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# MVC 微信支付教程系列之公众号支付代码 - Python技术站