作為一個后端開發人員來說,微信開發已經是必備的技能之一了,今天小編就來分享一個相關的類庫shenghui0779/gochat(以下簡稱wechat)。這個類庫簡單易用,看源碼的時候目錄結構一目了然,可以看出作者的思路很清晰,功能也挺豐富日常開發來絕對夠用。下面跟著小編的節湊來一探究竟吧。
目錄結構
- mch: 商戶平臺相關業務, 下單、支付、退款、查詢、委托代扣、企業付款、企業紅包 等
- mp:小程序端相關業務, 小程序授權、用戶數據解析、消息發送、二維碼生成、消息 等
- pub:公眾號相關業務, 網頁授權、菜單、模板消息、消息回復、用戶管理、消息轉客服 等
- wechat.go 包的入口,獲取以上三個業務的實例
一、支付
下單用法
import (
"github.com/iiinsomnia/gochat"
"github.com/iiinsomnia/gochat/mch"
)// UnifiedOrder 統一下單數據 直接引用包里的結構體即可
type UnifiedOrder struct {
// 必填參數
OutTradeNO string // 商戶系統內部的訂單號,32個字符內、可包含字母,其他說明見商戶訂單號
TotalFee int // 訂單總金額,單位為分,詳見支付金額
SpbillCreateIP string // App和網頁支付提交用戶端ip,Native支付填調用微信支付API的機器IP
TradeType string // 取值如下:JSAPI,NATIVE,APP,MWEB,詳細說明見參數規定
Body string // 商品或支付單簡要描述
NotifyURL string // 接收微信支付異步通知回調地址,通知url必須為直接可訪問的url,不能攜帶參數
// 選填參數
DeviceInfo string // 終端設備號(門店號或收銀設備ID),注意:PC網頁或公眾號內支付請傳"WEB"
Detail string // 商品名稱明細列表
Attach string // 附加數據,在查詢API和支付通知中原樣返回,該字段主要用于商戶攜帶訂單的自定義數據
FeeType string // 符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型
TimeStart string // 訂單生成時間,格式為yyyyMMddHHmmss,如:2009年12月25日9點10分10秒 表示為:20091225091010
TimeExpire string // 訂單失效時間,格式為yyyyMMddHHmmss,如:2009年12月27日9點10分10秒 表示為:20091227091010
GoodsTag string // 商品標記,代金券或立減優惠功能的參數,說明詳見代金券或立減優惠
ProductID string // trade_type=NATIVE,此參數必傳。此id為二維碼中包含的商品ID,商戶自行定義
LimitPay string // no_credit--指定不能使用信用卡支付
OpenID string // trade_type=JSAPI,此參數必傳,用戶在商戶appid下的唯一標識
Receipt bool // 是否在支付成功消息和支付詳情頁中出現開票入口,注:需要在微信支付商戶平臺或微信公眾平臺開通電子發票功能
SceneInfo string // 該字段用于上報支付的場景信息
}
// 初始化實例
wxmch := gochat.NewWXMch(appid, apikey, cert)
r, err := wxmch.Order().Unify(order)
if err != nil {
// 錯誤處理...
}
if r["result_code"] != mch.ResultSuccess {
// 判斷微信的返回狀態碼,失敗處理...
}
// 成功邏輯處理...
// 拿到預支付的id
prepayID := r["prepay_id"]
// 獲取支付簽名的票據,返回給前端和app就能拉取支付界面了
// APP
data := wxmch.APPAPI(prepayID)
// JS
data := wxmch.JSAPI(prepayID)
查詢訂單狀態
// RefundData 退款數據
type RefundData struct {
// 必填參數
OutRefundNO string // 商戶系統內部的退款單號,商戶系統內部唯一,同一退款單號多次請求只退一筆
TotalFee int // 訂單總金額,單位為分,只能為整數,詳見支付金額
RefundFee int // 退款總金額,訂單總金額,單位為分,只能為整數,詳見支付金額
// 選填參數
RefundFeeType string // 貨幣類型,符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型
RefundDesc string // 若商戶傳入,會在下發給用戶的退款消息中體現退款原因
RefundAccount string // 退款資金來源,僅針對老資金流商戶使用
NotifyURL string // 異步接收微信支付退款結果通知的回調地址,通知URL必須為外網可訪問的url,不允許帶參數
}
// 根據微信訂單號查詢
r, err := wxmch.Order().QueryByTransactionID(transactionID)
// 根據商戶訂單號查詢
r, err := wxmch.Order().QueryByOutTradeNO(transactionID)
// 關閉訂單
r, err := wxmch.Order().Close(outTradeNO)
退款
// 根據微信訂單號退款
r, err := wxmch.Refund().RefundByTransactionID(transactionID, refundData)
if err != nil {
// 錯誤處理...
}
if r["result_code"] != mch.ResultSuccess {
// 失敗處理...
}
// 成功邏輯處理...
// 根據商戶訂單號退款
r, err := wxmch.Refund().RefundByOutTradeNO(outTradeNO, refundData)
if err != nil {
// 錯誤處理...
}
if r["result_code"] != mch.ResultSuccess {
// 失敗處理...
}
// 成功邏輯處理...
小程序
登錄授權
import (
"github.com/iiinsomnia/gochat"
"github.com/iiinsomnia/gochat/mp"
"github.com/iiinsomnia/gochat/utils"
)// 初始化小程序實例wxmp := gochat.NewWXMP(appid, appsecret)// 授權 session, err := wxmp.Sns().Code2Session(code)// 數據校驗解密// 數據簽名校驗if signature != utils.SHA1(rawData+sessionKey) {
return errors.New("簽名校驗失敗")
}// 數據解密bizDataCrypt := wxmp.BizDataCrypt(encryptedData, sessionKey, iv)if err := bizDataCrypt.Decrypt(); err != nil {
return err
}// 解密后取用戶信息bizData, err := bizDataCrypt.GetUserData()if err != nil {
return err
}
獲取access_token
accessToken, err := wxmp.CgiBin().GetAccessToken()
if err != nil {
return err
}// TODO: 存儲 access_token ...
因 access_token 每日獲取次數有限且含有效期,故服務端應妥善保存 access_token 并定時刷新
公眾號
// 獲取公眾號實例
pub := gochat.NewWXPub(accountid, appid, appsecret, signToken, encodingAESKey)
整個包看下來還是蠻簡單,使用方便。想要了解更多內容可以去查看作者的源碼和使用說明。
地址: https://github.com/shenghui0779/gochat/wiki






