用MVC做支付寶手機網頁支付問題


支付寶支付接口手機網頁支付

從官網扒下來的demo阿里做得還是相當不錯的,只要參數改正確了基本上都是能跑通,WebForm的沒什么大問題,這次要講的主要是幾個要注意的問題,因為是用MVC來做

1.要確寶手機網頁支付開通已經申請通過,具體官網都有介紹。

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")

4.支付成功,但AlipayNotify.verifyNotify(params) 這個驗證失敗

驗簽順序錯了,正確的順序是這個:service=alipay.wap.trade.create.direct&v=1.0&sec_id=0001?ify_data=…到core文件中調試參數順序,排序的哪個方法

5.支付成功后,支付寶服務器總是會隔一段時間異步返回支付成功的消息給服務器,但VerifyNotify總是不通過,返回的responseTxt如下

//驗證消息是否是支付寶發出的合法消息,驗證服務器異步通知 

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否則支付寶服務器始終會認為服務器沒有正常接收會不斷的發信息。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM