在微信支付中,当用户支付成功后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。

在经历了千幸万苦之,填完了所有的JSAPI支付的坑后(微信JSAPI支付 跟 所遇到的那些坑),好不容易调起了微信支付接口,看到了亲爱的支付页面,支付成功后发现自己还有个叫做微信回调的忘了处理,内心一万只草泥马在狂奔中。

首先:

检查在统一下单的时候,通知地址是否填写正确。

接收微信支付异步通知回调地址也是有要求:通知url必须为直接可访问的url,不能携带参数。示例:notify_url:“https://pay.weixin.qq.com/wxpay/pay.action”

在微信支付开发,支付结果通用通知介绍说明页面→https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_7&index=3。

说明了:支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。

一开始我是蒙逼的,不知道这个是要用页面来做还是用一般处理程序来弄,回调回来后,更新支付状态,然后做应答,啥应答,我要咋应答??what??

而且如果如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)

意味着,有可能用户支付成功了,微信也不能保证通知成功。

如果我不做出应答微信会重新发起通知,回调支付成功页面。

还有个坑是 注意:同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。

所以说,在微信回调时候,还要判断这个订单是否回调过,并成功了。

这个回调页面的地址不能泄露哦,防止恶意虚假有人模拟微信回调,出现“假通知”,造成资金损失。

在看完微信的官方文档后,以及各种搜索后,开始了微信支付回调的处理。

(1)在微信支付授权目录下新建一个aspx页面作为微信回调页面。

(2)代码

            string returnResutStr = "";
try
{
Logger.Info("微信支付回调进入页面"); #region 获取参数值 根据需要解析对应的参数
ResponseHandler resHandler = new ResponseHandler(null);
string result_code = resHandler.GetParameter("result_code");//业务结果
string return_code = resHandler.GetParameter("return_code");//返回状态吗
string out_trade_no = resHandler.GetParameter("out_trade_no");//商户订单号
string WEXIN_OPENID = resHandler.GetParameter("openid");//微信openid
string transaction_id = resHandler.GetParameter("transaction_id");//微信支付单号
#endregion if (result_code == "SUCCESS" && return_code == "SUCCESS") //验证 是否 微信 回调
{
#region 日志处理 Logger.Info("微信支付回调,验证成功,订单号:" + orderno); #endregion #region 验证成功 逻辑处理
if (//判断是否为真实订单){
//更新支付状态
if (fals) //更新支付状态成功
{
#region 日志处理 Logger.Info("微信支付回调更新订单支付状态,更新订单支付状态成功,订单号:" + orderno); #endregion returnResutStr ="<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
}
else //更新支付状态失败
{
#region 日志处理 Logger.Info("微信支付回调更新订单支付状态,更新订单支付状态失败,订单号:" + orderno); #endregion returnResutStr ="<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[error]]></return_msg></xml>";
}
}
else
{
Logger.Info("微信支付回调更新订单支付状态,查无此单,订单号:" + out_trade_no);
} #endregion
}
else //微信回调失败
{
#region 日志处理 Logger.Error("微信支付回调更新订单支付状态,验证失败,回调参数是非法的");
#endregion
returnResutStr ="<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[error]]></return_msg></xml>";
}
}
catch (Exception exception)
{
#region 添加错误日志 Logger.Error("微信支付回调更新订单支付状态,出现异常:" + exception.Message + ",堆栈:" + exception.StackTrace);
#endregion returnResutStr = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[error]]></return_msg></xml>";
}
Response.Write(returnResutStr);

returnResutStr 就是返回的应答。

一开始,支付成功后,仔细检查回调地址没问题。可是微信回调一直没有进入页面,日志也没有记录到有回调进入界面。

后来发现这个回调页面继承了基类,把回调地址拦截。我这个大傻逼。

参考:

微信开发文档之支付结果通用通知:

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_7&index=3

微信JSAPI支付回调的更多相关文章

  1. 微信JSAPI支付

    最近在微信H5页面内集成微信JSAPI支付,遇到不少问题,现将集成步骤及遇到的问题记录如下: 1.官方下载SDK,下载地址:https://pay.weixin.qq.com/wiki/doc/api ...

  2. 微信JSApi支付~集成到MVC环境后的最后一个坑(网上没有这种解决方案)

    返回目录 大叔第一人 之前写了关于微信的坑<微信JSApi支付~坑和如何填坑>,今天将微信的jsapi支付封装到了MVC环境里,当然也出现了一些新的坑,如支付参数应该是Json对象而不是J ...

  3. 微信JSApi支付~订单号和微信交易号

    返回目录 谈谈transactionId和out_trade_no 前一篇微信JSApi支付~坑和如何填坑文章反映不错,所以又写了个后篇,呵呵. 每个第三方在线支付系统中都会有至少两类订单号,其一为支 ...

  4. php微信jsapi支付 支付宝支付 两码合一

    产品开会提出了这样的需求:一个二维码可以微信支付也可以支付宝支付 经过自己的钻研以及询问技术高人(本人代码一般般)和网上搜索 最终实现其功能  我用微信jsapi 和 支付宝网页支付 其实并不怎么难: ...

  5. 微信JSAPI支付(比较详细) 关于getRrandWCPayRequest:fail_invalid appid 错误

    原文:微信JSAPI支付(比较详细) 关于getRrandWCPayRequest:fail_invalid appid 错误 首先微信支付需注册  微信公从平台开发 和 微信支付商户平台 关于4个密 ...

  6. 微信JSAPI支付 跟 所遇到的那些坑

    首先介绍一下我在调用微信支付接口使用的是 weixin.senparc SDK,非常方便好用开源的一个微信开发SDK. weixin.senparc SDK 官网:http://weixin.senp ...

  7. 微信JSApi支付~坑和如何填坑

    返回目录 微信一直用着不爽,这几天研究它的jsapi支付,即在微信内打开H5页面,完成支付的过程,在这个过程中,你将会遇到各种各样的问题,而大叔将把这些问题的解决方法写一下,希望可以给你带来帮助! 一 ...

  8. asp.net微信jsapi支付

    1.前台页面: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"><head ru ...

  9. 微信公众号配置及微信jsAPI支付

    公众号配置 一.基本配置 首先登陆微信公众平台,在开发--->配置--->公众号开发信息,获取到AppId,开发者秘钥是后台需要的,给到后台,IP白名单配置就是你服务器的IP地址写到里面就 ...

随机推荐

  1. Sublime Text Snippets(代码片段)功能

    原文链接:http://www.bluesdream.com/blog/sublime-text-snippets-function.html 我们在编写代码的时候,总会遇到一些需要反复使用的代码片段 ...

  2. spring jar包解读(转)

    作者:http://www.cnblogs.com/leehongee/archive/2012/10/01/2709541.html spring.jar 是包含有完整发布模块的单个jar 包.但是 ...

  3. ASP.NET MVC4添加区域视图 找到多个与名为“home”的控制器匹配的类型

    今天在项目中遇到一个问题,在MVC下想建立一个区域的后台Boss视图,出现了"找到多个与名为“home”的控制器匹配的类型"的问题,希望下面的解决方案能够帮助到大家 这是网站的整体 ...

  4. JavaScript Json(转)

    JSON是JavaScript Object Notation的缩写,它是一种数据交换格式. 终于,在2002年的一天,道格拉斯·克罗克福特(Douglas Crockford)同学为了拯救深陷水深火 ...

  5. ThinkPhp5 出现访问出现 No input file specified. 问题

    今天复习一下ThinkPhp5,在官网下载了核心版,windows下配置了虚拟域名之后出现了神奇的现象 如下图 直接访问域名能访问到index模块下的index控制器下的index方法 但是我输入完整 ...

  6. 移动 web 适配

    一.移动 web 开发与适配 1.跑在手机端的 web 页面(H5 页面) 2.跨平台(PC 端.手机端 - 安卓.IOS) 3.基于 webview(终端开发技术的一个组件) 4.告别 IE 拥抱  ...

  7. SVN服务端和客户端的安装与搭建

    版权声明:本文为博主原创文章,转载请注明原文出处. https://blog.csdn.net/zzfenglin/article/details/50931462 SVN简介 SVN全名Subver ...

  8. ntile函数

    ntile函数可以对序号进行分组处理,将有序分区中的行分发到指定数目的组中. 各个组有编号,编号从一开始. 对于每一个行,ntile 将返回此行所属的组的编号.这就相当于将查询出来的记录集放到指定长度 ...

  9. 关于Socket.IO的知识点记录

    最近因为项目的需要,开始学习nodejs,本着js的那点儿功底,nodejs学习起来还是挺快能上手的.随着深入学习,知道了express框架并那它写了一个小功能,作为一个php程序员哈,在expres ...

  10. Normalize.css & Reset

    Normalize.css: try to keep the style consistent in every browser. Reset: clear style in every browse ...