.Net微信电脑网站支付(api v2)

news/2024/5/19 14:21:34/文章来源:https://blog.csdn.net/qq_35601066/article/details/120278630

商户或企业前往微信开放平台申请开通微信支付,需要注意的是微信支付功能不对个人用户开放。开通支付功能后,会获取到以下微信支付相关的配置信息:

  • appid:是微信公众账号或开放平台APP的唯一标识,在公众平台申请公众账号或者在开放平台申请APP账号后,微信会自动分配对应的appid,用于标识该应用。
  • mch_id:商户申请微信支付后,由微信支付分配的商户收款账号。
  • key:交易过程用于生成签名的密钥,可以前往:微信商户平台(pay.weixin.qq.com)–>账户中心–>账户设置–>API安全–>密钥设置
  • appsecret:AppSecret是APPID对应的接口密码,用于获取接口调用凭证access_token时使用,不参与微信支付过程。

一、支付流程

支付流程.png

二、协议规则

使用微信API接口时,必须遵循以下规则:

  • 传输方式:为保证交易安全性,采用HTTPS传输
  • 提交方式:采用POST方法提交
  • 数据格式:提交和返回数据都为XML格式,根节点名为xml
  • 字符编码:微信支付API v2仅支持UTF-8字符编码。
  • 签名算法:MD5/HMAC-SHA256

三、签名算法

微信支付使用的是MD5/HMAC-SHA256对数据进行签名和验证。
首先将所有发送或接受的非空数据按URL键值对(key1=value1&key2=value2)的形式,按参数名ASCII码从小到大排序(字典序)拼接成字符串,然后将用于微信签名的key拼接在最后,最后使用MD5/HMAC-SHA256对字符串签名得到sign值。需要注意的是:

  • 参数必须按ASCII码从小到大排序。
  • 为空参数不参与签名。
  • 参数名区分大小写。
  • 验证调签名时,sign参数不参与签名。将生成的签名与该sign值作校验。

四、异步通知

微信后台支付成功后,会调用商户后台的异步通知接口,将支付结果发送给商户后台。商户后台根据获取到的支付结果,处理业务平台逻辑。在处理时需要注意一下几点:

  • 同样的异步通知微信可能发送多次,必须采用数据锁进行并发控制,避免数据混乱。
  • 商户后台在处理通知时,需要先判断该通知是否已经处理成功。如果处理成功,直接返回成功信息。
  • 微信后台没有接受到通知接口返回的成功信息,会按照一定的频率重新发送通知,知道成功为止(通知频率为15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h - 总计 24h4m)。

五、集成SDK

前往微信开放平台下载 SDK与DEMO ,将Demo中的business、lib放入项目中使用。

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using QRCoder;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
using WxPayAPI;
using Microsoft.Extensions.Logging;
using System.Text;namespace WxPay.Demo.Controllers
{public class PayController : Controller{private readonly ILogger<HomeController> _logger;public PayController(ILogger<HomeController> logger){_logger = logger;}/// <summary>/// 生成直接支付url,支付url有效期为2小时。/// </summary>/// <returns></returns>public IActionResult Order(){WxPayData data = new WxPayData();data.SetValue("body", "测试商品");//商品描述data.SetValue("attach", "test");//附加数据data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//商户订单号,随机字符串。data.SetValue("total_fee", Convert.ToInt32(0.01 * 100));//订单总金额,单位为分。data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间data.SetValue("goods_tag", "jjj");//商品标记data.SetValue("trade_type", "NATIVE");//交易类型data.SetValue("product_id", Guid.NewGuid().ToString("N"));//商品IDWxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口_logger.LogInformation("UnifiedOrder:\r\n" + result.ToXml());string url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接//使用QRCoder生成二维码var qrGenerator = new QRCodeGenerator();var qrCodeData = qrGenerator.CreateQrCode(url, QRCodeGenerator.ECCLevel.Q);var qrCode = new QRCode(qrCodeData);var image = qrCode.GetGraphic(6);using (var ms = new MemoryStream()){image.Save(ms, ImageFormat.Jpeg);return File(ms.ToArray(), "image/jpeg");}}private static object _locker = new object();public IActionResult Notify(){//1.签名验证//2.判断订单是否已经处理,如果处理直接返回成功。//3.处理业务平台订单//4.向微信后台 返回处理结果。WxPayData res = new WxPayData();lock (_locker){var body = HttpContext.Request.BodyReader.AsStream();int count = 0;byte[] buffer = new byte[1024];StringBuilder builder = new StringBuilder();while ((count = body.Read(buffer, 0, 1024)) > 0){builder.Append(Encoding.UTF8.GetString(buffer, 0, count));}var xml = builder.ToString();_logger.LogInformation("Notify:\r\n" + xml);try{//转换数据格式并验证签名WxPayData data = new WxPayData();var dics = data.FromXml(xml.ToString());if (dics["return_code"] == "SUCCESS"){//处理业务平台订单....var appid = dics["appid"];//公众账号IDvar mch_id = dics["mch_id"];//商户号var out_trade_no = dics["out_trade_no"];//商户订单号var total_fee = dics["total_fee"];//订单总金额,单位为分。var time_end = dics["time_end"];//支付完成时间var transaction_id = dics["transaction_id"];//微信支付订单号res.SetValue("return_code", "SUCCESS");//返回状态码:SUCCESS/FAILres.SetValue("return_msg", "");//返回信息}else{res.SetValue("return_code", "FAIL");res.SetValue("return_msg", "");}}catch (WxPayException ex){//若签名错误,则立即返回结果给微信支付后台res.SetValue("return_code", "FAIL");res.SetValue("return_msg", ex.Message);}}return Content(res.ToXml(), "text/xml");}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_804666.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何让你的网站排名靠前

网站做好了&#xff0c;怎样才能让你的网站在各大搜索引擎中排名靠前呢&#xff1f;网上的帖子很多&#xff0c;通过搜索和总结&#xff0c;整理出了一套自己行之有效的方法&#xff0c;写出来供大家参考 成功案例推荐&#xff1a;http://sooboo.com.cn/ 还在继续整理中&#…

谈谈网站静态化 【转载】

本文转载自&#xff1a; http://blog.csdn.net/yizhu2000/archive/2008/09/01/2863324.aspx 我个人觉得是很好的一个总结 写在前头 静态化是解决减轻网站压力,提高网站访问速度的常用方案,但在强调交互的We2.0 时代,对静态化提出了更高的要求,静态不仅要能静,还要能动,下面我通…

IIS网站服务器性能优化指南

Windows Server自带的互联网信息服务器&#xff08;Internet Information Server&#xff0c;IIS&#xff09;是架设网站服务器的常用工具&#xff0c;它是一个既简单而又麻烦的东西&#xff0c;新手都可以使用IIS架设一个像模像样的Web站点来&#xff0c;但配置、优化IIS的性能…

简单网站新闻发布系统

写这篇文章的时候首先要向bben_h 和jdxx表示感谢&#xff0c;是bben_h提出了C#中字符替换这个问题&#xff0c;jdxx很好的解决了这个问题&#xff0c;同时也使我想起以前做的一些程序&#xff08;简单网站新闻发布系统&#xff09;&#xff0c;现在就把它奉献给大家&#xff0c…

使用SharePoint Workspace 2010同步SharePoint网站

你用什么保存你的文档&#xff1f;U盘、网盘&#xff0c;还是FTP、邮箱&#xff08;网络存储&#xff09;&#xff1f;想没有想过&#xff0c;将你的文档“随手”保存在你的网站并且与你的计算机&#xff08;即使你有多台计算机&#xff09;随时同步&#xff1f;如果你像我一样…

【web标准设计】学习、提高、欣赏网站推荐

警告文章包含的一些粗俗、庸俗、恶心的言语可能造成您阅读后的不适感&#xff0c;请谨慎选择是否阅读。如你自愿阅读本文&#xff0c;因粗俗、庸俗、恶心的言语给您所造成的任何后果&#xff0c;本文作者不负任何责任。 华丽的中指基础知识的学习 XHTML、CSS、JavaScript的基础…

最新70佳单页网站设计案例欣赏(中篇)

单页网站是指只有一个页面的网站&#xff0c;这种形式的网站曾经非常流行&#xff0c;现在依然有很多人喜欢。不过&#xff0c;并不是每个网站都适合做成单页&#xff0c;一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做。如果你打算做一个这样的网站&#xff0…

创建自定义主机头网站集

当我们在一个SharePoint Web应用程序中创建新网站集时&#xff0c;虽然我们可以指定网站集的路径&#xff0c;但是网站集的主机头&#xff0c;似乎必须使用Web应用程序所定义的主机头。比如&#xff0c;当在“http://sp2010”这个Web应用程序中创建一个新网站集时&#xff0c;网…

查看痕迹_孩子是否浏览过“不良网站”,看手机留下的3种痕迹,过于明显

孩子是否浏览过“不良网站”&#xff0c;看手机留下的3种痕迹&#xff0c;过于明显&#xff01;必须要说&#xff0c;智能手机前所未有地改变了现代人的生活方式。伴随着科技创新的持续发展&#xff0c;手机屏幕再也不只是一个承当通信作用的设备&#xff0c;而是变为了集通信、…

html站点初始化设置怎么写,.NET Core Web网站设置默认页index.html

.NET Core Web网站设置默认页index.html。原来IIS可以设置默认静态页面index.html,index.htm等&#xff0c;项目切换到.NET Core后&#xff0c;发现原来一些地址无法打开了&#xff0c;因为这些地址都是到某个文件夹&#xff0c;没有打全index.html。解决办法是在Startup.cs中增…

对某高校网站的一次友好检测

表妹今年考上了某知名高校&#xff0c;出入好奇昨天对该高校网站进行了一次友情检测。。检测结果一个字烂。。。两个字很烂。。文章没什么技术含量。。请大牛直接飘过。打开其主业后随便点点了发现其地址为 xxx.cn/news_more.asp?lm293 觉得可能存在漏洞。。而且是一个很老的漏…

我记录网站综合系统 -- 技术原理解析[7:CSS类]

CSS是前台工程师的必修课&#xff0c;一般我们使用CSS只是统一写在.css里面。不过&#xff0c;wojilu提供了一些操作CSS的类&#xff0c;你可以将CSS当作一个个类来操作。 源代码位置&#xff1a;\wojilu\Web\UI 我们可以将一个CSS看作一个字典 Dictionary<String, Dictiona…

微软放缓.NET动态语言开发计划,徐汇区网站设计

微软曾经作出承诺&#xff0c;开发能运行在.NET环境的动态语言实现&#xff0c;例如Ruby语言实现IronRuby和Python语言实现IronPython。 当前IronRuby项目有点不妙&#xff0c;核心开发者&#xff0c;项目经理Jimmy Schementi宣布离职&#xff0c; 在他的博客中描述到&#xff…

网站DIV+css弹性+固宽布局案例

当今用户的显示器越来越大的今天&#xff0c;之前的1024*768固宽布局有点越来越不合时宜&#xff0c;对大屏幕的用户而言&#xff0c;两侧空空的留白给人第一眼的印象是严重的屏幕浪费&#xff0c;作为网页设计师的你有责任给这一批用户一个良好的用户界面。 当然为了减少这种屏…

Win7下IIS7.5新建网站错误信息集锦

1、Win7 IIS配置解决ASP的500错误 参考网址http://hi.baidu.com/wenyiguang/blog/item/5d354389b793dcbf0e2444a3.html 2、HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容 参考网址&#xff1a;http://apps.hi.baidu.com/share/detail/33209628 3、处理程…

JAVA开发者应该去的20个英文网站

为什么80%的码农都做不了架构师&#xff1f;>>> JAVA开发者应该去的20个英文网站 2005-09-12 14:28 shiqiang124 CSDN 我要评论(0) 字号&#xff1a;T | T 为JAVA开发者推荐应该去的20个英文网站&#xff01; AD&#xff1a; WOT2014课程推荐&#xff1a;实战MSA&a…

利用火狐浏览器查看网站加载速度

利用火狐浏览器查看网站加载速度2012-12-25 14:01[小大]来源: 自由屋博客评论: 1条评论分享至:百度权重查询站长交易友情链接交换网站监控服务器监控SEO监控首先下载火狐浏览器&#xff0c;如果你有的话就不用下载了&#xff0c;下载之后我们需要Firefox的一个组件—firebug。&…

python批量下载pdf文件大小,Python从一个网站上抓取PDF文件为什么它们都损坏了而且大小相同?...

希望这次会是一个简单的。我正在尝试做一些网络垃圾&#xff0c;我从一个页面下载所有的pdf文件。目前我正在从一个体育网页抓取文件进行练习。我使用automatheboringstuffa来自另一个用户的帖子(retrieve links from web page using python and BeautifulSoup)来编写这段代码。…

推荐一个Magento做的中文网站 迪卡侬

推荐一个Magento做的中文网站&#xff0c;迪卡侬中国官方商城 迪卡侬是是全球最大的体育用品零售商&#xff0c;在国内也很受欢迎。网址&#xff1a;http://www.decathlon.com.cn/

网站访问用时统计

为什么80%的码农都做不了架构师&#xff1f;>>> #!/bin/bashdomain"$1"i0j0echo total, nstim, conne, appco, pretr, redir, stattwhile [ 1 ]do((j))messcurl -s -o /dev/null 2>/dev/null --write-out "%{time_total}, …