C# MVC 微信支付教程系列之扫码支付代码实例
简介
本教程将带你实现使用C# MVC框架接入微信扫码支付的流程。其中,包括了微信支付相关的基本知识和两个代码示例,帮助你快速理解和实现微信支付的流程。
前置知识
- 对微信支付相关概念的理解
- 了解C# MVC框架
微信扫码支付流程
微信扫码支付流程如下:
- 商户后台生成订单并向微信发起支付请求
- 微信返回一个支付二维码链接
- 用户使用微信扫一扫功能扫描二维码,进入微信支付页面
- 用户输入支付密码确认支付
- 微信将支付结果通知给商户
示例1:C# MVC 接入微信扫码支付(传统模式)
第一步:获取统一下单信息
下面是发起支付请求的代码示例:
//生成微信支付订单号
var outTradeNo = "XXXXXXXXXXXXX";
//支付金额,单位为分
var totalFee = 1;
//用户的真实IP地址,用于调起用户端的支付功能
var spbillCreateIp = Request.UserHostAddress;
//设置一些订单参数
var body = "订单描述";
var tradeType = "NATIVE";
var productId = "1";
//生成签名
var nonceStr = Guid.NewGuid().ToString("N");
var timeStamp = TenpayUtil.GetTimestamp();
var sign = TenpayUtil.GetSign(queryString, TenpayConfig.AppId, TenpayConfig.MchId,
nonceStr, timeStamp, TenpayConfig.ApiKey);
//统一下单信息
var unifiedOrder = new WxPayData();
unifiedOrder.SetValue("appid", TenpayConfig.AppId);
unifiedOrder.SetValue("mch_id", TenpayConfig.MchId);
unifiedOrder.SetValue("nonce_str", nonceStr);
unifiedOrder.SetValue("body", body);
unifiedOrder.SetValue("out_trade_no", outTradeNo);
unifiedOrder.SetValue("total_fee", totalFee);
unifiedOrder.SetValue("spbill_create_ip", spbillCreateIp);
unifiedOrder.SetValue("notify_url", TenpayConfig.NotifyUrl);
unifiedOrder.SetValue("trade_type", tradeType);
unifiedOrder.SetValue("product_id", productId);
unifiedOrder.SetValue("sign", sign);
//统一下单,并获取微信支付返回的二维码链接
var payUrl = TenpayUtil.GetPayUrl(unifiedOrder);
第二步:上传图片并获取二维码
下面是生成二维码的代码示例:
var qrCodeUrl = TenpayUtil.CreateQrCode(payUrl);
Bitmap bitmap = new Bitmap(qrCodeUrl);
MemoryStream stream = new MemoryStream();
bitmap.Save(stream, ImageFormat.Jpeg);
return File(stream.ToArray(), "image/jpeg");
第三步:支付结果查询
查询支付结果的代码示例为:
var queryResult = TenpayUtil.QueryOrder(outTradeNo);
return Content(queryResult.ToString());
示例2:C# MVC 接入微信扫码支付(SDK模式)
第一步:生成支付请求的信息
代码示例:
//创建支付请求对象
var paymentRequest = new PaymentRequest();
paymentRequest.OrderSubject = "订单标题";
paymentRequest.OutTradeNumber = "商户订单号";
paymentRequest.TotalAmount = 100;
paymentRequest.ClientIP = "192.168.0.1";
//调用支付接口,获取返回结果
var paymentPayResponse = PaymentNativePayRequest.UnifiedOrder(paymentRequest);
//统一下单成功,获取支付二维码链接
var codeUrl = paymentPayResponse.CodeUrl;
//获取二维码图片
var stream = WxPayUtility.CreateQrCode(codeUrl);
return File(stream.ToArray(), "image/jpeg");
第二步:处理支付结果通知
在收到微信支付结果通知后,需要做出相应的处理。以下是代码示例:
//获取支付通知的Xml内容
string xml = ContentReader.GetContentStreamAsStr(HttpContext.Current.Request);
//解析Xml内容
WxPayData notifyData = new WxPayData();
notifyData.FromXml(xml);
//检查支付结果的签名是否正确
if (notifyData.CheckSign())
{
//支付成功
string outTradeNo = notifyData.GetValue("out_trade_no").ToString();
}
else
{
//支付失败
}
结论
以上就是接入微信扫码支付的具体流程和代码示例。其中,示例 1 使用了传统方式,示例 2 使用了SDK模式。请根据自己的具体情况选择接入方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# MVC 微信支付教程系列之扫码支付代码实例 - Python技术站