序:項目開發中,經常會需要用到支付寶支付這塊,很多時候沒頭緒,所以發下下載好DEMO后哪些地方需要更改以及容易出錯的地方。
注:1、沒接第三方,例如ping++那些,直接用支付寶給的;
2、開發語言:JAVA,簽名方式:RSA;
3、請勿噴,有說的不對的地方請留言我,我會一個一個的改。
支付寶DEMO下載地址:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.vIfG5G&treeId=193&articleId=105333&docType=1
AlipayConfig.java (代碼就不貼上了,就四個要更改,如果有大神來,麻煩留言告知一聲為什么alipay_public_key也不用更改,在下在此先說聲“感謝告知”)
注: 1、更改的有partner, private_key, notify_url, return_url,其他的不用更改;
(
進入網址:https://b.alipay.com/order/pidAndKey.htm;
partner : 合作者身份(PID) ;
公私鑰設置 : 合作伙伴密鑰管理<RSA加密 (先點“查看密鑰”,如果不為空,就是有項目接入了,這時候,你該找你的老大詢問一下。如果沒有或者只有“添加密鑰”
就生成的公鑰<生成方式在下面的注2>,填進去然后保存,注意,是公鑰)
)
2、JAVA版本的private_key需要PKCS8格式,在對應的字段注釋上面網址進入后,下載個openssl生成,如果按說明書中的操作后沒有生成,可以進入RSA<openssl<bin,打開openssl.exe,按以下命令就會在openssl文件夾中生成了;
生成RSA私鑰
openssl>genrsa -out rsa_private_key.pem 1024
生成RSA公鑰
openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
將RSA私鑰轉換成PKCS8格式
openssl>pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
3、notify_url寫得是你業務處理的,在判斷條件為trade_status.equals("TRADE_SUCCESS")中下;
4、return_url是支付成功后返回的頁面,可以設成自己網址中的頁面,比如我的訂單。
5、最重要的:notify_url,return_url得在外網也可以訪問到,項目中擁有登錄過濾或者登錄攔截的或者其他會攔截到正常訪問頁面的,全部設置頁面放行。
notify_url.jsp
業務處理請寫在這里(之前alipayapi.jsp發給支付寶的數據,這里會返回給你,可以取到,用request.getParameter取,如果取到的是亂碼,擼上代碼new String(request.getParameter("subject").getBytes("ISO-8859-1"),"UTF-8");進行編碼轉換 ):
else if (trade_status.equals("TRADE_SUCCESS")){
//判斷該筆訂單是否在商戶網站中已經做過處理
//如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序
//請務必判斷請求時的total_fee、seller_id與通知時獲取的total_fee、seller_id為一致的
//如果有做過處理,不執行商戶的業務程序
//注意:
//付款完成后,支付寶系統發送該交易狀態通知
}
這塊就這樣,只要改改參數,然后在對應位置寫好自己的業務處理就行了的。
對了。有可能會出錯的地方:
1、不執行notify_url(一般是代碼問題,不是技術問題);
(1)AlipayConfig.java 配置問題;
(2)你的業務處理出了問題;
(3)其他。
2、因為簽名問題,總是支付不成功的,八成是公私鑰問題,這時候最省時間的做法是找技術客服--https://support.open.alipay.com/alipay/support/index.htm
點客服,然后發三次技術,就可以轉人工客服了,如果是售后的,叫對方轉技術客服,然后根據對方的引導處理自己問題。
注意:即時到賬的也跟這里的操作一樣。
就此結束。