微信公眾號(hào)支付Java
微信公眾號(hào)支付Java代碼這個(gè)微信官網(wǎng)說(shuō)的還是很詳細(xì)的,還配了圖。我還要再說(shuō)一遍。
用戶點(diǎn)擊一個(gè)支付按鈕-->{后臺(tái)一大推處理}-->用戶看到了一個(gè)輸入密碼的界面,包含金額等一些信息-->用戶輸入密碼后出來(lái)一個(gè)支付成功的頁(yè)面(這部分流程都是微信自己完成的,我們什么都不用做)-->返回系統(tǒng)自己的頁(yè)面(總不能讓用戶一直看著一個(gè)支付完成的頁(yè)面吧。花了錢(qián),正心疼的,趕緊跳轉(zhuǎn)啊~一會(huì)后悔了,申請(qǐng)退款怎么整。可憐的工程師還得開(kāi)發(fā)退款功能)
開(kāi)發(fā)流程
1)獲取用戶授權(quán)(這個(gè)做不做沒(méi)有啥關(guān)系,反正我還沒(méi)做呢)
2)調(diào)用統(tǒng)一下單接口獲取預(yù)支付id
3)H5調(diào)起微信支付的內(nèi)置JS
4)支付完成后,微信回調(diào)URL的處理
看著大段的文字,是不是很不爽。忘記了在哪里看到的一句話。One picture instead thousands of words. (圖中紅色部分是我們需要做的。好像也沒(méi)有多少

)

本文最主要的部分開(kāi)始了(想直接看代碼,貼上代碼,你也不一定能看懂,不是說(shuō)代碼難,各種分離,各種類(lèi),不直接。看懂了,不一定能調(diào)試通。最后一個(gè)簽名錯(cuò)誤,或者$get_brand_wcpay_request:fail.$key0 還是得回來(lái)乖乖的對(duì)參數(shù)。)最近學(xué)習(xí)英語(yǔ)有點(diǎn)魔怔了。各種插入語(yǔ)。不懂什么梗的,可略過(guò)。朋友一直說(shuō)我的笑點(diǎn)和別人不一樣。文后會(huì)講個(gè)笑話。
1、生成統(tǒng)一下單接口,獲取prepay_id.
需要的參數(shù) ==名稱==從哪里找到他們:
微信官方給了個(gè)參數(shù)的詳細(xì)說(shuō)明。https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 部分參數(shù),仍然不知道哪里找的小伙伴們請(qǐng)繼續(xù)向下看
appid ==應(yīng)用ID==登陸微信公眾號(hào)后臺(tái)-開(kāi)發(fā)-基本配置
mch_id == 微信支付商戶號(hào)==登陸微信支付后臺(tái),即可看到
device_info==設(shè)備號(hào)==終端設(shè)備號(hào)(門(mén)店號(hào)或收銀設(shè)備ID),注意:PC網(wǎng)頁(yè)或公眾號(hào)內(nèi)支付請(qǐng)傳"WEB"
body==商品描述==商品或支付單簡(jiǎn)要描述(不知道是什么鬼,沒(méi)關(guān)系,先隨便傳個(gè)字符串,隨便的傳個(gè)英文的字符串。你會(huì)為你這個(gè)時(shí)候的英明決定打個(gè)滿分。如果是中文,可能會(huì)遇到毫無(wú)頭緒的簽名錯(cuò)誤,嚴(yán)重者開(kāi)始懷疑人生)
trade_type==交易類(lèi)型==取值如下:JSAPI,NATIVE,APP。我們這里使用的JSAPI。標(biāo)題已經(jīng)說(shuō)了,是微信公眾號(hào)支付。他們的區(qū)別,請(qǐng)參考https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2
ps:JSAPI--公眾號(hào)支付、NATIVE--原生掃碼支付、APP--app支付,統(tǒng)一下單接口trade_type的傳參可參考這里。MICROPAY--刷卡支付,刷卡支付有單獨(dú)的支付接口,不調(diào)用統(tǒng)一下單接口
nonce_str==隨機(jī)字符串==隨機(jī)字符串,不長(zhǎng)于32位(參考算法https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3)
ps:小伙伴們可能會(huì)對(duì)nonce這個(gè)命名,很詫異,微信team的人,都是逗必嗎~

。查了一下百科,隨機(jī)數(shù)也用nonce表示。瞬間傷害滿滿的。(好奇的寶寶可用劍橋詞典查一下nonce的意思)。在我的不懈努力下,

發(fā)現(xiàn)了這個(gè)。nonce ==number used once.恍然大悟的趕腳。
notify_url==通知地址==接收微信支付異步通知回調(diào)地址,通知url必須為直接可訪問(wèn)的url,不能攜帶參數(shù)。(這,起個(gè)什么名字好呢。隨便起吧,反正一時(shí)半會(huì)也用不到)
out_trade_no==商戶訂單號(hào)==商戶系統(tǒng)內(nèi)部的訂單號(hào),32個(gè)字符內(nèi)、可包含字母(參考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2)(每次看完微信的官方解釋就更迷茫了,有木有。沒(méi)關(guān)系,我就傳個(gè)1咋了。)
total_fee==總金額==訂單總金額,單位為分(為了公司的項(xiàng)目測(cè)試,還得自己掏銀子,1分錢(qián)也是錢(qián)啊。ps:這個(gè)時(shí)候總會(huì)想起,一個(gè)同學(xué)說(shuō)過(guò),蒼蠅腿也是肉啊)
openid==用戶標(biāo)識(shí)==trade_type=JSAPI,此參數(shù)必傳,用戶在商戶appid下的唯一標(biāo)識(shí)。(要是不知道這個(gè)從哪里來(lái)的話,沒(méi)關(guān)系。微信不是給咱寫(xiě)文檔了嗎https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_4)
還有最最重要的一個(gè),重要的角色總要在最后登場(chǎng)。
sign==簽名==官方給的簽名算法。https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3。沒(méi)有看懂,看不太懂,你覺(jué)得你看懂了,沒(méi)關(guān)系,不遇到幾次簽名錯(cuò)誤,好意思說(shuō)自己做過(guò)微信支付開(kāi)發(fā)嗎。
說(shuō)道這個(gè)sign還有一個(gè)更重要的參數(shù)。參與簽名的參數(shù)。反正我是找了好久才找到。(公司運(yùn)營(yíng)申請(qǐng)的微信支付,當(dāng)我找她要的時(shí)候,他的表情是這樣子的。

)
key==key設(shè)置路徑:微信商戶平臺(tái)(pay.weixin.qq.com)-->賬戶設(shè)置-->API安全-->密鑰設(shè)置
在這里:

網(wǎng)上有說(shuō)怎么找得。我也懶得去找。直接自己想了一個(gè)字符串,然后用MD5加密成32位的字符串,重新設(shè)置的。
生成sign簽名的時(shí)候,要用到這個(gè)key值,所以,要保存好。
我看別人生成簽名(sign)用了很多,反正我就用了上面給出的那些參數(shù)生成的sign.(這個(gè)上面指的是我的博客上面,不是微信上面。為了減少誤解,貼出我生成sign簽名的參數(shù))
我生成sign簽名的參數(shù)

準(zhǔn)備好以上參數(shù)之后,封裝成XML
格式如下:
<xml>
<appid>wxb1427ebebexxxxxx</appid>
<body>XXX費(fèi)用</body>
<device_info>WEB</device_info>
<mch_id>132186xxxx</mch_id>
<nonce_str>6AED000AF86A084F9CB0264161E29DD3</nonce_str>
<notify_url>https://一個(gè)域名/api/wechatPay/jsapiPayNotify</notify_url>
<openid>oo8WUt0taCqjt552htW1vw-xxxxx</openid>
<out_trade_no>1</out_trade_no>
<sign>各種排序+key生成的那個(gè)sign</sign>
<total_fee>1</total_fee>
<trade_type>JSAPI</trade_type>
</xml>
調(diào)用微信的統(tǒng)一下單地址:https://api.mch.weixin.qq.com/pay/unifiedorder
見(jiàn)證奇跡的時(shí)刻。如果以上參數(shù)都神奇的對(duì)了,那么會(huì)收到微信返回的XML字符串,格式如下
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wxb1427ebebexxxxxx]]></appid>
<mch_id><![CDATA[132186xxxx]]></mch_id>
<device_info><![CDATA[WEB]]></device_info>
<nonce_str><![CDATA[Hh4LFHUUvtDYtNdp]]></nonce_str>
<sign><![CDATA[079F8A915FD3044F4A17D75F4945E955]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<prepay_id><![CDATA[wx20160617155030d9e6a0e48b0533061255]]></prepay_id>
<trade_type><![CDATA[JSAPI]]></trade_type>
</xml>
我們需要的,就是這貨
prepay_id
以上就是微信公眾號(hào)支付Java,希望這篇文章對(duì)大家有所幫助!如果想繼續(xù)了解相關(guān)微信素材文章,可以繼續(xù)關(guān)注本站!