asp.net mvc实现微信外H5支付方法

2023-11-09 19:10

本文主要是介绍asp.net mvc实现微信外H5支付方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、微信支付方式介绍

微信提供了各种支付方式,试用于各种不同的支付场景,主要有如下几种:

1、刷卡支付

刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。

2、扫码支付

扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。

3、公众号支付

公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:

  1. ◆ 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付
  2. ◆ 用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付
  3. ◆ 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付
4、APP支付

APP支付又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。

5、H5支付

H5支付用于在手机端微信外浏览器进行支付,笔者的测试本支付方式在微信内不能使用。

本文主要讲解asp.net mvc框架下H5支付如何实现

二、H5支付Controller代码
复制代码
public ActionResult Index()
{try{NativePay nativePay = new NativePay();//总金额int total_fee =1;Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null);packageReqHandler.SetParameter("appid", WxPayConfig.APPID);//APPIDpackageReqHandler.SetParameter("mch_id", WxPayConfig.MCHID);//商户号packageReqHandler.SetParameter("nonce_str", Senparc.Weixin.MP.TenPayLibV3.TenPayV3Util.GetNoncestr());packageReqHandler.SetParameter("body", "商品名称");packageReqHandler.SetParameter("out_trade_no", WxPayApi.GenerateOutTradeNo());//订单号packageReqHandler.SetParameter("total_fee", total_fee.ToString()); //金额,以分为单位string IpAddress = (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : Request.ServerVariables["REMOTE_ADDR"];packageReqHandler.SetParameter("spbill_create_ip", IpAddress);//IPpackageReqHandler.SetParameter("notify_url", "http://www.******.com.cn/Pay/PayNotifyUrl"); //回调地址packageReqHandler.SetParameter("trade_type", "MWEB");//这个不可以改。固定为MwebpackageReqHandler.SetParameter("sign", packageReqHandler.CreateMd5Sign("key", WxPayConfig.KEY));string data = packageReqHandler.ParseXML();var urlFormat = "https://api.mch.weixin.qq.com/pay/unifiedorder";var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data);MemoryStream ms = new MemoryStream();ms.Write(formDataBytes, 0, formDataBytes.Length);ms.Seek(0, SeekOrigin.Begin);var result = RequestUtility.HttpPost(urlFormat, null, ms);var res = System.Xml.Linq.XDocument.Parse(result);string mweb_url = res.Element("xml").Element("mweb_url").Value;try{return Redirect(mweb_url);}catch (Exception e){return Content("调取微信支付失败!");}}catch (Exception e){return Content("调取微信支付失败!" + e.Message);}
}
复制代码

 

三、支付成功处理代码

  [HttpPost]

复制代码
public virtual ActionResult PayNotifyUrl()
{Senparc.Weixin.MP.TenPayLibV3.ResponseHandler payNotifyRepHandler = new Senparc.Weixin.MP.TenPayLibV3.ResponseHandler(null);payNotifyRepHandler.SetKey(WxPayConfig.KEY);string return_code = payNotifyRepHandler.GetParameter("return_code");string return_msg = payNotifyRepHandler.GetParameter("return_msg");string xml = string.Format(@"<xml><return_code><![CDATA[{0}]]></return_code><return_msg><![CDATA[{1}]]></return_msg></xml>", return_code, return_msg);if (return_code.ToUpper() != "SUCCESS"){return Content(xml, "text/xml");}string out_trade_no = payNotifyRepHandler.GetParameter("out_trade_no");//订单编号//微信服务器可能会多次推送到本接口,这里需要根据out_trade_no去查询订单是否处理,如果处理直接返回:return Content(xml, "text/xml"); 不跑下面代码//验证请求是否从微信发过来(安全)if (payNotifyRepHandler.IsTenpaySign()){//支付成功处理逻辑,更新支付状态
         }else{return Content("订单" + out_trade_no + "支付回调验证失败");}return Content(xml, "text/xml");
}
复制代码

 

源码下载地址:http://www.kwstu.com/ResourcesView/weixin_201710301051436959

技术咨询QQ:806693619

这篇关于asp.net mvc实现微信外H5支付方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/378055

相关文章

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Python+Tkinter实现Windows Hosts文件编辑管理工具

《Python+Tkinter实现WindowsHosts文件编辑管理工具》在日常开发和网络调试或科学上网场景中,Hosts文件修改是每个开发者都绕不开的必修课,本文将完整解析一个基于Python... 目录一、前言:为什么我们需要专业的Hosts管理工具二、工具核心功能全景图2.1 基础功能模块2.2 进

Gradle在国内配置镜像加速的实现步骤

《Gradle在国内配置镜像加速的实现步骤》在国内使用Gradle构建项目时,最大的痛点就是依赖下载贼慢,甚至卡死,下面教你如何配置国内镜像加速Gradle下载依赖,主要是通过改写repositori... 目录引言一、修改 build.gradle 或 settings.gradle 的 reposito

使用FileChannel实现文件的复制和移动方式

《使用FileChannel实现文件的复制和移动方式》:本文主要介绍使用FileChannel实现文件的复制和移动方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录使用 FileChannel 实现文件复制代码解释使用 FileChannel 实现文件移动代码解释

Spring实现Bean的初始化和销毁的方式

《Spring实现Bean的初始化和销毁的方式》:本文主要介绍Spring实现Bean的初始化和销毁的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Bean的初始化二、Bean的销毁总结在前面的章节当中介绍完毕了ApplicationContext,也就

Java中的getBytes()方法使用详解

《Java中的getBytes()方法使用详解》:本文主要介绍Java中getBytes()方法使用的相关资料,getBytes()方法有多个重载形式,可以根据需要指定字符集来进行转换,文中通过代... 目录前言一、常见重载形式二、示例代码三、getBytes(Charset charset)和getByt

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Python中edge-tts实现便捷语音合成

《Python中edge-tts实现便捷语音合成》edge-tts是一个功能强大的Python库,支持多种语言和声音选项,本文主要介绍了Python中edge-tts实现便捷语音合成,具有一定的参考价... 目录安装与环境设置文本转语音查找音色更改语音参数生成音频与字幕总结edge-tts 是一个功能强大的