接上一篇繼續,用戶在掃描完二維碼支付的時候,會顯示用戶在請求數據中傳遞的一些數據,例如訂單號之類的。如圖:html
用戶交易完成以後,支付寶服務器會主動發起通知,調用商戶在請求時設定好的頁面路徑(參數notify_url,若是商戶沒有設定,則不會進行該操做),即在biz_data數據中設定的url. web
樣例: 服務器
注:支付寶通知商戶支付結果爲 post 方法提交請求,以上 GET 方式僅爲樣例。 post
商戶在接收到支付寶交易的通知數據後,必須向支付寶返回處理結果,簡單的來講,就是向頁面輸出狀態: url
Response.Write("success"); spa
Response.Write("fail");
另外特別注意的是,前臺頁面必須不能有任何的html代碼和空格
回調頁面Notify_Url.aspx代碼爲 3d
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,咱們在接收 的時候可能會出現下面的錯誤(若沒有,則忽略)orm
解決方法是在配置文件中加上下面這段代碼 xml
<system.web> htm
<httpRuntime requestValidationMode="2.0" />
</system.web>
另外,在接收數據的頁面上加上 ValidateRequest="false"
至此,支付寶掃碼開發的流程基本就結束了,其實也很簡單,只要好好的研究文檔和Demo,也很容易就作出來了。
若是各位朋友在開發中還有什麼問題,能夠聯繫我,咱們共同交流。QQ470576160