开发者社区> 最美的回忆> 正文

到处都是坑的微信支付V3之 微信支付回调页面

简介:
+关注继续查看

据上次 到处都是坑的微信支付V3 后很多园友在被虐了千百遍后终于跳转到了亲切的微信支付界面,但输入密码支付后却不知道怎么处理了,接下来补上支付后的处理流程。

1. html中根据前台支付后反馈信息成功与否跳转到相关页面

  if (res.err_msg == "get_brand_wcpay_request:ok") {
       // message: "微信支付成功!",
       window.location.replace("@Url.Content("~/WxPay/Success?ordercode=@(Model.order_no)"));
  }else if (res.err_msg == "get_brand_wcpay_request:cancel") {  
     // message: "已取消微信支付!"
   } 

 

2. 支付开发教程(微信商户平台版) 中下载 微信支付接口文档及demo(公众账号).zip

返回的参数参考接口文档中  4.2.通用通知接口  一节。

通知 URL是 4.1 节中提交的参数 notify_url ,支付完成后,微信 会把相关和用户信息发送到该URL,商户需要接收处理信息。

复制代码
 //支付回调页面
        public ActionResult notice_url()
        {
            string resultFromWx = getPostStr();
            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler(null);
            WriteLog(" 微支付notice resultFromWx=" + resultFromWx);
            var res = XDocument.Parse(resultFromWx);
            //通信成功
            if (res.Element("xml").Element("return_code").Value == "SUCCESS")
            {
                if (res.Element("xml").Element("result_code").Value == "SUCCESS")
                {
                    //交易成功
                    paySignReqHandler.SetParameter("return_code", "SUCCESS");
                    paySignReqHandler.SetParameter("return_msg", "OK");

                    string ordecode = res.Element("xml").Element("out_trade_no").Value;
                    BLL.orders Bll = new BLL.orders();
                    try
                    {
                        if (Bll.Update(ordecode ))
                        {
                           WriteLog(" 微支付交易成功=" + ordecode);
                        }
                        else
                        {
                           WriteLog(" 微支付交易失败=" + ordecode);
                        }
                    }
                    catch (Exception ex)
                    {
                        WriteLog(ex," 微支付交易异常=" + ordecode);
                    }
                }
                else
                {
                    paySignReqHandler.SetParameter("return_code", "FAIL");
                    paySignReqHandler.SetParameter("return_msg", "交易失败");
                }
            }
            else
            {
                paySignReqHandler.SetParameter("return_code", "FAIL");
                paySignReqHandler.SetParameter("return_msg", "签名失败");
            }
            string data = paySignReqHandler.ParseXML();
            var result = TenPayV3.Unifiedorder(data);
            WriteLog(" 微支付notice result=" + result);

            return View();
        }
复制代码
注意:


因此接收到成功支付后需要返回代码中红色的部分来提醒微信服务器已处理,否则会不断收到微信服务器的反馈。


getPostStr()方法:
复制代码
 //获得Post过来的数据
        public string getPostStr()
        {
            Int32 intLen = Convert.ToInt32(Request.InputStream.Length);
            byte[] b = new byte[intLen];
            Request.InputStream.Read(b, 0, intLen);
            return System.Text.Encoding.UTF8.GetString(b);
        }
复制代码

 现在前后台都打通了,主要还是要耐心调试,祝君好运~

  鉴于没时间看邮件急于想要的可自行扫右上角的二维码进入微信公众号【一个码农的日常】,回复 net支付 或 java支付  或 php支付

   或加入  新建2号QQ群:340250479   (1号群: 437802986 已满)在文件里面有源码地址(等群主有时间会通过)。

   其它干货下载资源已放入微信公众号【一个码农的日常】

本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/p/4469506.html如需转载请自行联系原作者


欢醉

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
面试:你知道MyBatis执行过程之初始化是如何执行的吗?
在了解MyBatis架构以及核心内容分析后,我们可以研究MyBatis执行过程,
4 0
Spring启动过程源码分析
本文是通过 AnnotationConfigApplicationContext读取配置类来一步一步去了解Spring的启动过程。 在看源码之前,我们要知道某些类的作用,这样更方便后续的了解。
3 0
IDEA+Java+SSM+Jsp+Mysql实现Web商品信息管理系统(下)
IDEA+Java+SSM+Jsp+Mysql实现Web商品信息管理系统
3 0
测试平台系列(7) 改造注册接口
测试平台系列(7) 改造注册接口
5 0
springboot 2.0 集成 kafka 2.6.2(集群) + elk 7.6.2(集群)
springboot 2.0 集成 kafka 2.6.2(集群) + elk 7.6.2(集群)
3 0
Mysql8.0和Mysql5.0的区别与相互转化
Mysql8.0和Mysql5.0的区别与相互转化
3 0
2286
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载