支付寶支付接口手機網頁支付安全
從官網扒下來的demo阿里作得仍是至關不錯的,只要參數改正確了基本上都是能跑通,WebForm的沒什麼大問題,此次要講的主要是幾個要注意的問題,由於是用MVC來作。服務器
1.要確寶手機網頁支付開通已經申請經過,具體官網都有介紹。asp.net
2.支付寶的同步請求是正常接收到了的,但支付寶支付接口異步通知 AliPaynotify卻沒有接收到任何返回的信息,這裏 支付寶的異步通知其實被 asp.net 的安全機制給攔截了,返回給支付寶的500錯誤信息是 A potentially dangerous Request.Form value was detected from the client異步
解決方法 :
[HttpPost, ValidateInput(false)]
public string AliPaynotify(FormCollection collection)
<httpRuntime requestValidationMode="2.0" />編碼
3.在手機上打開連接後能跳轉到支付頁面後,支付寶支付成功後異步回調AliPaynotify,支付寶的例子WebForm 中只要輸出 Response.Write("success"); 支付寶就再也不回調了,MVC該怎麼輸出,支付寶才能接到通知呢?其實能夠用Response.Write("success"); 也能夠用return Content("success")spa
4.支付成功,但AlipayNotify.verifyNotify(params) 這個驗證失敗.net
驗籤順序錯了,正確的順序是這個:service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001?ify_data=…到core文件中調試參數順序,排序的哪一個方法調試
5.支付成功後,支付寶服務器老是會隔一段時間異步返回支付成功的消息給服務器,但VerifyNotify老是不經過,返回的responseTxt以下orm
//驗證消息是不是支付寶發出的合法消息,驗證服務器異步通知 xml
public bool VerifyNotify(Dictionary<string, string> inputPara, string sign)
responseTxt=<?xml version="1.0" encoding="GBK"?><alipay><is_success>F</is_success><error>ILLEGAL_PARTNER</error></alipay>
//判斷responsetTxt是否爲true,isSign是否爲true
//responsetTxt的結果不是true,與服務器設置問題、合做身份者ID、notify_id一分鐘失效有關
//isSign不是true,與安全校驗碼、請求時的參數格式(如:帶自定義參數等)、編碼格式有關
if (responseTxt == "true" && isSign)//驗證成功
{
return true;
}
所以最好是第一次性經過返回Content("success"),當處理異常時處理後也儘可能返回 success不然支付寶服務器始終會認爲服務器沒有正常接收會不斷的發信息。