微信公衆號「後端進階」,專一後端技術分享:Java、Golang、WEB框架、分佈式中間件、服務治理等等。
老司機傾囊相授,帶你一路進階,來不及解釋了快上車!git
注:本人照着微信支付官方 SDK Java 版,用 Go 語言實現的一個微信支付 SDK,與 Java 版功能一致,具有輕量易上手,且功能齊全的特色,理論上性能也會比 Java 版的更快。github
GitHub地址:github.com/objcoding/w…golang
wxpay提供了對應的方法:後端
方法名 | 說明 |
---|---|
MicroPay | 刷卡支付 |
UnifiedOrder | 統一下單 |
OrderQuery | 查詢訂單 |
Reverse | 撤銷訂單 |
CloseOrder | 關閉訂單 |
Refund | 申請退款 |
RefundQuery | 查詢退款 |
DownloadBill | 下載對帳單 |
Report | 交易保障 |
ShortUrl | 轉換短連接 |
AuthCodeToOpenid | 受權碼查詢openid |
Params
類型,返回類型也是Params
,Params
是一個 map[string]string 類型的結構體。appid
、mch_id
、nonce_str
、sign\_type
和sign
的XML;return_code
和return_msg
。若成功,其中return_code
爲SUCCESS
,另外data
對應對帳單數據。go get github.com/objcoding/wxpay
複製代碼
// 新建微信支付客戶端
client := wxpay.NewClient(wxpay.NewAccount{
AppID: "appid",
MchID: "mchid",
ApiKey: "apiKey",
}, false) // sandbox環境請傳true
// 統一下單
params := make(wxpay.Params)
params.SetString("body", "test").
SetString("out_trade_no", "436577857").
SetInt64("total_fee", 1).
SetString("spbill_create_ip", "127.0.0.1").
SetString("notify_url", "http://notify.objcoding.com/notify").
SetString("trade_type", "APP")
p, _ := client.UnifiedOrder(params)
// 訂單查詢
params := make(wxpay.Params)
params.SetString("out_trade_no", "3568785")
p, _ := client.OrderQuery(params)
// 退款
params := make(wxpay.Params)
params.SetString("out_trade_no", "3568785").
SetString("out_refund_no", "19374568").
SetInt64("total_fee", 1).
SetInt64("refund_fee", 1)
p, _ := client.Refund(params)
// 退款查詢
params := make(wxpay.Params)
params.SetString("out_refund_no", "3568785")
p, _ := client.RefundQuery(params)
複製代碼
// 建立支付帳戶
account := wxpay.NewAccount("appid", "mchid", "apiKey")
// 設置證書
account.SetCertData("證書地址")
// 新建微信支付客戶端
client := wxpay.NewClient(account, false) // sandbox環境請傳true
// 設置http請求超時時間
client.SetHttpConnectTimeoutMs(2000)
// 設置http讀取信息流超時時間
client.SetHttpReadTimeoutMs(1000)
// 更改簽名類型
client.SetSignType(HMACSHA256)
// 設置支付帳戶
client.setAccount(account)
複製代碼
// 簽名
signStr := client.Sign(params)
// 校驗簽名
b := client.ValidSign(params)
複製代碼
// 支付或退款返回成功信息
return wxpay.Notifies{}.OK()
// 支付或退款返回失敗信息
return wxpay.Notifies{}.NotOK("支付失敗或退款失敗了")
複製代碼
MIT licenseapi