1. 程式人生 > >微信公眾號支付開發全過程----JAVA

微信公眾號支付開發全過程----JAVA

1、生成統一下單介面,獲取prepay_id.需要的引數 ==名稱==從哪裡找到他們:微信官方給了個引數的詳細說明。https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 部分引數,仍然不知道哪裡找的小夥伴們請繼續向下看appid ==應用ID==登陸微信公眾號後臺-開發-基本配置mch_id == 微信支付商戶號==登陸微信支付後臺,即可看到device_info==裝置號==終端裝置號(門店號或收銀裝置ID),注意:PC網頁或公眾號內支付請傳"WEB"body==商品描述==商品或支付單簡要描述trade_type==交易型別==取值如下:JSAPI,NATIVE,APP。我們這裡使用的JSAPI。  nonce_str
==隨機字串==隨機字串,不長於32位。notify_url==通知地址==接收微信支付非同步通知回撥地址,通知url必須為直接可訪問的url,不能攜帶引數。out_trade_no==商戶訂單號==商戶系統內部的訂單號,32個字元內、可包含字母(參考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_2)。total_fee==總金額==訂單總金額,單位為分。openid==使用者標識==trade_type=JSAPI,此引數必傳,使用者在商戶appid下的唯一標識。(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。key==key設定路徑:微信商戶平臺(pay.weixin.qq.com)-->賬戶設定-->API安全-->金鑰設定在這裡:生成sign簽名的時候,要用到這個key值,所以,要儲存好。我生成sign簽名的引數
準備好以上引數之後,封裝成XML格式如下:複製程式碼
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<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>
複製程式碼呼叫微信的統一下單地址:https://api.mch.weixin.qq.com/pay/unifiedorder呼叫統一下單地址時傳的引數個引數名稱和引數值與生成簽名時相比,          ★   呼叫統一下單時多了一個sign的引數,其他引數名稱需要全部相同。          ★   呼叫統一下單時多了一個sign的引數,其他引數名稱需要全部相同。          ★   呼叫統一下單時多了一個sign的引數,其他引數名稱需要全部相同。   nonce_str的值可以不同獲取預支付ID時,如果返回值是【簽名錯誤】。那真是的你的簽名錯了,請仔細核對生成sign的引數名稱、引數值和呼叫統一下單介面的引數名稱和引數值 見證奇蹟的時刻。如果以上引數都神奇的對了,那麼會收到微信返回的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

然後獲取ticket


接下來是二次簽名,和第一次簽名一樣,相同的引數也必須一致

然後將引數傳送到前端就可以調起支付頁面了

支付完成之後你還得把結果告訴微信,告訴你的成功還是失敗,不然他會很擔心你的。