.net framework微信扫码支付详细代码演示
时间: 2023-06-24 21:05:24 浏览: 62
以下是使用.NET Framework实现微信扫码支付的详细代码演示:
1. 在微信支付官网注册并获取商户号、AppID、AppSecret、商户API密钥等信息。
2. 创建一个ASP.NET Web应用程序,添加NuGet包“Senparc.Weixin”和“Senparc.Weixin.MP”。
3. 在Web.config文件中添加以下代码段:
```xml
<configuration>
<appSettings>
<add key="WeixinAppId" value="你的AppID" />
<add key="WeixinAppSecret" value="你的AppSecret" />
<add key="WeixinMchId" value="你的商户号" />
<add key="WeixinKey" value="你的商户API密钥" />
<add key="WeixinPayNotifyUrl" value="http://你的网站域名/WeixinPayNotify.aspx" />
</appSettings>
</configuration>
```
4. 创建一个名为“WeixinPay.aspx”的页面,添加以下代码:
```csharp
using Senparc.Weixin.MP.TenPayLibV3;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class WeixinPay : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string openid = GetOpenId();
if (!string.IsNullOrEmpty(openid))
{
string out_trade_no = DateTime.Now.Ticks.ToString();
string body = "测试商品";
int total_fee = 1;
string spbill_create_ip = Request.UserHostAddress;
string notify_url = System.Configuration.ConfigurationManager.AppSettings["WeixinPayNotifyUrl"];
string trade_type = "NATIVE";
string product_id = out_trade_no;
string attach = "";
string scene_info = "";
var res = TenPayV3.Unifiedorder(openid, body, out_trade_no, total_fee, spbill_create_ip, notify_url, trade_type, product_id, attach, scene_info);
if (res.return_code == "SUCCESS" && res.result_code == "SUCCESS")
{
string qrCodeUrl = res.code_url;
imgQRCode.ImageUrl = "http://chart.apis.google.com/chart?chs=200x200&cht=qr&chld=L|0&chl=" + HttpUtility.UrlEncode(qrCodeUrl);
}
}
}
}
private string GetOpenId()
{
string code = Request.QueryString["code"];
if (string.IsNullOrEmpty(code))
{
string redirect_uri = HttpUtility.UrlEncode(Request.Url.AbsoluteUri);
string url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=123#wechat_redirect", System.Configuration.ConfigurationManager.AppSettings["WeixinAppId"], redirect_uri);
Response.Redirect(url);
}
else
{
var res = Senparc.Weixin.MP.AdvancedAPIs.OAuthApi.GetAccessToken(System.Configuration.ConfigurationManager.AppSettings["WeixinAppId"], System.Configuration.ConfigurationManager.AppSettings["WeixinAppSecret"], code);
if (res.errcode == Senparc.Weixin.ReturnCode.请求成功)
{
return res.openid;
}
}
return null;
}
}
```
5. 创建一个名为“WeixinPayNotify.aspx”的页面,添加以下代码:
```csharp
using Senparc.Weixin.MP.TenPayLibV3;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class WeixinPayNotify : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var res = TenPayV3.GetNotifyData(Request.InputStream);
if (res.return_code == "SUCCESS" && res.result_code == "SUCCESS")
{
string out_trade_no = res.out_trade_no;
// 处理订单逻辑,更新订单状态等
Response.Write("<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>");
}
}
}
```
6. 在“WeixinPay.aspx”页面中,使用Senparc.Weixin.MP.TenPayLibV3提供的“Unifiedorder”方法生成一个微信扫码支付的二维码,并通过Google Chart API将其转换为图片展示给用户。
7. 在“WeixinPayNotify.aspx”页面中,使用Senparc.Weixin.MP.TenPayLibV3提供的“GetNotifyData”方法获取微信支付结果通知,并处理订单逻辑。
注意:在使用微信支付时,需要确保服务器可以被微信支付服务器访问到。如果是本地测试,可以使用“ngrok”等工具将本地服务器映射到公网IP。