用Go語言實現微信支付SDK

微信公衆號「後端進階」,專一後端技術分享:Java、Golang、WEB框架、分佈式中間件、服務治理等等。
老司機傾囊相授,帶你一路進階,來不及解釋了快上車!git

wxpay for golang

注:本人照着微信支付官方 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類型,返回類型也是ParamsParams 是一個 map[string]string 類型的結構體。
  • 方法內部會將參數會轉換成含有appidmch_idnonce_strsign\_typesign的XML;
  • 默認使用MD5進行簽名;
  • 經過HTTPS請求獲得返回數據後會對其作必要的處理(例如驗證簽名,簽名錯誤則拋出異常)。
  • 對於downloadBill,不管是否成功都返回Map,且都含有return_codereturn_msg。若成功,其中return_codeSUCCESS,另外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("支付失敗或退款失敗了")

複製代碼

License

MIT licenseapi

公衆號「後端進階」,專一後端技術分享!
相關文章
相關標籤/搜索