C#中怎么实现微信支付宝扫码支付功能
微信支付宝扫码支付是一种快捷、安全、便利的支付方式,得到了消费者的广泛认可和使用。本文将介绍 C# 中如何实现微信支付宝扫码支付功能。
一、前置条件
在实现微信支付宝扫码支付之前,需要注册微信和支付宝开发者账号,获取对应的支付接口信息和密钥,以及商户号和应用密钥等凭证信息。同时,需要在网站根目录下创建名为“qr”的文件夹,用于保存生成的支付二维码图片。
二、微信支付
微信支付需要调用微信支付接口,实现生成支付二维码和支付成功回调等功能。
1.生成支付二维码
①生成微信支付二维码,需要引用微信支付 SDK 支持。在 Visual Studio 中,可以使用“NuGet 包管理器”进行安装:
PM> Install-Package Senparc.Weixin.MP
②在支付前,需要使用商户的相关信息,调用微信支付 API 实现生成支付二维码,并存储到本地文件夹中。示例代码如下:
using Senparc.Weixin.MP.AdvancedAPIs;
using Senparc.Weixin.MP.AdvancedAPIs.QrCode;
using Senparc.Weixin.MP.Containers;
string appId = "微信公众账号的 AppId";
string mchId = "商户号";
string nonceStr = TenPayV3Util.GetNoncestr();
string payType = "NATIVE"; //获取支付二维码的方式:扫码支付
string body = "订单描述";
string orderNo = "欲支付的订单号";
int totalFee = 1; //单位:分
string notifyUrl = "支付回调地址"; //异步接收微信异步通知回调地址
string spbillCreateIp = "客户端 IP";
var dataInfo = new TenPayV3UnifiedorderRequestData(
appId: appId,
mch_id: mchId,
device_info: "",
nonce_str: nonceStr,
body: body,
detail: "详细信息",
attach: "附加数据",
out_trade_no: orderNo,
total_fee: totalFee,
spbill_create_ip: spbillCreateIp,
notify_url: notifyUrl,
trade_type: payType);
//调用接口获取预付订单号
var tenPayV3Result = TenPayV3.Unifiedorder(dataInfo);
//获取返回的微信支付二维码ticket,生成支付二维码
if (tenPayV3Result.return_code == "SUCCESS" && tenPayV3Result.result_code == "SUCCESS")
{
string imageUrl = QrCodeApi.Create(accessToken, 3600, tenPayV3Result.code_url);
//生成的二维码图片地址,保存到本地
WebClient webClinet = new WebClient();
webClinet.DownloadFile(imageUrl, HttpContext.Current.Server.MapPath("~/qr/") + orderNo + ".jpg");
}
2.支付成功回调
当用户完成支付后,微信会自动回调商户的支付成功通知接口,商户需要根据微信返回的订单号和支付状态,更新订单支付状态、记录支付信息等。示例代码:
//处理微信支付回调信息
var notifyXml = new XmlDocument();
notifyXml.LoadXml(Request.InputStream);
var res = new TenPayV3Notify(notifyXml);
if (res.CheckSign() == false)
{
return Content("签名验证失败");//若签名失败,则返回错误信息
}
switch (res.GetReturnCode())
{
case "SUCCESS":
string orderNo = res.GetOutTradeNo(); //获取微信返回的订单号
//根据订单号更新订单状态,记录支付信息
break;
case "FAIL":
//支付失败,对订单进行相应的处理
break;
}
三、支付宝支付
支付宝支付需要调用支付宝开放平台 SDK,实现扫码支付和支付成功回调等功能。
1.生成支付二维码
①生成支付宝支付二维码,需要引用支付宝 SDK 支持。在 Visual Studio 中,可以使用“NuGet 包管理器”进行安装:
PM> Install-Package Alipay.AopSdk.Core
②在支付前,需要使用商户的相关信息,调用支付宝支付 API 实现生成支付二维码,并存储到本地文件夹中。示例代码如下:
using Alipay.AopSdk.AspnetCore;
using Alipay.AopSdk.Core;
using Alipay.AopSdk.Core.Request;
using Alipay.AopSdk.Core.Response;
string appId = "支付宝应用 AppId";
string privateKey = "支付宝应用私钥";
string publicKey = "支付宝公钥";
string alipayRootCertPath = ""; //根证书位置
string appCertPath = ""; //应用公钥证书位置
string appCertKey = ""; //应用公钥证书密钥
string signType = "RSA2"; //签名类型
string charset = "UTF-8"; //字符编码
string returnUrl = "同步回调地址";
string notifyUrl = "异步回调地址";
string orderNo = "欲支付的订单号";
decimal totalAmount = 0.01m; //订单金额:单位为元
string subject = "订单标题";
string qrCode = ""; //生成的支付宝支付二维码,保存到本地
try
{
IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", appId, privateKey, "json", "1.0",
signType, publicKey, charset, alipayRootCertPath, appCertPath, appCertKey);
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
request.SetNotifyUrl(notifyUrl);
request.SetReturnUrl(returnUrl);
AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
model.OutTradeNo = orderNo;
model.TotalAmount = totalAmount.ToString();
model.Subject = subject;
request.SetBizModel(model);
AlipayTradePrecreateResponse response = client.Execute(request);
if (response != null && response.Code == "10000")
{
//获取支付宝支付二维码图片地址,保存到本地
WebClient webClinet = new WebClient();
webClinet.DownloadFile(response.QrCode, HttpContext.Current.Server.MapPath("~/qr/") + orderNo + ".jpg");
}
}
catch (Exception ex)
{
throw ex;
}
2.支付成功回调
当用户完成支付后,支付宝会自动回调商户的支付成功通知接口,商户需要根据支付宝返回的订单号和支付状态,更新订单支付状态、记录支付信息等。示例代码:
//处理支付宝支付回调信息
var dict = Request.Form.ToDictionary(x => x.Key, x => x.Value.ToString());
AlipayNotify alipayNotify = new AlipayNotify(dict);
if (alipayNotify.verify())
{
string orderNo = alipayNotify.out_trade_no; //获取支付宝返回的订单号
//根据订单号更新订单状态,记录支付信息
}
else
{
return Content("验证失败");//若验证失败,则返回错误信息
}
四、总结
以上就是 C# 中实现微信支付宝扫码支付的详细步骤。当然,除了以上的方式,还有其他的实现方式,比如使用第三方支付 SDK 或 API 接口等。针对不同的应用场景和需求,需要灵活运用,选择最适合的方式来实现支付功能。同时,为了保障用户的安全和隐私,商户需要合理处理用户的支付信息,严格遵循数据保护规则和安全标准,确保支付过程的顺利进行。
