文章包括以下內容
- 支付場景簡介
- 第一步:申請微信支付申請(注冊微信支付商戶號)
- 第二步:獲取商戶號的支付參數
- 第三步:SDK下載(java版本)
- 第四步:支付過程了解
- 第五步:開始設計和編碼
支付場景簡介
目前微信支付有6個場景,分別是以下6個(2019-04-06)
- 我有線下場所
- 我有公眾號
- 我有小程序
- 我有pc網站
- 我有App
- 我有企業微信
https://pay.weixin.qq.com/static/applyment_guide/applyment_index.shtml
第一步:申請微信支付申請(注冊微信支付商戶號)
這一步完成后那么就擁有了支付接口權限了。
我的支付場景是公眾號支付,所以首先你先要有一個公眾號。有了公眾號之后就可以申請付款碼支付和JSAPI支付產品了,我習慣成這個產品為支付接口。也就是有了2個支付接口權限了,
- 根據自身的屬性申請准備對應的申請材料
- 交申請費用(目前幾百就行了)
- 3個申請流程
https://pay.weixin.qq.com/static/applyment_guide/applyment_detail_public.shtml
第二步:獲取商戶號的支付參數
支付參數都是登錄商戶號頁面里面獲取的,參數用於對接用
需要4參數:
- appid(appid)
- mchid(商戶id)
- key(支付key)
- certPath(證書路徑)
說明:以上參數是sdk需要的參數
第三步:SDK下載(java版本)
首先下載微信支付sdk,我選擇的是java開發
下載地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
解壓之后的目錄是這樣的
文件說明
src:源代碼目錄
pom.xml:該庫依賴的第三庫
README.md:微信提供的示例,這個一定要打開看看,里面有關於怎么使用這個sdk的例子。
把下載下來的代碼引入到工程下目錄是這樣的
第四步:支付過程了解
對應的微信支付文檔地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3
下面這個時序圖是從用戶下單到支付完成過程,涉及的應用包括微信客戶端,商戶app客戶端,上后后台系統,微信支付系統。
大概的過程是這樣的
- 用戶打開商戶系統選擇商品下單,這時候商戶系統后台生成訂單和訂單明細,記錄到數據庫中(購物車)
- 用戶向商戶系統發送支付請求(帶上訂單id)
- 商戶系統系統根據訂單id計算金額等一些信息(收集一些支付參數)
- 向微信發起支付請求(生成預支付訂單),並且返回預支付參數(用於調起微信支付界面)
- 商戶系統接收微信系統的支付結果推送。
- 商戶系統根據推送結果更新訂單狀態
基本上我們關注的是商戶系統的開發,比如購物車(生成訂單和訂單明細),更新訂單支付狀態這些功能點了
第五步:開始設計和編碼
了解以上微信支付的過程后接下來要編碼就簡單多了,
首先我們需要有個訂單和訂單明細表,如customer_order,customer_order_detail,
customer_order主要的字段包括:
字段名稱 | 類型 | 說明 |
id | string | |
pay_time | datatime | 支付時間 |
total_fee | int | 訂單金額(單位:分) |
customer_id | string | 用戶id |
order_state | string | 訂單狀態 |
customer_order_detail主要字段包括:
字段名稱 | 類型 | 說明 |
id | string | |
order_id | string | 訂單主鍵 |
good_id | string | 商品id |
count | int | 商品數量 |
unit_price | int | 單價(分) |
調用微信統一支付接口代碼
這里要注意的就是返回的結果中要有個對參數進行簽名,sdk中提供的是掃描支付號線更沒有加入最后一行的簽名,我這里遇到了一坑花了好長時間,其實時序圖中已經寫明了要進行簽名,所以吸取個教訓,一定要看清楚文檔。
拉起微信支付界面
這里需要利用上一步的參數,然后調用微信內置瀏覽器的函數拉起微信支付,所以這里一定要在微信內打開才能拉起支付,在別的手機瀏覽器或者電腦瀏覽器打開是不行的。
如果程序正常調用該函數應該會拉起微信支付界面,這里值得說下的是維系貌似有提供沙箱模式給開發者測試用的,但是沒必要開發過程中可以先把金額調整1分錢就行了,就像下圖這樣。真實環境開干啊。
最后一步:更新支付狀態(訂單狀態)
這里需要說下在調用預支付(統一支付接口)的時候有個參數是設置回調的連接,notify_url,這個連接是用戶支付之后微信用這個鏈接來告訴你支付結果的,這里要注意更新訂單的時候要判斷下微信是否已經支付過了(判重),好像微信不止推送一次的,如果訂單不止未支付和已支付2個狀態那么一定要做一下判重。
以上就是基本的支付流程了,我遇到的問題大概就是支付參數獲取麻煩(商戶號不是我的),和少了次簽名,導致花了好多時間。
完畢,謝謝大家