支付寶支付開發(fā)

最近在接入各種支付機構(gòu),鑒于各種產(chǎn)品業(yè)務(wù)需求不同,具體開發(fā)實現(xiàn)不盡相同,不討論具體業(yè)務(wù)實現(xiàn)。
前一篇銀聯(lián)支付開發(fā)介紹了幾種銀聯(lián)支付交互方法和實例報文。本文主要回顧一下支付寶常用支付方式的開發(fā)和交互報文,還有在開發(fā)時遇到的一些坑。
支付寶支付產(chǎn)品大全,主要介紹:

一、手機網(wǎng)站支付

手機網(wǎng)站支付主要應(yīng)用于手機、掌上電腦等無線設(shè)備的網(wǎng)頁上,通過網(wǎng)頁跳轉(zhuǎn)或瀏覽器自帶的支付寶快捷支付實現(xiàn)買家付款的功能,資金即時到賬。

根據(jù)請求參數(shù),后臺將相關(guān)參數(shù)值填好,組裝成HTML報文之后返回給客戶端即可,比較重要的幾個參數(shù)

參數(shù) 參數(shù)名稱 參數(shù)說明 樣例
service 接口名稱 接口名稱 alipay.wap.create.direct.pay.by.user
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 </head>
 <body>
   <form id="alipaysubmit" name="alipaysubmit" action="https://mapi.alipay.com/gateway.do?_input_charset=utf-8" method="get">
   <input type="hidden" name="service" value="alipay.wap.create.direct.pay.by.user" />
   <input type="hidden" name="partner" value="合作商戶ID,需要跟支付寶申請" />
   <input type="hidden" name="_input_charset" value="utf-8" />
   <input type="hidden" name="sign_type" value="MD5" />
   <input type="hidden" name="sign" value="78ff1f0d498b6bc1302b9fcb96e25edf" />
   <input type="hidden" name="notify_url" value="http://127.0.0.1:8080/pay-front/aliPayResultNotify" />
   <input type="hidden" name="return_url" value="http://127.0.0.1:8080/Service/toReturn.action" />
   <input type="hidden" name="out_trade_no" value="00652016012716580911842412986916" />
   <input type="hidden" name="subject" value="1" />
   <input type="hidden" name="total_fee" value="0.01" />
   <input type="hidden" name="seller_id" value="合作商戶ID,需要跟支付寶申請" />
   <input type="hidden" name="payment_type" value="1" />
   <input type="hidden" name="body" value="20160127|10201601271658060548484552912431|ALIPAY-WAP|1" />
   <input type="hidden" name="exter_invoke_ip" value="112.97.57.54" />
   </form>
   <script>document.forms['alipaysubmit'].submit();</script>
 </body>
</html>

表單提交后跳到支付寶頁面:

QQ截圖20160314151617.png

支付成功后支付寶會根據(jù)請求參數(shù)的notify_url返回到商戶后臺,然后完成剩余邏輯即可。

二、及時到賬

及時到賬其實就是手機到賬的PC網(wǎng)頁版,不知道為什么支付寶沒有把這2個整合到一起。及時到賬的開發(fā)跟手機網(wǎng)站支付區(qū)別不大,請求參數(shù)service有區(qū)別:

參數(shù) 參數(shù)名稱 參數(shù)說明 樣例
service 接口名稱 接口名稱 create_direct_pay_by_user

組裝成HTML提交即可。

三、移動支付

移動支付是一種程序式的支付方式,在手機、掌上電腦等無線設(shè)備的應(yīng)用程序內(nèi),買家可通過支付寶進行付款購買特定服務(wù)或商品,資金即時到賬。

移動支付說白了就是你的移動設(shè)備安裝了支付寶app,付款時在客戶端上調(diào)起支付寶的支付控件,完成支付過程。

參數(shù) 參數(shù)名稱 參數(shù)說明 樣例
service 接口名稱 接口名稱 mobile.securitypay.pay
Cache_6e7892108021bc7c.jpg

四、說明(遇到的坑)

關(guān)于簽名
支付寶支持的簽名方式較多,MD5、RSA都支持,其中移動支付目前僅支持RSA簽名方式,其他方式都支持MD5/RSA,需要說明的是,MD5簽名的時候是將key按字母順序排序,然后拼上從支付寶申請的MD5 key,組成一個新的字符串,然后簽名,如:

key-value如下

_input_charset=utf-8&body=20160128|10201601281559200554074030492283|ALIPAY-WAP|1&exter_invoke_ip=112.97.61.254&notify_url=http://127.0.0.1:8080/&out_trade_no=00652016012815592280050374808082&service=alipay.wap.create.direct.pay.by.user&subject=1&total_fee=0.01

假設(shè)你從支付寶申請的MD5 KEY為:aabbccddeeff
拼接上去后是:

_input_charset=utf-8&body=20160128|10201601281559200554074030492283|ALIPAY-WAP|1&exter_invoke_ip=112.97.61.254&notify_url=http://127.0.0.1:8080/&out_trade_no=00652016012815592280050374808082&service=alipay.wap.create.direct.pay.by.user&subject=1&total_fee=0.01aabbccddeeff

之前做微信支付的時候定勢思維,以為兩者的拼接方式相同,下意識的也這么做,結(jié)果一直驗簽不過,微信的拼接方式是,在原來字符串的基礎(chǔ)上加上"&key=MD5 KEY",如:

_input_charset=utf-8&body=20160128|10201601281559200554074030492283|ALIPAY-WAP|1&exter_invoke_ip=112.97.61.254&notify_url=http://127.0.0.1:8080/&out_trade_no=00652016012815592280050374808082&service=alipay.wap.create.direct.pay.by.user&subject=1&total_fee=0.01&key=aabbccddeeff

然后再計算MD5。

值得注意的是,計算MD5簽名難道不大,但是跟支付寶調(diào)試的時候容易出現(xiàn)驗簽不過,比較多的都是簽名串與提交表單的input不同字符編碼不同……為了解決編碼不同導(dǎo)致的驗簽不過,我們通常在表單頭中加入:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

移動支付中,需要對簽名值進行一次URL編碼,但是,在支付結(jié)果通知的報文的簽名值卻不需要對簽名值進行URL解密,比較奇怪的地方。

   try {
            /**
             * 僅需對sign 做URL編碼
             */
            sign = URLEncoder.encode(sign, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容