zoukankan      html  css  js  c++  java
  • ASP.NET支付宝扫码即时到账支付开发流程(下)

     接上一篇继续,用户在扫描完二维码支付的时候,会显示用户在请求数据中传递的一些数据,例如订单号之类的。如图:


    用户交易完成之后,支付宝服务器会主动发起通知,调用商户在请求时设定好的页面路径(参数notify_url,如果商户没有设定,则不会进行该操作),即在biz_data数据中设定的url.

    样例:


    注:支付宝通知商户支付结果为 post 方法提交请求,以上 GET 方式仅为样例。


    商户在接收到支付宝交易的通知数据后,必须向支付宝返回处理结果,简单的来说,就是向页面输出状态:

     Response.Write("success");

    Response.Write("fail");
    另外特别注意的是,前台页面必须不能有任何的html代码和空格
    回调页面Notify_Url.aspx代码为

       protected void Page_Load(object sender, EventArgs e)
            {
                SortedDictionary<string, string> sPara = GetRequestPost();
    
                if (sPara.Count > 0)//判断是否有带返回参数
                {
                    Notify aliNotify = new Notify();
                    bool verifyResult = aliNotify.Verify(sPara, Request.Form["notify_id"], Request.Form["sign"]);
                    if (verifyResult)//验证成功
                    {
                        string notify_data = Request.Form["notify_data"];
                        XmlDocument xmlDoc = new XmlDocument();
                        xmlDoc.LoadXml(notify_data);
                        XmlNode root = xmlDoc.DocumentElement;//返回的根节点
                        string is_success = root.SelectSingleNode("trade_status").InnerText;
                        if (is_success == "TRADE_FINISHED" || is_success == "TRADE_SUCCESS")
                        {
                            string temp = root.SelectSingleNode("subject").InnerText;//传 的时候把商品名称传成订单号了,所以接收到的也是订单号
                            string orderNo = temp.Split('-')[1];//订单号
                            string total_fee = root.SelectSingleNode("total_fee").InnerText;//订单金额
                            //用户可在这里处理订单情况,修改订单状态等,然后给支付宝服务器返回success,即Response.Write("success")
                            Response.Write("success");  //请不要修改或删除
                        }
                        else
                        {
                            Response.Write("fail");  //请不要修改或删除
                        }
                    }
                    else//验证失败
                    {
                        Response.Write("fail");
                    }
                }
                else
                {
                    Response.Write("无通知参数");
                }
            }

    其中接收到的notify_data数据是一堆xml,我们在接收 的时候可能会出现下面的错误(若没有,则忽略)


    解决方法是在配置文件中加上下面这段代码

    <system.web>

        <httpRuntime requestValidationMode="2.0" />

    </system.web>

    另外,在接收数据的页面上加上 ValidateRequest="false" 

    至此,支付宝扫码开发的流程基本就结束了,其实也很简单,只要好好的研究文档和Demo,也很容易就做出来了。

    如果各位朋友在开发中还有什么问题,可以联系我,我们共同交流。QQ470576160


    开发包下载:http://www.7qizhi.com/resource-25.html

    Demo下载:http://www.7qizhi.com/resource-37.html




  • 相关阅读:
    Ubuntu安装最新版的nodejs
    Mac安装并破解OmniGraffle7
    Mac安装并破解StarUML
    Windows10使用Chocolatey安装mysql之后无法使用的解决办法
    Visual Studio编辑类模板的位置
    VS2017连接到中国区的Azure
    Windows上包管理器之Chocolatey初体验
    CENTOS7.3 64位架设使用MYSQL数据库的ASP.NET CORE网站
    从无到有开发自己的Wordpress博客主题---主页模板
    c# 获得方法的所属类(或调用者)的类名,方法名
  • 原文地址:https://www.cnblogs.com/wanzhongjun/p/6875368.html
Copyright © 2011-2022 走看看