首先:沒有回調?仍是進入回調函數可是驗籤失敗給支付寶返回了failure?web
按照正常邏輯,驗籤失敗就不會進行業務處理修改訂單狀態,訂單仍處於未支付狀態。爲肯定到底是沒有回調仍是驗籤失敗,能夠在回調函數中打印request中獲取的信息,或者存入Redis查看。bash
一:沒有回調服務器
沒有回調極有多是你的notify_url不能外網訪問,這種狀況很容易出如今本地調試期,本地可使用釘釘外網穿透,具體怎麼使用請參考我這篇文章中間部分https://juejin.im/post/5c1849f7f265da61327f3c40。函數
服務器上沒有訪問則會是https的問題,公司註冊的SSL證書不標準致使支付寶沒法識別https,爲確認,請改成http訪問試試看可否正常回調。工具
二:驗籤失敗 post
支付寶的驗籤方式使用的是SDK自帶的方法(具體完整的回調方法請參考https://juejin.im/post/5c1849f7f265da61327f3c40),以下:編碼
boolean signVerified = AlipaySignature.rsaCheckV1(params, alipayConfig.getAlipayPublicKey(), AlipayConfig.charset, AlipayConfig.signType);複製代碼
參數分別爲:從request中獲取的信息(Map形式),支付寶公鑰,編碼方式,簽名方式。加密
既然是封裝在SDK中的方法,就極小可能出問題,那麼問題100%出在參數上,咱們一個個來說url
1.params 這是支付寶返回的信息,只要是支付寶給你返回信息了,必定是標準格式的信息,出錯的可能性也很小,其中幾個參數可能會是null,但在SDK封裝好的驗籤方法中必定會剔除的。因此這個參數基本不會出問題。spa
2.編碼格式和加密方式,這兩個通常固定,UTF-8和RSA2,也通常不會出問題。
3.支付寶公鑰,這是最有可能出錯的。先講講這個參數的生成方式,進入open.alipay.com,登陸後進入個人開放平臺,在左上角找到開發者中心-->網頁&移動應用,找到本身的應用點擊查看詳情
按官方文檔https://docs.open.alipay.com/200/105310下載加密工具,生成公鑰和私鑰,將公鑰貼在這裏後會自動生成後面的支付寶公鑰,私鑰存在本地。你驗籤須要的支付寶公鑰就是上圖點擊查看支付寶公鑰的字符串。
問題出在下載加密工具,這裏要使用最新版本的V1.4(根據支付寶官網更新)
若是你使用了舊版本,支付依然能成功可是驗籤就會失敗!!!
若是你使用了舊版本,支付依然能成功可是驗籤就會失敗!!!
若是你使用了舊版本,支付依然能成功可是驗籤就會失敗!!!
你能夠看到在這個工具上方菜單欄也有驗籤功能,你能夠用本身生成的公鑰私鑰先在這裏驗證一番。