微信公眾號支付Java

2017-04-06|HiShop
導讀:微信公眾號支付Java 代碼這個微信官網(wǎng)說的還是很詳細的,還配了圖。我還要再說一遍。 用戶點擊一個支付按鈕--{后臺一大推處理}--用戶看到了一個輸入密碼的界面,包含金額等一些信...

  微信公眾號支付Java代碼這個微信官網(wǎng)說的還是很詳細的,還配了圖。我還要再說一遍。

  用戶點擊一個支付按鈕-->{后臺一大推處理}-->用戶看到了一個輸入密碼的界面,包含金額等一些信息-->用戶輸入密碼后出來一個支付成功的頁面(這部分流程都是微信自己完成的,我們什么都不用做)-->返回系統(tǒng)自己的頁面(總不能讓用戶一直看著一個支付完成的頁面吧?;隋X,正心疼的,趕緊跳轉(zhuǎn)啊~一會后悔了,申請退款怎么整??蓱z的工程師還得開發(fā)退款功能)

  開發(fā)流程

  1)獲取用戶授權(quán)(這個做不做沒有啥關(guān)系,反正我還沒做呢)

  2)調(diào)用統(tǒng)一下單接口獲取預支付id

  3)H5調(diào)起微信支付的內(nèi)置JS

  4)支付完成后,微信回調(diào)URL的處理

  看著大段的文字,是不是很不爽。忘記了在哪里看到的一句話。One picture instead thousands of words. (圖中紅色部分是我們需要做的。好像也沒有多少

  

微信公眾號支付Java

 

  )

  

微信公眾號支付Java

 

  本文最主要的部分開始了(想直接看代碼,貼上代碼,你也不一定能看懂,不是說代碼難,各種分離,各種類,不直接??炊耍灰欢苷{(diào)試通。最后一個簽名錯誤,或者$get_brand_wcpay_request:fail.$key0 還是得回來乖乖的對參數(shù)。)最近學習英語有點魔怔了。各種插入語。不懂什么梗的,可略過。朋友一直說我的笑點和別人不一樣。文后會講個笑話。

  1、生成統(tǒng)一下單接口,獲取prepay_id.

  需要的參數(shù) ==名稱==從哪里找到他們:

  微信官方給了個參數(shù)的詳細說明。https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 部分參數(shù),仍然不知道哪里找的小伙伴們請繼續(xù)向下看

  appid ==應用ID==登陸微信公眾號后臺-開發(fā)-基本配置

  mch_id == 微信支付商戶號==登陸微信支付后臺,即可看到

  device_info==設備號==終端設備號(門店號或收銀設備ID),注意:PC網(wǎng)頁或公眾號內(nèi)支付請傳"WEB"

  body==商品描述==商品或支付單簡要描述(不知道是什么鬼,沒關(guān)系,先隨便傳個字符串,隨便的傳個英文的字符串。你會為你這個時候的英明決定打個滿分。如果是中文,可能會遇到毫無頭緒的簽名錯誤,嚴重者開始懷疑人生)

  trade_type==交易類型==取值如下:JSAPI,NATIVE,APP。我們這里使用的JSAPI。標題已經(jīng)說了,是微信公眾號支付。他們的區(qū)別,請參考https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2

  ps:JSAPI--公眾號支付、NATIVE--原生掃碼支付、APP--app支付,統(tǒng)一下單接口trade_type的傳參可參考這里。MICROPAY--刷卡支付,刷卡支付有單獨的支付接口,不調(diào)用統(tǒng)一下單接口

  nonce_str==隨機字符串==隨機字符串,不長于32位(參考算法https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3)

  ps:小伙伴們可能會對nonce這個命名,很詫異,微信team的人,都是逗必嗎~

  

微信公眾號支付Java

 

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

  

微信公眾號支付Java

 

  發(fā)現(xiàn)了這個。nonce ==number used once.恍然大悟的趕腳。

  notify_url==通知地址==接收微信支付異步通知回調(diào)地址,通知url必須為直接可訪問的url,不能攜帶參數(shù)。(這,起個什么名字好呢。隨便起吧,反正一時半會也用不到)

  out_trade_no==商戶訂單號==商戶系統(tǒng)內(nèi)部的訂單號,32個字符內(nèi)、可包含字母(參考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2)(每次看完微信的官方解釋就更迷茫了,有木有。沒關(guān)系,我就傳個1咋了。)

  total_fee==總金額==訂單總金額,單位為分(為了公司的項目測試,還得自己掏銀子,1分錢也是錢啊。ps:這個時候總會想起,一個同學說過,蒼蠅腿也是肉啊)

  openid==用戶標識==trade_type=JSAPI,此參數(shù)必傳,用戶在商戶appid下的唯一標識。(要是不知道這個從哪里來的話,沒關(guān)系。微信不是給咱寫文檔了嗎https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_4)

  還有最最重要的一個,重要的角色總要在最后登場。

  sign==簽名==官方給的簽名算法。https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3。沒有看懂,看不太懂,你覺得你看懂了,沒關(guān)系,不遇到幾次簽名錯誤,好意思說自己做過微信支付開發(fā)嗎。

  說道這個sign還有一個更重要的參數(shù)。參與簽名的參數(shù)。反正我是找了好久才找到。(公司運營申請的微信支付,當我找她要的時候,他的表情是這樣子的。

  

微信公眾號支付Java

 

  )

  key==key設置路徑:微信商戶平臺(pay.weixin.qq.com)-->賬戶設置-->API安全-->密鑰設置

  在這里:

  

微信公眾號支付Java

 

  網(wǎng)上有說怎么找得。我也懶得去找。直接自己想了一個字符串,然后用MD5加密成32位的字符串,重新設置的。

  生成sign簽名的時候,要用到這個key值,所以,要保存好。

  我看別人生成簽名(sign)用了很多,反正我就用了上面給出的那些參數(shù)生成的sign.(這個上面指的是我的博客上面,不是微信上面。為了減少誤解,貼出我生成sign簽名的參數(shù))

  我生成sign簽名的參數(shù)

  

微信公眾號支付Java

 

  準備好以上參數(shù)之后,封裝成XML

  格式如下:

<xml>
    <appid>wxb1427ebebexxxxxx</appid>
    <body>XXX費用</body>
    <device_info>WEB</device_info>
    <mch_id>132186xxxx</mch_id>
    <nonce_str>6AED000AF86A084F9CB0264161E29DD3</nonce_str>
    <notify_url>https://一個域名/api/wechatPay/jsapiPayNotify</notify_url>
    <openid>oo8WUt0taCqjt552htW1vw-xxxxx</openid>
    <out_trade_no>1</out_trade_no>
    <sign>各種排序+key生成的那個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

  見證奇跡的時刻。如果以上參數(shù)都神奇的對了,那么會收到微信返回的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

  以上就是微信公眾號支付Java,希望這篇文章對大家有所幫助!如果想繼續(xù)了解相關(guān)微信素材文章,可以繼續(xù)關(guān)注本站!

TAGS: