接上一篇繼續,用戶在掃描完二維碼支付的時候,會顯示用戶在請求數據中傳遞的一些數據,例如訂單號之類的。如圖:
用戶交易完成之后,支付寶服務器會主動發起通知,調用商戶在請求時設定好的頁面路徑(參數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

