启智网 — 中国专业的个人博客平台

  • 首页>
  • IT之路>
  • ASP.NET支付宝扫码即时到账支付开发流程(下)

ASP.NET支付宝扫码即时到账支付开发流程(下)

作者:wangyu 2015-04-16 11:25 浏览:3703 收藏此文

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


用户交易完成之后,支付宝服务器会主动发起通知,调用商户在请求时设定好的页面路径(参数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



本文为作者原创博客,允许转载,转载时请务必以超链接形式标明文章 原始出处、作者信息。否则将追究其法律责任。http://www.7qizhi.com/blog-147.html
评论列表 (0)

暂无评论,来抢个沙发吧!

用户登录
还没有账号10秒注册

启智网

记住密码

用第三方帐号直接登录

顶部 微信二维码 底部
微信-个人博客平台

扫描二维码用手机看精彩博客