.NET Core 微信小程序支付——(统一下单)
最近公司研发了几个电商小程序,还有一个核心的电商直播,只要是电商一般都会涉及到交易信息,离不开支付系统,这里我们统一实现小程序的支付流程(与服务号实现步骤一样)。
目录
1、开通小程序的支付能力
2、商户后台绑定同一主体的APPID并授权
3、预先设置回调地址,商户后台设置开发的配置
4、代码实现统一支付5、微信支付回调
6、总结
开通小程序的支付能力
开通小程序支付功能比较简单,基本上按微信文档一步一步的申请就好,如图

以上三个步骤就申请完成
1、提交资料给微信
2、微信审核并签署协议
3、商户后台绑定同主体的APPID
商户后台绑定同一主体的APPID并授权
1、登录商户后台https://pay.weixin.qq.com,进入产品中心—APPID授权管理,进入授权页面如图:

2、填写相关已认证APPID信息,阅读并签署《微信支付商户号与APPID授权协议》,点击“确认”提交,发起授权申请,如下图:

3、发起授权申请后,商户需自行前往对应平台确认授权申请。
小程序:前往公众平台,点击“微信支付-商户号管理”,查看相关商户号信息,确认授权申请,或在“公众平台安全助手”下发的模板消息中确认授权信息;
公众号/订阅号:前往公众平台,点击“微信支付-商户号管理”,查看相关商户号信息,确认授权申请;
APP:前往开放平台,点击“管理中心-查看-微信支付-商户号管理”,查看相关商户号信息,确认授权申请;

4. 以上步骤绑定成功,可以实现微信支付功能。
预先设置回调地址,商户后台设置开发的配置
预先设置好回调地址后,方便支付成功后收到微信通知来处理业务,设置也比较简单不用多说,如图:

根据自己的需求设置不同的回调地址。
代码实现统一支付
1、统一支付,只要是微信公众号平台的同一主体都可以使用同一个支付,只需要在商户后台绑定APPID即可。
微信小程序支付官方图:

微信支付文档说明地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
引用包:
Senparc.Weixin.WxOpen
Senparc.Weixin.TenPay
注册公众号,小程序信息
services.AddSenparcGlobalServices(Configuration)
.AddSenparcWeixinServices(Configuration);
前端调用统一下单接口,获取prepayId
IRegisterService register = RegisterService.Start(env, senparcSetting.Value).UseSenparcGlobal(false, null);
register.UseSenparcWeixin(senparcWeixinSetting.Value, senparcSetting.Value)
.RegisterTenpayV3(senparcWeixinSetting.Value, "appid");
部分前端代码如下:


后端部分代码截图获取prepayId,如需代码请与我联系

提交统一支付成功后,会出现如下图:

注:一般正常获取到prepayid就可以发起支付,请确保所给的参数正确。
微信支付回调
微信支付回调规则如下:

回调代码实现
///<summary>
/// 微信支付回调地址
/// </summary>
/// <returns></returns>
[HttpPost("PayNotifyUrl")]
public ActionResult PayNotifyUrl()
{
ResponseResult result = new ResponseResult();
ResponseHandler resHandler = new ResponseHandler(HttpContext);
string return_code = resHandler.GetParameter("return_code");
string return_msg = resHandler.GetParameter("return_msg"); try
{
var mch_key = Senparc.Weixin.Config.SenparcWeixinSetting.TenPayV3_Key;
resHandler.SetKey(mch_key); var notifyXml = resHandler.ParseXML();
bool signFlag = resHandler.IsTenpaySign();
if (signFlag && return_code.ToUpper() == "SUCCESS")
{
string attach = resHandler.GetParameter("attach");
string device_info = resHandler.GetParameter("device_info");
string out_trade_no = resHandler.GetParameter("out_trade_no");
string transaction_id = resHandler.GetParameter("transaction_id");
string total_fee = resHandler.GetParameter("total_fee"); PayOrderNotifyParam param = new PayOrderNotifyParam()
{
PayNo = out_trade_no,
Attach = attach,
PayPrice = decimal.Parse(total_fee) / ,
TransactionNo = transaction_id,
}; //回调参数说明:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_7&index=3
//Logger.Info(string.Format("支付回调接收参数成功,notifyXml={0},param={1}", notifyXml, param.SerializeObject())); result = Service.PayNotifyUrl(param);
if (result.errno != )
{
//回调处理逻辑失败
Logger.Error(string.Format("支付回调处理失败:支付单号:{0},{1}", param.PayNo, result.errmsg));
}
else
{
Logger.Info(string.Format("支付回调处理成功,支付单号:{0}", param.PayNo));
string xml = string.Format(@"<xml>
<return_code><![CDATA[{0}]]></return_code>
<return_msg><![CDATA[{1}]]></return_msg>
</xml>", return_code, return_msg); return Content(xml, "text/xml");
} }
else
{
//错误的订单处理
Logger.Error(string.Format("支付回调接失败,signFlag={0},notifyXml={1}", signFlag, notifyXml));
} }
catch (Exception ex)
{
Logger.Error(string.Format("支付回调异常:Message={0},StackTrace={1}", ex.Message, ex.StackTrace));
} return Content("fail", "text/xml");
}
回调接口最好验证下签名是否正确,验证签名请先设置下商户KEY,如签名成功,微信支付成功,这时可以处理业务数据。
注:如果业务处理成功最好返回SUCCESS告诉微信,否则微信会隔一段时间就会回调一次,直到回调次数用尽,这里也需要自己业务处理好状态。
总结
以上流程就是微信支付过程,以上步骤由于一些隐私问题部分代码采用了截图,如有不明白之处请与我联系,我们一起交流学习,下一篇文章我们将实现微信退款功能。
.NET Core 微信小程序支付——(统一下单)的更多相关文章
- Asp.net Core 微信小程序支付
最近要做一个微信小程序支付的功能 在网上找了一下 .net Core做微信支付的博客 和 demo 几乎没有 自己研究了好几天 参考了 很多 大牛的博客 勉强做出来了 因为参数都没有 比如 opid ...
- .NET Core 微信小程序退款——(统一退款)
继上一篇".NET Core 微信小程序支付——(统一下单)后",本文将实现统一退款功能,能支付就应该能退款嘛,一般涉及到钱的东西都会比较敏感,所以在设计退款流程时一定要严谨,不能 ...
- 微信小程序支付+php后端
最近在做自有项目后端用的是thinkphp5.1框架,闲话不说直接上代码 小程序代码 wxpay: function(e){ let thisid = e.currentTarget.dataset. ...
- Java实现微信小程序支付(完整版)
在开发微信小程序支付的功能前,我们先熟悉下微信小程序支付的业务流程图: 不熟悉流程的建议还是仔细阅读微信官方的开发者文档. 一,准备工作 事先需要申请企业版小程序,并开通“微信支付”(即商户功能).并 ...
- php对接微信小程序支付
前言:这里我就假装你已经注册了微信小程序,并且基本的配置都已经好了.注: 个人注册小程序不支持微信支付,所以我还是假装你是企业或者个体工商户的微信小程序,其他的商户号注册,二者绑定,授权,支付开通,就 ...
- 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件
通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二). 前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...
- 微信小程序支付及退款流程详解
微信小程序的支付和退款流程 近期在做微信小程序时,涉及到了小程序的支付和退款流程,所以也大概的将这方面的东西看了一个遍,就在这篇博客里总结一下. 首先说明一下,微信小程序支付的主要逻辑集中在后端,前端 ...
- Java 后端微信小程序支付demo (网上说的坑里面基本上都有)
Java 后端微信小程序支付 一.遇到的问题 1. 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试 2.签名错误 3.已经调起微信统一下单接口,可以拿到预支付ID,但是前端支付的时候 ...
- 微信小程序支付接入注意点
一.微信支付后台服务器部署 服务器采用ubuntu16.04 + php7.0 + apache2.0. 微信支付后台服务使用了curl 和 samplexml ,因此php.ini配置中必须开启这两 ...
随机推荐
- 商贸型企业 Java 收货 + 入库 + 生成付款单
package cn.hybn.erp.modular.system.service.impl; import cn.hybn.erp.core.common.page.LayuiPageFactor ...
- Hadoop 系列(四)—— Hadoop 开发环境搭建
一.前置条件 Hadoop 的运行依赖 JDK,需要预先安装,安装步骤见: Linux 下 JDK 的安装 二.配置免密登录 Hadoop 组件之间需要基于 SSH 进行通讯. 2.1 配置映射 配置 ...
- 0R电阻在PCB布线中对布线畅通的一个小妙用
在PCB布线中,我们都会尽量节约板子空间,将元器件排布的紧密一些,难免会遇到布线不通的时候. 博主下面就来说一个关于0R电阻在PCB布线使之畅通的一个小妙用. 使用0R电阻前 假设我们这个TXD的线周 ...
- fiddler设置断点
1.有两种方法设置断点 before response:也就是发送请求之后,但是Fiddler代理中转之前,这时可以修改请求的数据 after response:也就是服务器响应之后,但是在Fiddl ...
- 算法与数据结构基础 - 二叉树(Binary Tree)
二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...
- XML学习(一)
本文主要记录xml学习过程中的一些笔记,包括xml作用,语法以及解析. 1.HTML和XML的区别 1.1.HTML 名称: HyperText Markup Languae(超文本标记语言) ...
- jmeter界面字体修改
实际应用中发现,同样是win10系统,显示器屏幕尺寸大小不同,jmeter界面字体展示也不一样,标准屏幕还可以,大屏幕下不能自动适应屏幕大小放大而且还变的更小.在查询解决方法时,发现有朋友出现类似情况 ...
- Duilib的圆角矩形 抗锯齿优化 弥补RoundRect不足(网易云信borderround版本)
VListBox class="list" name="list" padding="5,3,5,3" bordersize="1 ...
- ASP.NET Core MVC 之过滤器(Filter)
ASP.NET MVC 中的过滤器允许在执行管道中的特定阶段之前或之后运行代码.可以对全局,也可以对每个控制器或每个操作配置过滤器. 1.过滤器如何工作 不同的过滤器类型在管道中的不同阶段执行,因此具 ...
- .Net Mvc过滤器观察者模式记录网站报错信息
基本介绍: 观察者模式是一种对象行为模式.它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.在观察者模式中,主题是通知的发布者,它发出通知时并不 ...